顺序栈基于数组的数据结构,故在定义栈的数据结构中,关键是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的栈 ",stackSize); 21 return S; 22 } 23 24 //判断栈空满并返回栈中元素个数 25 int IsFull(sqStack S) 26 { 27 if (S->top == -1) 28 { 29 printf("栈已空 "); 30 return false; 31 } 32 else 33 { 34 if (S->top == (S->size - 1)) 35 { 36 printf("栈已满 "); 37 return true; 38 } 39 else 40 { 41 printf("栈中有%d个元素 ",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("栈已满,出栈后再执行操作 "); 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 ", 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("栈已空,入栈后再执行操作 "); 70 } 71 else 72 { 73 printf("出栈成功,出栈元素为%d ", 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("栈已空,入栈后再执行操作 "); 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(" ------------****------------ "); 114 printf("请输入要执行的操作序号 "); 115 printf("1.建立空栈 "); 116 printf("2.入栈 "); 117 printf("3.出栈 "); 118 printf("4.查看栈顶元素 "); 119 printf("5.打印栈 "); 120 printf("6.判断栈空/满 "); 121 printf("0.退出"); 122 printf(" ------------****------------ "); 123 printf("请输入序号:"); 124 scanf_s("%d", &i); 125 printf(" "); 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 }