1、判断一个栈是不是回文?
思路:根据栈的特性,可以将字符串全部压入栈,再依次将各个字符出栈,从而得到原字符串的逆置串,将逆置串中的各个字符分别和原字符串中各个字符进行比较,如果完全一致,则为回文串。
#include<iostream> #include<stack> #include<cstring> using namespace std; int main() { stack<char> s1; char str[]="abdsdba"; //cin>>str; cout<<strlen(str)<<endl; for(int i=0;i<strlen(str);i++) s1.push(str[i]); //while(!s1.empty()) for(int i=0;i<strlen(str);i++) { int x=s1.top(); s1.pop(); if(x!=str[i]) { cout<<"不是回文。"<<endl; return 0; } } cout<<"回文数。"<<endl; return 0; }
下面代码使用自己创建的栈来实现:
#include <iostream> using namespace std; typedef struct{ char data[1000]; int top; }Stack; void Init_stack(Stack *s) { s->top=0; } int Push_stack(Stack *s,char x) { s->data[s->top]=x; s->top++; return 1; } int Pop_stack(Stack *s,char *x) { *x=s->data[s->top-1]; s->top--; return 1; } int main(int argc, char *argv[]) { char data[1000]; int i,j; Stack s; char x; Init_stack(&s); cin>>data; for(i=0;i<strlen(data);i++) { Push_stack(&s,data[i]); } for(i=0;i<strlen(data);i++) { Pop_stack(&s,&x); if(data[i]!=x) { cout<<"不是回文数"<<endl; return 0; } } cout<<"回文数"<<endl; return 0; }