《数据结构》严蔚敏
头文件Stacksq.h
1 #ifndef Stacksq_H 2 #define Stacksq_H 3 #define STACK_INIT_SIZE 100 4 #define INCREMENTSIZE 10 5 #define status int 6 #define ElemType int 7 #define OK 1 8 #define FALSE 0 9 typedef struct 10 { 11 ElemType *base; 12 ElemType *top; 13 int stacksize; 14 }SqStack; 15 status InitStack(SqStack&); 16 status DestroyStack(SqStack&); 17 status ClearStack(SqStack&); 18 status StackEmpty(SqStack); 19 status StackLength(SqStack); 20 status GetTop(SqStack, ElemType&); 21 status Push(SqStack&, ElemType); 22 status Pop(SqStack&, ElemType&); 23 status Print(SqStack); 24 #endif
函数实现
1 #include"Stacksq.h" 2 #include<iostream> 3 using namespace std; 4 status InitStack(SqStack&s) 5 //操作结果:构造一个空栈S 6 { 7 s.base = (ElemType*)malloc(STACK_INIT_SIZE*sizeof(ElemType)); 8 if (s.base == NULL) 9 { 10 return -1; 11 } 12 s.top = s.base; 13 s.stacksize = STACK_INIT_SIZE; 14 return OK; 15 } 16 status DestroyStack(SqStack&s) 17 //初始条件:栈s已存在 18 //操作结果:栈s已被销毁 19 { 20 free(s.base); 21 s.base = s.top = NULL; //s.bottom的值为NULL,表示顺序栈不存在 22 s.stacksize = 0; 23 return OK; 24 } 25 26 status ClearStack(SqStack &s) 27 //初始条件:栈s已存在 28 //操作结果:将s清为空栈 29 { 30 if (s.base) 31 s.top = s.base; //s.top == s.base作为顺序栈空的标记 32 return OK; 33 } 34 35 status StackEmpty(SqStack s) 36 //初始条件:栈s已存在 37 //操作结果:若栈s为空栈,则返回TRUE,否则FALSE 38 { 39 if (s.top == s.base) 40 return OK; 41 else 42 return FALSE; 43 } 44 45 status StackLength(SqStack s) 46 //初始条件:栈s已存在 47 //操作结果:返回s的元素个数,即栈的长度 48 { 49 return s.top - s.base; 50 } 51 52 status Push(SqStack &s, ElemType e) 53 //初始条件:栈s已存在 54 //操作结果:插入元素e成为新的栈顶元素 55 { 56 if (s.top - s.base >= s.stacksize) 57 { 58 s.base = (ElemType*)realloc(s.base, (s.stacksize+INCREMENTSIZE)*sizeof(ElemType)); 59 if (s.base == NULL){ 60 return -1; 61 } 62 s.top = s.base + s.stacksize; 63 s.stacksize += INCREMENTSIZE; 64 } 65 *s.top++ = e; 66 return OK; 67 } 68 69 status Pop(SqStack &s, ElemType &e) 70 //初始条件:栈s已存在且非空 71 //操作结果:删除s的栈顶元素,并且用e返回其值 72 { 73 if (StackEmpty(s)) 74 { 75 return -1; 76 } 77 e = *--s.top; 78 return OK; 79 } 80 81 status GetTop(SqStack s, ElemType &e) 82 //初始条件:栈s已存在且非空 83 //操作结果:用e返回s的栈顶元素 84 { 85 if (StackEmpty(s)) 86 { 87 return 0; 88 } 89 return *(s.top - 1); 90 } 91 92 status Print(SqStack s) 93 //初始条件:栈s已存在且非空 94 //操作结果:从栈底开始依次输出 95 { 96 if (s.base == NULL||StackEmpty(s)) 97 { 98 return -1; 99 } 100 for (int i = 0; i < StackLength(s); i++) 101 cout << s.base[i] << endl; 102 return OK; 103 }