经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C » 查看文章
PTA
来源:cnblogs  作者:吕STONE  时间:2018/11/9 11:20:14  对本文有异议
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define TRUE 1
  4. #define FALSE 0
  5. #define OK 1
  6. #define ERROR 0
  7. #define INFEASIBLE -1
  8. #define OVERFLOW -2
  9.  
  10. #define STACK_INIT_SIZE 100
  11. #define STACKINCREMENT 10
  12. typedef int Status;
  13. typedef int SElemType;
  14. typedef struct {
  15. SElemType *base;
  16. SElemType *top;
  17. int stacksize;
  18. }SqStack;
  19. Status InitStack(SqStack &S)
  20. {
  21. S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));
  22. if (!S.base) exit(OVERFLOW);
  23. S.top = S.base;
  24. S.stacksize = STACK_INIT_SIZE;
  25. return OK;
  26. }
  27. Status GetTop(SqStack S, SElemType &e)
  28. {
  29. if (S.top == S.base) return ERROR;
  30. e = *(S.top - 1);
  31. return OK;
  32. }
  33. Status Push(SqStack &S, SElemType e)
  34. {
  35. if (S.top - S.base >= S.stacksize) {
  36. S.base = (SElemType *)realloc(S.base, (S.stacksize + STACKINCREMENT) * sizeof(SElemType));
  37. if (!S.base) exit(OVERFLOW);
  38. S.top = S.base + S.stacksize;
  39. S.stacksize += STACKINCREMENT;
  40. }
  41. *S.top++ = e;
  42. return OK;
  43. }
  44. Status Pop(SqStack &S, char &e)
  45. {
  46. if (S.top == S.base) return ERROR;
  47. e = *--S.top;
  48. return OK;
  49. }
  50. Status Empty(SqStack &S)
  51. {
  52. if (S.top == S.base) return OK;
  53. else return ERROR;
  54. }
  55. int main()
  56. {
  57. int n, m;
  58. scanf("%d %d", &n, &m);
  59. while (n--) {
  60. string s; cin >> s;
  61. char e;
  62. int len = s.length();
  63. SqStack S;
  64. InitStack(S);
  65. int flag = 1;
  66. int length = 0;
  67. for (int i = 0; i < len; i++) {
  68. if (s[i] == 'S') {
  69. Push(S, s[i]);
  70. length++;
  71. if (length > m) { //D第一种情况,栈得最大的容量超过m的栈得最大容量,
  72. printf("NO\n"); //输出“NO”
  73. flag = 0; //用来记录是否已经通过前面的否定情况给输出了
  74. break;
  75. }
  76. }
  77. else { //“X”,先判断是否为空,在判断是否能POp;
  78. if (Empty(S)) {
  79. printf("NO\n"); //如果为空,就要输出“NO”;
  80. flag = 0; //在将标记指为0;
  81. break;
  82. }
  83. else {
  84. Pop(S, e);
  85. length--; //Pop一个就要栈得容量-1;
  86. }
  87. }
  88. }
  89. if (flag) { //如果前面的情况都过了,只需要考虑是不是空就好了
  90. if (Empty(S)) printf("YES\n");
  91. else printf("NO\n");
  92. }
  93. }
  94. return 0;
  95. }
View Code
7-1 堆栈操作合法性 (20 分)

假设以SX分别表示入栈和出栈操作。如果根据一个仅由SX构成的序列,对一个空堆栈进行操作,相应操作均可行(如没有出现删除时栈空)且最后状态也是栈空,则称该序列是合法的堆栈操作序列。请编写程序,输入SX序列,判断该序列是否合法。

输入格式:

输入第一行给出两个正整数N和M,其中N是待测序列的个数,M(50)是堆栈的最大容量。随后N行,每行中给出一个仅由SX构成的序列。序列保证不为空,且长度不超过100。

输出格式:

对每个序列,在一行中输出YES如果该序列是合法的堆栈操作序列,或NO如果不是。

输入样例:

  1. 4 10
  2. SSSXXSXXSX
  3. SSSXXSXXS
  4. SSSSSSSSSSXSSXXXXXXXXXXX
  5. SSSXXSXXX

输出样例:

  1. YES
  2. NO
  3. NO
  4. NO

    1,需要标记三种不满足的情况,每一种都用一个flag 标记,用一个字符串来存每一串字符,在通过数组的方式来循环读取每一个字符,
    判断到“X”的时候要优先考虑是否为空,如果为空就需要直接输出“NO”;在标记一个这个错误已经被排除了,flag = 0
    在删除元素;
    2,在读取“S“的时候,要先判断一个当前栈的容量是否已经超过了最大的栈容量,如果超过了最大的栈容量,就需要输出”NO“在标记这个
    错误已经被排除了 flag = 0
    3,最后在已经排除了前面的两种情况下,就只需要判断当前栈是否为空就行了,
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号