文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-06-16 21:52

关注

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

具体代码如下:

#include<stdio.h>#include<malloc.h>//内存分配头文件#include<math.h>//在math.h中已定义OVERFLOW的值为3#define SIZE 100#define STACKINCREMENT 10#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0typedef int Status;typedef struct   //栈的结构体{  char a;} SElemType;typedef struct{  SElemType *base;  SElemType *top;  int stacksize;} SqStack;typedef struct //QNode //队列的结构体{  char b;  struct QNode * next;} QNode,*QueuePtr;typedef struct // 链队列类型{  QueuePtr front;  // 队头指针  QueuePtr rear;  // 队尾指针} LinkQueue;//定义全局变量SqStack S;SElemType e;LinkQueue Q;QueuePtr p;char f;//栈操作Status InitStack(SqStack *S){  S->base=(SElemType *)malloc(SIZE*sizeof(SElemType));  if(!S->base) exit(OVERFLOW);  S->top=S->base;  S->stacksize=SIZE;  return OK;}Status Push(SqStack *S,SElemType e){  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;  return OK;}Status Stackempty(SqStack S)//栈是否为空{  if(S.top==S.base)    return TRUE;  else    return FALSE;}Status Pop(SqStack *S,SElemType *e){  if(S->top==S->base) return ERROR;  *e=*--S->top;  return OK;}Status StackLength(SqStack S)//求栈的长度{  return (S.top-S.base);}//队列操作Status InitQueue(LinkQueue *Q){  Q->front=(QueuePtr)malloc(sizeof(QNode));  Q->rear=Q->front;  if(!Q->front) exit(OVERFLOW);  Q->front->next=NULL;  return OK;}Status EnQueue(LinkQueue *Q,char f){  p=(QueuePtr)malloc(sizeof(QNode));  if(!p) exit(OVERFLOW);  p->b=f;  p->next=NULL;  Q->rear->next=p;  Q->rear=p;  return OK;}Status DeQueue(LinkQueue *Q,char *f){  if(Q->front==Q->rear) return ERROR;  p=Q->front->next;  *f=p->b;  Q->front->next=p->next;  if(Q->rear==p)    Q->rear=Q->front;  free(p);  return OK;}Status QueueLength(LinkQueue Q){  int i=0;  p=Q.front;  while(Q.rear!=p)  {    i++;    p=p->next;  }  return i;}Status QueueEmpty(LinkQueue Q){  if(Q.front==Q.rear)    return TRUE;  else    return FALSE;}void main(){  int i,m;  char n,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!!!!!!!!!!!!!!!!!!!!!!!!!!!!");  else    while(!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语言怎么利用栈和队列实现回文检测功能

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯