C语言怎么利用栈和队列实现回文检测功能

C语言怎么利用栈和队列实现回文检测功能

本文小编为大家详细介绍“C语言怎么利用栈和队列实现回文检测功能”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言怎么利用栈和队列实现回文检测功能”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

具体代码如下:

#include<stdio.h>#include<malloc.h>//内存分配头文件#include<math.h>//在math.h中已定义OVERFLOW的值为3#defineSIZE100#defineSTACKINCREMENT10#defineOK1#defineERROR0#defineTRUE1#defineFALSE0typedefintStatus;typedefstruct//栈的结构体{chara;}SElemType;typedefstruct{SElemType*base;SElemType*top;intstacksize;}SqStack;typedefstruct//QNode//队列的结构体{charb;structQNode*next;}QNode,*QueuePtr;typedefstruct//链队列类型{QueuePtrfront;//队头指针QueuePtrrear;//队尾指针}LinkQueue;//定义全局变量SqStackS;SElemTypee;LinkQueueQ;QueuePtrp;charf;//栈操作StatusInitStack(SqStack*S){S->base=(SElemType*)malloc(SIZE*sizeof(SElemType));if(!S->base)exit(OVERFLOW);S->top=S->base;S->stacksize=SIZE;returnOK;}StatusPush(SqStack*S,SElemTypee){if(S->top-S->base>=S->stacksize){S->base=(SElemType*)malloc((S->stacksize+STACKINCREMENT)*sizeof(SElemType));if(!S->base)exit(OVERFLOW);S->top=S->base+S->stacksize;S->stacksize+=STACKINCREMENT;}*S->top++=e;returnOK;}StatusStackempty(SqStackS)//栈是否为空{if(S.top==S.base)returnTRUE;elsereturnFALSE;}StatusPop(SqStack*S,SElemType*e){if(S->top==S->base)returnERROR;*e=*--S->top;returnOK;}StatusStackLength(SqStackS)//求栈的长度{return(S.top-S.base);}//队列操作StatusInitQueue(LinkQueue*Q){Q->front=(QueuePtr)malloc(sizeof(QNode));Q->rear=Q->front;if(!Q->front)exit(OVERFLOW);Q->front->next=NULL;returnOK;}StatusEnQueue(LinkQueue*Q,charf){p=(QueuePtr)malloc(sizeof(QNode));if(!p)exit(OVERFLOW);p->b=f;p->next=NULL;Q->rear->next=p;Q->rear=p;returnOK;}StatusDeQueue(LinkQueue*Q,char*f){if(Q->front==Q->rear)returnERROR;p=Q->front->next;*f=p->b;Q->front->next=p->next;if(Q->rear==p)Q->rear=Q->front;free(p);returnOK;}StatusQueueLength(LinkQueueQ){inti=0;p=Q.front;while(Q.rear!=p){i++;p=p->next;}returni;}StatusQueueEmpty(LinkQueueQ){if(Q.front==Q.rear)returnTRUE;elsereturnFALSE;}voidmain(){inti,m;charn,a[20];InitStack(&S);InitQueue(&Q);gets(a);for(i=0;a[i]!='&';i++)///////////&前的数据进栈{e.a=a[i];Push(&S,e);}for(i=i+1;a[i]!='\0';i++)//////////‘&'后的数据进入队列EnQueue(&Q,a[i]);if(StackLength(S)!=QueueLength(Q))/////栈和队列的数据个数不一样printf("NO!!!!!!!!!!!!!!!!!!!!!!!!!!!!");elsewhile(!Stackempty(S)&&!QueueEmpty(Q))///////栈和队列里还有数据{Pop(&S,&e);m=e.a;DeQueue(&Q,&f);n=f;if(m!=n){printf("NO!!!!!!!!!!!!!!!!!!!!!!");break;}}if(m==n&&Stackempty(S)&&QueueEmpty(Q))printf("YES!!!!!!!!!!!!!!!!!!!!!!");}

运行结果:

读到这里,这篇“C语言怎么利用栈和队列实现回文检测功能”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注恰卡编程网行业资讯频道。

发布于 2022-04-03 22:39:31
收藏
分享
海报
0 条评论
30
上一篇:c语言如何构建一个静态二叉树 下一篇:node esmodule模式下如何调用commonjs模块
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码