栈之回文

#include<stdio.h>
#include<string.h>
#define MaxSize 100
typedef char DataType;
typedef struct
{
    DataType stack[MaxSize];
    int top;
}SeqStack;
void StackInitiate(SeqStack *s)//初始化
{
    s->top=0;
}
int StackNotEmpty(SeqStack s)//非空否
{
    if(s.top<= 0) return 0;
    else return 1;
}
int StackPush(SeqStack *s,DataType x)//入栈
{
    if(s->top>=MaxSize)
    {
        return 0;
    }
    else
    {
        s->stack[s->top]=x;
        s->top++;
        return 1;
    }
}
int StackPop(SeqStack *s,DataType *d)//出栈
{
    if(s->top<=0)
    {
        return 0;
    }
    else
    {
        s->top--;
        *d=s->stack[s->top];
        return 1;
    }
}
int StackTop(SeqStack s,DataType *d)//取栈顶数据
{
    if(s.top<=0)
    {
        return 0;
    }
    else
    {
        *d=s.stack[s.top-1];
        return 1;
    }
} 

int main()
{
    SeqStack l;
    char a[100],b[100];
    char e;
    int n,i,first;
    scanf("%s",a);
    n=strlen(a);
    StackInitiate(&l);
    for(i=0;i<n/2;i++)
    {
        StackPush(&l,a[i]);
    }
    for(i=0;i<n/2;i++)
    {
        StackTop(l,&b[i]);
        StackPop(&l,&e);

    }
    if(n%2==0)
    {
        for(i=0;i<n/2;i++)
        {
            if(b[i]==a[i+n/2])
            first=1;
            else
            {
                first=0;
                break;
            }
        }
        if(first)
        printf("yes");
        else
        printf("no");
    }
    else
    {
        for(i=0;i<n/2;i++)
        {
            if(b[i]==a[i+1+n/2])
            first=1;
            else
            {
                first=0;
                break;
            }
        }
        if(first)
        printf("yes");
        else
        printf("no");
    }

} 
时间: 2024-12-28 23:51:15

栈之回文的相关文章

栈解决回文

首先,先说说栈. 栈:后进先出的数据结构,它叫做栈. 回文:就是像这样:"123321","1221".等就是回文. 解决方法:先把字符串前半截123或12压栈,然后再出栈和字符串后半截321比较,就OK. 上代码: #include <stdio.h> #include <stdlib.h> #include <string.h> /* 判断回文 */ int statckJudge(char *arr,int size) {

顺序栈来判断回文串

#include<stdio.h> #include<string> #include<iostream> using namespace std; #define StackSize 100 typedef char DataType; typedef struct{ DataType data[StackSize]; int top; }SeqStack; /*void Int(SeqStack *s){ s->top=-1; }*/ int judge(Se

回文判断

一个整形数是否是回文 also leetcode 9 Palindrome Number要求空间复杂度O(1)按位判断一般是/和%的游戏,首先取首位 a/h (h是最接近a的10的次方,比如12321,h预计算出是10000), 再取末位a%10; 比较首位和末位是否相等,不等就返回false; 如图: 然后舍弃掉已经比较过的两个位数,从a中去掉首尾 12321 --> 232. a = a % h; // 去掉首 a = a /10; //去掉尾 h = 100; // 因为已经去掉了两位 如

DS之顺序栈和链队实现回文判断

顺序栈和链队的基本操作就不再一一列举了,要想实现回文判断,先来了解什么是回文?"回文"一字符串正着读和反着读是相同的字符序列,如"abcba","abba"为"回文","abab"则不是"回文". 其次就是顺序栈和链队如何实现回文的判断?将输入的字符串依次入栈和入队,然后再依次出栈和出队,由于入栈和入队是相同的序列,然而出栈和出队是相反的序列,这就实现了回文的判断. 最后考虑要用到顺序栈

判断一个字符串是否为回文-链队(新建,进队,出队),链栈(新建,进栈,出栈)

回文:字符对称排列的字符串,例如ABCBA 思路:根据队:先进先出和栈: 先进后出的原则,进行比较出队和出栈的字符是否相等.如果相等,则为回文. 创建控制台应用程序. 1 #region 字符节点类 2 class CharNode 3 { 4 public char Char //字符 5 { 6 get; 7 set; 8 } 9 public CharNode Next //下一节点 10 { 11 get; 12 set; 13 } 14 public CharNode(char Cha

回文---栈

/*栈的实现只需要一个一维数组和一个指向栈顶的变量top就好了,通过top来对栈进行插入和删除操作,下面的代码是计算字符串是否是回文*/ #include <stdio.h> #include <string.h> int main() { char a[101],s[101]; int i,len,mid,next,top; gets(a); //读入一行字符串 len=strlen(a); //求字符串的长度 mid=len/2-1; //求字符串的中点 top=0;//栈的初

解密回文——栈

一.关于栈的介绍 栈是一种后进先出的数据结构,它限定为只能在一端进行插入和删除操作. 比如说有一个小桶,小桶的直径只能放一个小球,我们现在在小桶内依次放入2.1.3号小球.假如你现在需要拿出2号小球,那就必须先将3号小球拿出,再拿出1号小球,最后才能将2号小球拿出来.在刚才取小球的过程中,我们最先放进去的小球最后才能拿出来,最后放进去的小球却可以最先拿出来. 栈的实现需要一个一维数组和一个指向栈顶的变量top,通过top来对栈进行插入和删除的操作. 通过栈这个数据结构我们将很容易判断一个字符串是

栈浅析[解密回文]

栈的实现很简单,只需要一个一维数组和一个指向栈顶的变量top就可以了.我们通过top来对栈进行插入和删除操作. 栈究竟有哪些作用呢?我们来看一个例子."xyzyx"是一个回文字符串,所谓回文字符串就是指正读反读均相同的字符序列,如"席主席"."记书记"."aha"和"ahaha"均是回文,但"ahah"不是回文.通过栈这个数据结构我们将很容易判断一个字符串是否为回文. 如果一个字符串是回

c++实验4 栈及栈的应用+回文+中、后缀表达式

栈及栈的应用+回文+中.后缀表达式 1.栈顺序存储结构的基本操作算法实现 (1)栈顺序存储结构的类定义: class SeqStack { private: int maxsize; DataType *data; //顺序堆栈数组 int top; //栈顶位置指示器 public: SeqStack(int size); //构造函数 ~SeqStack(void) {} //析构函数 void Push(const DataType item); //入栈 DataType Pop(voi