当前位置:   article > 正文

数据结构头歌:2-1顺序栈-课上练(带超全注释+源代码)_顺序栈课上练

顺序栈课上练

一、

二、初始化一个空的顺序栈

三、判断顺序栈是否为空

四、判断顺序栈是否已满

五、压栈push:插入数据元素x

六、弹栈pop:删除元素

七、取栈顶元素

 八、利用栈实现数进制转换

1.弹出元素->输出

2.data转换成k进制

创建栈L

转换成二进制:

转换成八进制:

转换成16进制:

1.定义: 

 2.除法(n ≠ 0) push

 3.pop

  1. #include <stdio.h>
  2. #include<stdlib.h>
  3. /*此处是顺序栈数据结构定义*/
  4. typedef int DataType;
  5. struct seqStack
  6. {//有3个数据成员
  7. int MAXNUM;//用于记录顺序栈中能存放的最大元素个数的 整型 MAXNUM
  8. int top;//用于存放顺序栈的栈顶位置,初始化为0或-1 均可 整型 curNum
  9. DataType* element;//用于存放顺序栈数据元素的连续空间的起始地址
  10. };
  11. typedef struct seqStack* PseqStack;
  12. //第一关
  13. PseqStack createNullStack_seq(int m)
  14. {//此处填写代码,创建一个空的顺序栈,能存放的最大元素个数为 m,栈顶top设置为0
  15. //若m=0,则返回NULL
  16. PseqStack p = (PseqStack)malloc(sizeof(struct seqStack));//动态创建一个PseqStack类型的变量p,
  17. //不小于 sizeof(struct seqStack)字节
  18. if (m != 0) //m:能存放的最大元素个数
  19. {
  20. p->element = (DataType*)malloc(m * sizeof(DataType));//元素分配空间
  21. if (p->element)
  22. {
  23. p->top = 0; //下溢:空栈进行出栈
  24. p->MAXNUM = m;//上溢: 已有m个元素进行进栈
  25. return p;
  26. }
  27. else free(p);
  28. }
  29. return NULL;
  30. }
  31. //第二关
  32. int isNullStack_seq(PseqStack L)
  33. {
  34. //判断顺序栈是否为空,若为空,返回值为1,否则返回值为0,若栈不存在,则返回-1
  35. if (L == NULL) return -1;
  36. else
  37. {
  38. if (L->top == 0) return 1;
  39. else return 0;
  40. }
  41. }
  42. //第三关
  43. int isFullStack_seq(PseqStack L)
  44. {
  45. //判断顺序栈是否已满,若已满,返回值为1,否则返回值为0
  46. if (L->top >= L->MAXNUM)
  47. return 1;
  48. else
  49. return 0;
  50. }
  51. //第四关
  52. int push_seq(PseqStack L, DataType x)
  53. {//在顺序栈中插入数据元素x,若插入不成功,返回0;插入成功返回值为1
  54. if (L->top >= L->MAXNUM)
  55. return 0;
  56. else
  57. {
  58. L->top = L->top + 1; //栈顶=栈顶+1
  59. L->element[L->top] = x; //给结构体 L中一个数组成员element[]的某一个L->top赋值
  60. return 1;
  61. }
  62. }
  63. //第五关
  64. DataType pop_seq(PseqStack L)
  65. {//弹栈并返回删除元素,若栈为空,则返回-1
  66. if (L->top == 0)
  67. return -1;
  68. else
  69. {
  70. int m = L->element[L->top];//定义栈顶元素m
  71. L->top = L->top - 1; //栈顶=栈顶-1
  72. return m; //返回m
  73. }
  74. }
  75. //第六关 取栈顶元素
  76. DataType top_seq(PseqStack L)
  77. {//取栈顶元素返回,若栈为空,则返回-1
  78. if (L->top == 0)
  79. return -1; //返回-1
  80. else
  81. return (L->element[L->top]);//返回栈顶元素
  82. }
  83. //销毁顺序栈,释放栈所占存储空间
  84. int destroystack_seq(PseqStack L)
  85. {
  86. //返回值为销毁的栈中现有数据元素的个数,若待销毁的线性表不存在,则返回0
  87. if (L != NULL)
  88. {
  89. int num = L->top + 1;//定义num(销毁的栈中现有数据元素的个数0-top)
  90. L->MAXNUM = 0; //能存放的最大元素个数为0(待销毁的线性表不存在)
  91. free(L->element); //释放元素 ,销毁线性表
  92. return num; //返回
  93. }
  94. return 0;
  95. }
  96. //第七关
  97. //使用已实现的栈操作,实现数制转换
  98. void print(PseqStack L)
  99. {
  100. //逐个弹出栈L中的数据元素并输出,输出数据间不需要任何间隔符号
  101. while (L->top != 0)
  102. {
  103. printf("%d", pop_seq(L));
  104. }
  105. }
  106. void convert(int data, int k)
  107. {
  108. //利用栈实现将data转换为k进制,k可能是2,8,16. 在本函数内实现转换并调用print函数输出转换后的结果
  109. //十六进制时输出 A ,B ,C, D,E,F 使用大写字母
  110. PseqStack L = createNullStack_seq(200);
  111. if (k == 2)
  112. {
  113. int m = data % 2;
  114. push_seq(L, m);
  115. int n = data / 2;
  116. while (n != 0)
  117. {
  118. m = n % 2;
  119. n = n / 2;
  120. push_seq(L, m);
  121. }
  122. print(L);
  123. }
  124. if (k == 8)
  125. {
  126. int m = data % 8;
  127. push_seq(L, m);
  128. int n = data / 8;
  129. while (n != 0)
  130. {
  131. m = n % 8;
  132. n = n / 8;
  133. push_seq(L, m);
  134. }
  135. print(L);
  136. }
  137. if (k == 16)
  138. {
  139. int m = data % 16; char c;
  140. if (m >= 10)
  141. {
  142. c = m - 10 + 'A';
  143. }
  144. push_seq(L, c);
  145. int n = data / 16;
  146. while (n != 0)
  147. {
  148. m = n % 16;
  149. n = n / 16;
  150. if (m >= 10)
  151. {
  152. c = m - 10 + 'A';
  153. }
  154. else
  155. {
  156. c = m + '0';
  157. }
  158. push_seq(L, c);
  159. }
  160. while (L->top != 0)
  161. {
  162. printf("%c", pop_seq(L));
  163. }
  164. }
  165. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/518611
推荐阅读
相关标签
  

闽ICP备14008679号