回文判斷(一個棧是不是回文)


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;  
}  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM