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 }
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 }