国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

C語言用棧和隊列實現的回文檢測功能示例

2020-01-26 14:06:11
字體:
來源:轉載
供稿:網友

本文實例講述了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語言程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 青龙| 定边县| 化州市| 措勤县| 汝城县| 横山县| 茂名市| 枝江市| 英吉沙县| 峨山| 祁东县| 涿州市| 平顶山市| 滕州市| 舞钢市| 石楼县| 开化县| 城固县| 政和县| 赤壁市| 邢台市| 信阳市| 丹凤县| 义乌市| 青岛市| 靖西县| 禹州市| 上虞市| 乐昌市| 阿图什市| 翼城县| 甘德县| 车险| 玉树县| 洛阳市| 新乐市| 鹿泉市| 永修县| 南华县| 大连市| 大田县|