Code
1 #include "stdafx.h"
2 #include "string"
3 const int STACK_INIT_SIZE = 100;
4 const int STACKINCREMENT = 10;
5 typedef struct {
6 int *base;
7 int *top;
8 int stacksize;
9 } SqStack;
10 bool InitStack(SqStack &S);
11 bool Push(SqStack &S, int e);
12 bool GetTop(SqStack S, int &e);
13 bool Pop(SqStack &S, int &e);
14 bool InitStack(SqStack &S) {
15 S.base = (int *)malloc(STACK_INIT_SIZE*sizeof(int));
16 if(!S.base) {
17 printf("存储空间分配失败!\n");
18 return false;
19 } else {
20 S.top = S.base;
21 S.stacksize = STACK_INIT_SIZE;
22 return true;
23 }
24 }
25 bool Push(SqStack &S, int e) {
26 if(S.top - S.base >= S.stacksize) {
27 S.base = (int *)realloc(S.base, (S.stacksize+STACKINCREMENT)*sizeof(int));
28 if(!S.base) {
29 printf("存储空间分配失败!\n");
30 return false;
31 } else {
32 S.top = S.base + S.stacksize;
33 S.stacksize += STACKINCREMENT;
34 }
35 }
36 *S.top ++ = e;
37 return true;
38 }
39 bool GetTop(SqStack S, int &e) {
40 if(S.top == S.base) {
41 return false;
42 } else {
43 e= *(S.top -1);
44 return true;
45 }
46 }
47 bool Pop(SqStack &S, int &e) {
48 if(S.top == S.base) {
49 return false;
50 } else {
51 e = * -- S.top;
52 return true;
53 }
54 }
55 bool viewStack(SqStack &S) {
56 while(S.top != S.base) {
57 printf("%d:", *(S.top-1));
58 -- S.top;
59 }
60 return true;
61 }
62 int main(int argc, char* argv[])
63 {
64 int e;
65 SqStack S;
66 InitStack(S);
67 Push(S, 100);
68 Push(S, 50);
69 Push(S, 20);
70 viewStack(S);
71 /*
72 Pop(S, e);
73 printf("%d",e);
74 GetTop(S, e);
75 printf("%d",e);
76 */
77 return 0;
78 }
1 #include "stdafx.h"
2 #include "string"
3 const int STACK_INIT_SIZE = 100;
4 const int STACKINCREMENT = 10;
5 typedef struct {
6 int *base;
7 int *top;
8 int stacksize;
9 } SqStack;
10 bool InitStack(SqStack &S);
11 bool Push(SqStack &S, int e);
12 bool GetTop(SqStack S, int &e);
13 bool Pop(SqStack &S, int &e);
14 bool InitStack(SqStack &S) {
15 S.base = (int *)malloc(STACK_INIT_SIZE*sizeof(int));
16 if(!S.base) {
17 printf("存储空间分配失败!\n");
18 return false;
19 } else {
20 S.top = S.base;
21 S.stacksize = STACK_INIT_SIZE;
22 return true;
23 }
24 }
25 bool Push(SqStack &S, int e) {
26 if(S.top - S.base >= S.stacksize) {
27 S.base = (int *)realloc(S.base, (S.stacksize+STACKINCREMENT)*sizeof(int));
28 if(!S.base) {
29 printf("存储空间分配失败!\n");
30 return false;
31 } else {
32 S.top = S.base + S.stacksize;
33 S.stacksize += STACKINCREMENT;
34 }
35 }
36 *S.top ++ = e;
37 return true;
38 }
39 bool GetTop(SqStack S, int &e) {
40 if(S.top == S.base) {
41 return false;
42 } else {
43 e= *(S.top -1);
44 return true;
45 }
46 }
47 bool Pop(SqStack &S, int &e) {
48 if(S.top == S.base) {
49 return false;
50 } else {
51 e = * -- S.top;
52 return true;
53 }
54 }
55 bool viewStack(SqStack &S) {
56 while(S.top != S.base) {
57 printf("%d:", *(S.top-1));
58 -- S.top;
59 }
60 return true;
61 }
62 int main(int argc, char* argv[])
63 {
64 int e;
65 SqStack S;
66 InitStack(S);
67 Push(S, 100);
68 Push(S, 50);
69 Push(S, 20);
70 viewStack(S);
71 /*
72 Pop(S, e);
73 printf("%d",e);
74 GetTop(S, e);
75 printf("%d",e);
76 */
77 return 0;
78 }