1 #include<stdio.h> 2 #include<stdlib.h> 3 4 #define STACK_INIT_SIZE 10 5 #define STACKINCREASE 10 6 #define OK 1 7 #define ERROR 0 8 9 typedef int El
1 #include<stdio.h>
2 #include<stdlib.h>
3
4 #define STACK_INIT_SIZE 10
5 #define STACKINCREASE 10
6 #define OK 1
7 #define ERROR 0
8
9 typedef int ElemType;
10 typedef int Status;
11
12 typedef struct{
13 ElemType* base;
14 ElemType* top;
15 int InitSize;
16 }SuqStack;
17
18 Status InitStack(SuqStack* s){
19 s->base = (ElemType *)malloc(sizeof(ElemType)*STACK_INIT_SIZE);
20 if(!s->base)
21 return ERROR;
22 s->top = s->base;
23 s->InitSize = STACK_INIT_SIZE;
24 return OK;
25 }
26 Status ClearStack(SuqStack* s){
27 s->top = s->base;
28 return OK;
29 }
30 Status DestroyStack(SuqStack* s){
31 int i;
32 for(i = 1; i < s->InitSize; i++){
33 free(s->base);
34 s->base++;
35 }
36 s->base = s->top = NULL;
37 s->InitSize = 0;
38 return OK;
39 }
40 Status Pop(SuqStack* s, ElemType* result){
41 if(s->base == s->top)
42 return ERROR;
43 *result = *(--(s->top));
44 return OK;
45 }
46 Status Push(SuqStack* s,ElemType value){
47 if(s->top - s->base == s->InitSize){
48 s->base = (ElemType* )realloc(s->base,sizeof(ElemType) * (s->InitSize + STACKINCREASE));
49 if(!s->base)
50 return ERROR;
51 s->top = s->base + STACK_INIT_SIZE;
52 s->InitSize = STACKINCREASE + STACK_INIT_SIZE;
53 printf("has a overflow");
54 }
55 *(s->top) = value;
56 (s->top)++;
57 return OK;
58 }
59 //test
60 Status CreateStack(SuqStack* s,int size){
61 int i;
62 for(i = 1; i <= size; i++){
63 printf("please enter the element%d: ",i);
64 scanf("%d",(s->top));
65 //printf("%d\n",*(s->top));
66 (s->top)++;
67 //printf("%d\n",s->top);
68 }
69 return OK;
70 }
71 Status ShowStack_FromTop(SuqStack s){
72 printf("\n");
73 while(s.top != s.base){
74 (s.top)--;
75 printf("%d ",*(s.top));
76 }
77 printf("\n");
78 return OK;
79 }
80 int main(){
81 SuqStack s;
82 InitStack(&s);
83 //CreateStack(&s,5);
84 Push(&s,3);
85 Push(&s,5);
86 Push(&s,4);
87 Push(&s,1);
88 Push(&s,97);
89 Push(&s,423);
90 ShowStack_FromTop(s);
91 int r;
92 Pop(&s,&r);
93 printf("Pop is %d! ",r);
94 Pop(&s,&r);
95 printf("Pop is %d! ",r);
96 Pop(&s,&r);
97 printf("Pop is %d! ",r);
98 ShowStack_FromTop(s);
99
100 return 0;
101 }