1 #include <stdio.h>
 2 #include <string.h>
 3 #include <malloc.h>
 4 #include <stdlib.h>
 5 
 6 #define OVERFLOW 0
 7 #define TRUE true
 8 #define FALSE false
 9 #define OK 1
10 #define ERROR 0
11 
12 #define STACK_INIT_SIZE 10  //存储空间初始分配量
13 #define STACK_INCREMENT 2   //存储空间分配增量
14 
15 typedef int SElemType;
16 typedef bool Status;
17 
18 //栈的顺序存储表示
19 
20 typedef struct SqStack{
21     SElemType *base;    //在栈构造之前和销毁之后,base的值为NULL
22     SElemType *top;     //栈顶指针
23     int stacksize;      //当前已分配的存储空间,以元素为单位
24 }SqStack;   //顺序栈
25 
26 //构造一个空栈S
27 void InitStack(SqStack *S){
28     (*S).base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));
29     if(!(*S).base){
30         exit(OVERFLOW);     //存储分配失败
31     }
32     (*S).top = (*S).base;
33     (*S).stacksize = STACK_INIT_SIZE;
34 }
35 
36 //销毁栈S,S不再存在
37 void DestroyStack(SqStack *S){
38     free((*S).base);
39     (*S).base = NULL;
40     (*S).top = NULL;
41     (*S).stacksize = 0;
42 }
43 
44 //若栈S为空栈,则返回TRUE,否则返回FALSE
45 Status StackEmpty(SqStack S){
46     if(S.top == S.base){
47         return TRUE;
48     }
49     else{
50         return FALSE;
51     }
52 }
53 
54 //若栈不为空,则用e返回S的栈顶元素,并返回OK,否则返回ERROR
55 Status GetTop(SqStack S, SElemType *e){
56     if(S.top > S.base){
57         *e = *(S.top - 1);
58         return OK;
59     }
60     else{
61         return ERROR;
62     }
63 }
64 
65 //插入元素e为新的栈顶元素
66 void Push(SqStack *S, SElemType e){
67     if((*S).top - (*S).base >= (*S).stacksize){     //栈满,增加存储空间
68         (*S).base - (SElemType *)realloc((*S).base, ((*S).stacksize + STACK_INCREMENT) * sizeof(SElemType));
69         if(!(*S).base){
70             exit(OVERFLOW);     //存储空间分配失败
71         }
72         (*S).top = (*S).base + (*S).stacksize;
73         (*S).stacksize += STACK_INCREMENT;
74     }
75     *((*S).top)++=e;
76 }
77 
78 //若栈不为空,则删除S的栈顶元素,用e返回其值,并返回OK。否则返回ERROR
79 Status Pop(SqStack *S, SElemType *e){
80     if((*S).top == (*S).base){
81         return ERROR;
82     }
83     *e = *--(*S).top;
84     return OK;
85 }
86 
87 int main(){
88     return 0;
89 }
原文地址:https://www.cnblogs.com/angle-qqs/p/4027272.html