用压栈的方法实现回文数

朱雀 2022-07-14 00:56 103阅读 0赞
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<malloc.h>
  4. #define OVERFLOW -2
  5. #define OK 1
  6. #define ERROR 0
  7. #define MAXSIZE 100
  8. typedef int status;
  9. typedef char SElemType;
  10. typedef char QElemType;
  11. typedef struct
  12. {
  13. SElemType *base;
  14. SElemType *top;
  15. int stacksize;
  16. }Sqstack;
  17. typedef struct
  18. {
  19. QElemType *base;
  20. char front;
  21. char rear;
  22. }SqQueue;
  23. status Initstack(Sqstack *S)
  24. {
  25. S->base=(SElemType*)malloc(MAXSIZE*sizeof(SElemType));
  26. if(!S->base) exit(OVERFLOW);
  27. S->top=S->base;
  28. S->stacksize=MAXSIZE;
  29. return OK;
  30. }
  31. status Emtypestack(Sqstack *S)
  32. {
  33. if(S->top==S->base)
  34. return OK;
  35. else
  36. return ERROR;
  37. }
  38. status InitQueue(SqQueue *Q)
  39. {
  40. Q->base=(QElemType *)malloc(MAXSIZE*sizeof(QElemType));
  41. if(!Q->base) exit(OVERFLOW);
  42. Q->front=Q->rear=0;
  43. return OK;
  44. }
  45. status Push(Sqstack *S,SElemType x)
  46. {
  47. if(S->top-S->base>=S->stacksize)
  48. {
  49. S->base=(SElemType *)realloc(S->base,(S->stacksize+MAXSIZE)*sizeof(SElemType));
  50. if(!S->base) exit(OVERFLOW);
  51. S->top=S->base+S->stacksize;
  52. S->stacksize+=MAXSIZE;
  53. }
  54. *S->top=x;
  55. S->top--;
  56. return OK;
  57. }
  58. status Pop(Sqstack *S,SElemType *x)
  59. {
  60. if(S->top==S->base)
  61. return ERROR;
  62. else
  63. {
  64. S->top--;
  65. *x=*S->top;
  66. return OK;
  67. }
  68. }
  69. status EnQueue(SqQueue *Q,QElemType y)
  70. {
  71. if((Q->rear+1)%MAXSIZE==Q->front)
  72. return ERROR;
  73. Q->base[Q->rear]=y;
  74. Q->rear=(Q->rear+1)%MAXSIZE;
  75. return OK;
  76. }
  77. status DeQueue(SqQueue *Q,QElemType *y)
  78. {
  79. if(Q->front=Q->rear)
  80. return ERROR;
  81. *y=Q->base[Q->front];
  82. Q->front=(Q->front+1)%MAXSIZE;
  83. return OK;
  84. }
  85. status ReturnText(Sqstack *S,SqQueue *Q,char *C)
  86. {
  87. QElemType y;
  88. SElemType x;
  89. Initstack(S);//鍒濆鍖朣
  90. InitQueue(Q);//鍒濆鍖朡
  91. *C=getchar();
  92. while((*C)!='@')
  93. {
  94. Push(S,*C);//鍏ユ爤
  95. EnQueue(Q,*C);//鍏ラ槦
  96. *C=getchar();
  97. }
  98. while(!Emtypestack(S))//鏍堜笉涓虹┖
  99. {
  100. Pop(S,&x);//鍑烘爤
  101. DeQueue(Q,&y);//鍑洪槦
  102. if(x!=y)//鍒ゆ柇
  103. {
  104. printf("涓嶆槸鍥炴枃鏁癨n");
  105. break;
  106. }
  107. else
  108. {
  109. printf("鏄洖鏂囨暟\n");
  110. break;
  111. }
  112. }
  113. return OK;
  114. }
  115. int main(void)
  116. {
  117. SqQueue Q;
  118. Sqstack S;
  119. QElemType y;
  120. SElemType x;
  121. char C;
  122. scanf("%c",&C);
  123. ReturnText(&S,&Q,&C);
  124. return OK;
  125. }

发表评论

表情:
评论列表 (有 0 条评论,103人围观)

还没有评论,来说两句吧...

相关阅读

    相关

    题目: 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 输入: 121 输出: true 示例 2: 输

    相关 【算法】判断--使用

    “回文”是指正读反读都能读通的句子,它是古今中外都有的一种修辞方式和文字游戏,如“我为人人,人人为我”等。在数学中也有这样一类数字有这样的特征,成为回文数(palindrome

    相关

    【问题描述】         当一个数从前往后写与从后往前写时相等,则该数被称为回文数,所有的个位数都是回文数。         所有非回文数通过一系列的操作都可以匹配一个

    相关

    判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 输入: 121 输出: true

    相关

    判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 输入: 121 输出: true 示例 2: 输入: -12