《数据结构》严蔚敏

头文件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 }