美文网首页
栈和队列算法设计题(一)

栈和队列算法设计题(一)

作者: 搬砖的猫 | 来源:发表于2019-10-31 10:29 被阅读0次

题目

回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符序列是否为回文。(提示:将一半字符入栈)

算法思想

将字符串前一半入栈,然后,栈中元素和字符串后一半进行比较。即将第一个出栈元素和后一半串中第一个字符比较,若相等,则再出栈一个元素与后一个字符比较,以此类推,直至栈空。

完整代码

#include <iostream>
#include <string.h>
using namespace std;

//回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符序列是否为回文。(提示:将一半字符入栈) 

#define MAXSIZE 100    //顺序栈存储空间的初始分配量 
typedef int SElemType;
typedef struct{
    SElemType *base;   //栈底指针 
    SElemType *top;    //栈顶指针 
    int stacksize;     //栈可用的最大容量 
}SqStack; 

//顺序栈的初始化
void InitStack(SqStack &S){
    //构造一个空栈 
    S.base = new SElemType[MAXSIZE];  //为顺序栈动态分配一个最大容量为MAXSIZE的数组空间 
    if(! S.base){
        //exit(OVERFLOW);               //存储分配失败 
    }
    S.top = S.base;                   //top初始为base,空栈 
    S.stacksize = MAXSIZE;            //stacksize置为栈的最大容量MAXSIZE 
    //return OK;
} 

//顺序栈的出栈
char Pop(SqStack &S, SElemType e){
    //删除S的栈顶元素,用e返回其值 
    if(S.top == S.base){               //栈空 
        //return ERROR;
    } 
    e == *--S.top;                     //栈顶指针减1,将栈顶元素赋给e 
    return e;
} 

bool EmptyStack(SqStack S){
    if(S.top== 0)
    {
        return false;
    }
   else
   {
        return true;
   }
}

void Push(SqStack &S, SElemType e){
    //插入元素e为新的栈顶元素 
    if(S.top - S.base == S.stacksize){  //栈满 
        //return ERROR;
    }
    *S.top ++ = e;                      //元素e压入栈顶,栈顶指针加1 
    //return OK;
} 

int IsPalindrome(SqStack S, char *t)
{
    //判断t字符向量是否为回文,若是,返回1,否则返回0 
    SElemType e;
    int flag = 1, temp;
    InitStack(S);
    int j = 1, len = strlen(t);           //求向量长度 
    while(2 * j <= len){
        Push(S, *t);
        j ++;
        *t ++;
    }
    if(len % 2 == 1){
        *t ++;
    } 
    for(int k = j - 1; k >= 1; k --){
        temp = Pop(S,e);
        if(*t == e){
            *t ++;
        } 
        else{
            flag=0;
        } 
    }
    return flag;
}

int main(){
    char *t;
    SqStack S;
    t = "dahlagioa";
    if(IsPalindrome(S, t)){
        cout << "字符串" << t << "是回文" << endl;
    }
    else{
        cout << "字符串" << t << "不是回文" << endl;
    }
    return 0;
}

结果显示

TIM图片20191031102850.png

相关文章

  • 数据结构——栈和队列

    用数组实现栈和队列 用栈实现队列 用队列实现栈 栈和队列的经典算法题最小间距栈宠物收养所 数组实现栈和队列 用数组...

  • 栈和队列算法设计题(一)

    题目 回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算...

  • 栈和队列算法设计题(二)

    题目 假设以I和O分别表示入栈和出栈操作。栈的初态和终态均为空,入栈和出栈的操作顺序可表示为仅由I和O组成的序列,...

  • 算法-栈和队列算法总结

    栈和队列算法总结 1 模拟 1.1 使用栈实现队列 1.2 使用队列实现栈 2 栈的应用 2.1 栈操作 2.2 ...

  • 栈与队列算法题

    栈 当前位置的元素不能立刻计算,需要隔着一段距离去找另一个对应的元素。 单调栈问题: 42.接雨水 (hard)当...

  • leecode刷题(26)-- 用栈实现队列

    leecode刷题(26)-- 用栈实现队列 用栈实现队列 使用栈实现队列的下列操作: push(x) -- 将一...

  • 技能树

    技能树 程序设计 + 软件开发 程序设计 掌握常用的数据结构和算法(例如链表,栈,堆,队列,排序和散列); 理解计...

  • 队列之-队列实现栈

    一、队列实现栈核心算法概述 之前已经描述过了用栈实现队列的功能,见栈系列之-实现队列,那么同样队列也可以用来实现栈...

  • iOS开发集锦之 2017.03.30(Swift 算法实战之路

    1. Swift 算法实战之路:栈和队列 作者: 故胤道长描述:栈和队列的基本Swift实现,以及在iOS开发中应...

  • 算法

    基本排序和查找算法? 如何用栈实现队列? TimSort原理?

网友评论

      本文标题:栈和队列算法设计题(一)

      本文链接:https://www.haomeiwen.com/subject/hamzvctx.html