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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值