数据结构->栈->顺序栈ADT代码

顺序栈基于数组的数据结构,故在定义栈的数据结构中,关键是top(栈顶的变化过程),值得注意的一点是top的取值是-1,以及malloc的用法。

一下是基于C语言的代码,运行环境为VS2017。

  1 //顺序栈
  2 #include<stdio.h>
  3 #include<malloc.h>
  4 #define stackSize 10
  5 
  6 //栈的数据结构(用数组实现)
  7 typedef struct
  8 {
  9     int top;
 10     int size;
 11     int data[stackSize];
 12 }stack,*sqStack;
 13 
 14 //建立新栈
 15 sqStack Create()
 16 {
 17     sqStack S=(stack *)malloc(stackSize * sizeof(stack));
 18     S->size = stackSize;
 19     S->top = -1;
 20     printf("成功建立一个长度为%d的栈\n",stackSize);
 21     return S;
 22 }
 23 
 24 //判断栈空满并返回栈中元素个数
 25 int IsFull(sqStack S)
 26 {
 27     if (S->top == -1)
 28     {
 29         printf("栈已空\n");
 30         return false;
 31     }
 32     else
 33     {
 34         if (S->top == (S->size - 1))
 35         {
 36             printf("栈已满\n");
 37             return true;
 38         }
 39         else
 40         {
 41             printf("栈中有%d个元素\n",S->top+1);
 42         }
 43     }
 44 }
 45 
 46 //入栈
 47 int InStack(sqStack S,int P)
 48 {
 49     if (S->top == (S->size - 1))
 50     {
 51         printf("栈已满,出栈后再执行操作\n");
 52     }
 53     else
 54     {
 55         printf("请输入入栈元素");
 56         scanf_s("%d", &P);
 57         S->top = S->top + 1;
 58         S->data[S->top] = P;
 59         printf("成功入栈,入栈元素为%d\n", S->data[S->top]);
 60         return P;
 61     }
 62 };
 63 
 64 //出栈
 65 int OutStack(sqStack S)
 66 {
 67     if (S->top == -1)
 68     {
 69         printf("栈已空,入栈后再执行操作\n");
 70     }
 71     else
 72     {
 73         printf("出栈成功,出栈元素为%d\n", S->data[S->top--]);
 74     }
 75     return S->top + 1; 
 76 }
 77 
 78 //查看栈顶元素
 79 int VistStack(sqStack S)
 80 {
 81     if (S->top == -1)
 82     {
 83         printf("栈已空,入栈后再执行操作\n");
 84     }
 85     else
 86     {
 87         printf("栈顶元素为%d", S->data[S->top]);
 88         return S->data[S->top];
 89     }
 90 }
 91 
 92 //打印栈
 93 void Printstack(sqStack S) 
 94 {
 95     int i = 0;
 96     printf("栈底|");
 97     for (i = 0; i <= S->top; i++)
 98     {
 99         printf("%d  ", S->data[i]);
100     }
101     printf("<-栈顶");
102 }
103 
104 //主函数
105 void main()
106 {
107     int i;
108     stack S;
109     sqStack Sq;
110     Sq = &S; //Sq的初始化
111     do
112     {
113         printf("\n------------****------------\n");
114         printf("请输入要执行的操作序号\n");
115         printf("1.建立空栈\n");
116         printf("2.入栈\n");
117         printf("3.出栈\n");
118         printf("4.查看栈顶元素\n");
119         printf("5.打印栈\n");
120         printf("6.判断栈空/满\n");
121         printf("0.退出");
122         printf("\n------------****------------\n");
123         printf("请输入序号:");
124         scanf_s("%d", &i);
125         printf("\n");
126         switch (i)
127         {
128             case 1: Sq=Create(); break;
129             case 2:InStack(Sq,i); break;//i为任意的整数,为了节省空间故用i代替
130             case 3:OutStack(Sq); break;
131             case 4:VistStack(Sq);break;
132             case 5:Printstack(Sq); break;
133             case 6:IsFull(Sq); break;
134             case 0:printf("结束"); break;
135             default:printf("输入错误!请输入0---6的整数");
136 
137         }
138     } while (i != 0);
139     getchar();
140 }

猜你喜欢

转载自www.cnblogs.com/JQbiu/p/10107528.html
今日推荐