顺序栈 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 #include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 #define TURE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVEREFLOW -2 typedef int Status;typedef char SElemType;typedef struct { SElemType* top; SElemType* base; int stacksize; }SqStack; Status initStack (SqStack& S) { S.base = new SElemType (MAXSIZE); if (!S.base) { return OVEREFLOW; } S.top = S.base; S.stacksize = MAXSIZE; return OK; } Status StackEmpty (SqStack& S) { if (S.base == S.top) { return OK; } else { return FALSE; } } Status StackClear (SqStack& S) { if (S.base)S.top = S.base; return OK; } Status StackLength (SqStack& S) { return S.top - S.base; } Status DestoryStack (SqStack& S) { if (S.base) { delete S.base; S.stacksize = 0 ; S.base = S.top = NULL ; } return OK; } Status Push (SqStack& S, SElemType e) { if (S.top - S.base == S.stacksize) { return ERROR; } *S.top++ = e; return OK; } Status Pop (SqStack& S, SElemType& e) { if (StackEmpty (S)) { return ERROR; } e = *--S.top; return OK; } int main () { SqStack S; initStack (S); if (StackEmpty (S)) printf ("顺序栈为空\n" ); printf ("顺序栈的长度:%d\n" , StackLength (S)); for (int i = 0 ; i < 2 ; i++) { Push (S, i); } printf ("顺序栈的长度:%d\n" , StackLength (S)); SElemType e; Pop (S, e); printf ("顺序表出栈,元素:%d\n" , e); StackClear (S); if (StackEmpty (S)) printf ("顺序栈被清空\n" ); if (DestoryStack (S)) printf ("顺序栈已被销毁" ); return 0 ; }
链栈 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 #include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 #define TURE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVEREFLOW -2 typedef int Status;typedef char SElemType;typedef struct StackNode { SElemType data; struct StackNode * next ; }StackNode, * LinkStack; Status initStack (LinkStack& S) { S == NULL ; return OK; } Status StackEmpty (LinkStack& S) { if (S == NULL ) return TURE; return FALSE; } Status Push (LinkStack& S, SElemType e) { LinkStack p = new StackNode; p->data = e; p->next = S; S = p; return OK; } Status Pop (LinkStack& S, SElemType& e) { if (S == NULL ) return ERROR; LinkStack p = new StackNode; e = S->data; p = S; S = S->next; free (p); return OK; } SElemType getTop (LinkStack& S) { if (S != NULL ) { return S->data; } } int main () { LinkStack S; initStack(S); for (int i = 0 ; i < 2 ; i++) { Push(S, i); } SElemType e; Pop(S, e); printf ("出栈元素:%d\n" , e); printf ("栈顶元素:%d\n" , getTop(S)); return 0 ; }
版权声明: 此文章版权归霜屿清所有,如有转载,请注明来自原作者