栈和队列例题——回文判断

//实验二--栈和队列
#include<iostream>
#include<cstdlib>
#include<cstdio> 
using namespace std;
#define m 100
typedef struct Stack{  //定义栈 
	char data[m];
	int top;
}stack;
typedef struct {     //定义队列 
	char data[m];
	int front;
	int rear;
}Queque;
void InitStack(stack* s)   //初始化栈 
{
	s->top=0;
}
void InitQueque(Queque* q)  //初始化队列 
{
	q->front=q->rear=0;
}
int StackEmpty(stack* s)   //判断栈是否为空 
{
	if(s->top==0)
	{
		return 0;   //代表栈不为空; 
	}
	else
		return 1;    //代表栈为空; 
 } 
 void Push(stack* s,char c){    //入栈 
 	if(s->top==100)
	 {
 		cout<<"栈已满!"<<endl; 
	 }
	 else
	 {
	 	s->data[++s->top]=c;
	 }
 }
 char OutStack(stack *s){     //出栈 
 	char c;
 	if(s->top==0)
 	{
 		cout<<"栈为空!"<<endl;
		 return '0'; 
	 }
	 else
	 {
	 	c=s->data[s->top];
	 	s->top--;
	 	return c;
	 }
 }
 void EnterQueque(Queque *q,char c)            //入队 
{ 
  if((q->rear+1)%m==q->front)            
   {  
    cout<<"队列已满!"<<endl; 
   }  
   else  
   {  
    q->data[q->rear]=c;                 
    q->rear=(q->rear+1);              
   }  
}                     
char OutQueque(Queque *q)         //出队
{  
  char f;  
  if(q->front==q->rear)                  
   {  
     cout<<"队列已为空!"<<endl;     
     return 0;  
   }  
      else  
   {  
     f=q->data[q->front];    
     q->front++;             
     return f;  
   }  
}                   
int  main()
{                                  
  char c;  
  int flag=0;  
  stack *s=new stack; 
  Queque *q=new Queque;  
  InitStack(s);    
  InitQueque(q);  
  while((c=getchar())!=10)  
  { 
    Push(s,c);             
    EnterQueque(q,c);  
  }  
  while(StackEmpty(s))           
	{ 
     if(OutStack(s)== OutQueque(q))  
     {  
      flag=1;                  
      continue;             
     }  
     else                    
     {  
      flag=0;  
      break;                  
     }  
   }
   if(flag==1)  
    cout<<'1';   //代表是回文; 
   else  
    cout<<'0';   //代表不是回文; 
  return 0; 
}   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值