回文字符的判断(栈与队列)代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

//头文件
//code.h
#define TRUE 1
#define FALSE 0
#define ok 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define NULL 0
typedef int Status;
//主函数
//test.cpp
#include"code.h"
#include<stdlib.h>
#include<process.h>
#include<stdio.h>
#include<String.h>
#define STACK_SIZE 100 /* 栈初始向量大小 */ #define STACKINCREMENT 10
//*************队列的操作函数*******************
typedef char QElemType;
typedef struct QNode{
QElemType data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct {
QueuePtr front; //队首
QueuePtr rear; //队尾
}LinkQueue;
Status InitQueue(LinkQueue &Q){ //构造空队列Q.front=Q.rear =(QueuePtr)malloc(sizeof(QNode));
if(!Q.front) exit(OVERFLOW);
Q.front->next=NULL;
return ok;
}
Status DestoryQueue(LinkQueue &Q){ //销毁队列while(Q.front ){
Q.rear=Q.front->next;
free(Q.front);
Q.front=Q.rear;
}
return ok;
}
Status EnQueue (LinkQueue &Q,QElemType e){ //在队尾插入元素QNode *p;
p=(QueuePtr)malloc(sizeof(QNode));
if(!p) exit (OVERFLOW);
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
return ok;
}
Status DeQueue(LinkQueue &Q,QElemType&e){ //删除队首元素,并返回其值if(Q.front==Q.rear) return ERROR;
QNode *p;
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p) Q.rear=Q.front;
free(p);
return ok;
}
//**************************栈的操作函数**************************
typedef char ElemType;
typedef struct SqStack{
ElemType *base; /* 栈不存在时值为NULL */
ElemType *top; /* 栈顶指针 */ int stacksize ; // 当前已分配空间,以元素为单位}SqStack ;
Status InitStack(SqStack &s){ /*构造空栈s*/
ElemType *a=(ElemType *)malloc(10*sizeof(ElemType));
realloc(a,STACK_SIZE *sizeof(ElemType));
s.base=(ElemType *)malloc(STACK_SIZE *sizeof(ElemType));
if (! s.base) return ERROR; //存储分配失败
s.top=s.base ; /* 栈空时栈顶和栈底指针相同 */ s.stacksize=STACK_SIZE;
return ok ;
}
Status GetTop(SqStack S,ElemType &e){ //返回栈顶元素if(S.top==S.base) return ERROR;
e=*(S.top-1);
return ok;
}
Status push(SqStack &S,ElemType e){ //进栈
if (S.top-S.base>=S.stacksize) return ERROR;
*S.top=e;
S.top++ ; /* 栈顶指针加1,e成为新的栈顶 */
return ok;
}
Status pop( SqStack &S, ElemType &e ){ //出栈
if ( S.top== S.base ) return ERROR ; /* 栈空,返回失败标志 */ S.top-- ;
e=*S.top ;
return ok ;
}
int stackLength( SqStack S){ //栈的长度return S.top-S.base ;
}
Status StackEmpty( SqStack &S){ //判断栈是否为空if ( S.top== S.base ) return TRUE;
else return FALSE;
}
//**************************比较函数********************
int compare(){
SqStack T;
LinkQueue R;
InitStack(T);
InitQueue(R);
char ch;
char a,b;
printf("请输入要判断的字符串以@作为结束符\n");
while((ch=getchar())!='@'){
push(T,ch); //进栈
EnQueue(R,ch); //入队}
while(T.top!=T.base){
pop(T,a); //出栈DeQueue(R,b); //出队
if(a!=b) return ERROR; //比较字符是否相同
else return ok;
}
}
//*******************主函数***************************
void main(){
int r=compare();
if(r==1)
printf("%s","此为回文字符序列\n");
else
printf("%s","此不为回文字符序列\n");
}。

相关文档
最新文档