1 # include <stdio.h>
2 # include <malloc.h>
3 # include <stdlib.h>
4
5 typedef struct Node
6 {
7 int data;
8 struct Node * pNext;
9 }NODE, * PNODE;
10 typedef struct Stack
11 {
12 PNODE pTop;
13 PNODE pBottom;
14 }STACK, * PSTACK;
15
16 void init(PSTACK pS);
17 void push(PSTACK, int);
18 void traverse(PSTACK);
19 bool pop(PSTACK, int *);
20 bool empty(PSTACK);
21 void clear(PSTACK pS);
22
23 int main( void)
24 {
25 STACK S;
26 int val;
27
28 init(&S);
29 push(&S, 1);
30 push(&S, 2);
31 push(&S, 3);
32 push(&S, 4);
33 push(&S, 5);
34 traverse(&S);
35
36 if(pop(&S,&val))
37 {
38 printf( " 出栈成功,出栈的元素是:%d\n ",val);
39 }
40 else
41 {
42 printf( " 出栈失败 ");
43
44 }
45
46 traverse(&S);
47 clear(&S);
48 traverse(&S);
49
50 return 0;
51 }
52
53 void init(PSTACK pS) // 初始化
54 {
55 pS->pTop = (PNODE)malloc( sizeof(NODE));
56 if(NULL == pS->pTop)
57 {
58 printf( " 分配失败\n ");
59 exit(- 1);
60 }
61 else
62 {
63 pS->pBottom = pS->pTop;
64 pS->pTop->pNext = NULL; // 也可以写成pS->pBottom->pNext = NULL;
65 }
66
67 }
68 void push(PSTACK pS, int val) // 压栈
69 {
70 PNODE pNew = (PNODE)malloc( sizeof(NODE));
71 pNew->data = val;
72 pNew->pNext = pS->pTop; // pS->pTop不能改成pS->pBottom;
73 pS->pTop = pNew;
74
75 }
76 void traverse(PSTACK pS) // 遍历
77 {
78 PNODE p = pS->pTop;
79
80 while (p != pS->pBottom)
81 {
82 printf( " %d ",p->data);
83 p =p->pNext;
84 }
85 printf( " \n ");
86 return;
87 }
88 bool empty(PSTACK pS) // 判断是否为空
89 {
90 if(pS->pTop ==pS->pBottom)
91 return true;
92 else
93 return false;
94 }
95 // 把pS所指向的栈出栈一次,将元素pVal所指向的变量中
96 bool pop(PSTACK pS, int * pVal) // 出栈
97 {
98 if(empty(pS)) // pS本身就是存放
99 {
100 return false;
101 }
102 else
103 {
104 PNODE r = pS->pTop;
105 *pVal = r->data;
106 pS->pTop = r->pNext;
107 free(r);
108 r = NULL;
109
110 return true;
111 }
112 }
113
114 void clear(PSTACK pS) // 清空数据
115 {
116 if(empty(pS))
117 {
118 return;
119 }
120 else
121 {
122 PNODE p = pS->pTop;
123 PNODE q = NULL;
124
125 while(p !=pS->pBottom)
126 {
127 q = p->pNext;
128 free(p);
129 p=q;
130 }
131 pS->pTop = pS->pBottom;
132 }
133
134 }
135 /*
136 在VC++6.0中运行的结果为:
137 ==================================
138 5 4 3 2 1
139 出栈成功,出栈的元素是:5
140 4 3 2 1
141
142 Press any key to continue
143 ==================================
144 */
2 # include <malloc.h>
3 # include <stdlib.h>
4
5 typedef struct Node
6 {
7 int data;
8 struct Node * pNext;
9 }NODE, * PNODE;
10 typedef struct Stack
11 {
12 PNODE pTop;
13 PNODE pBottom;
14 }STACK, * PSTACK;
15
16 void init(PSTACK pS);
17 void push(PSTACK, int);
18 void traverse(PSTACK);
19 bool pop(PSTACK, int *);
20 bool empty(PSTACK);
21 void clear(PSTACK pS);
22
23 int main( void)
24 {
25 STACK S;
26 int val;
27
28 init(&S);
29 push(&S, 1);
30 push(&S, 2);
31 push(&S, 3);
32 push(&S, 4);
33 push(&S, 5);
34 traverse(&S);
35
36 if(pop(&S,&val))
37 {
38 printf( " 出栈成功,出栈的元素是:%d\n ",val);
39 }
40 else
41 {
42 printf( " 出栈失败 ");
43
44 }
45
46 traverse(&S);
47 clear(&S);
48 traverse(&S);
49
50 return 0;
51 }
52
53 void init(PSTACK pS) // 初始化
54 {
55 pS->pTop = (PNODE)malloc( sizeof(NODE));
56 if(NULL == pS->pTop)
57 {
58 printf( " 分配失败\n ");
59 exit(- 1);
60 }
61 else
62 {
63 pS->pBottom = pS->pTop;
64 pS->pTop->pNext = NULL; // 也可以写成pS->pBottom->pNext = NULL;
65 }
66
67 }
68 void push(PSTACK pS, int val) // 压栈
69 {
70 PNODE pNew = (PNODE)malloc( sizeof(NODE));
71 pNew->data = val;
72 pNew->pNext = pS->pTop; // pS->pTop不能改成pS->pBottom;
73 pS->pTop = pNew;
74
75 }
76 void traverse(PSTACK pS) // 遍历
77 {
78 PNODE p = pS->pTop;
79
80 while (p != pS->pBottom)
81 {
82 printf( " %d ",p->data);
83 p =p->pNext;
84 }
85 printf( " \n ");
86 return;
87 }
88 bool empty(PSTACK pS) // 判断是否为空
89 {
90 if(pS->pTop ==pS->pBottom)
91 return true;
92 else
93 return false;
94 }
95 // 把pS所指向的栈出栈一次,将元素pVal所指向的变量中
96 bool pop(PSTACK pS, int * pVal) // 出栈
97 {
98 if(empty(pS)) // pS本身就是存放
99 {
100 return false;
101 }
102 else
103 {
104 PNODE r = pS->pTop;
105 *pVal = r->data;
106 pS->pTop = r->pNext;
107 free(r);
108 r = NULL;
109
110 return true;
111 }
112 }
113
114 void clear(PSTACK pS) // 清空数据
115 {
116 if(empty(pS))
117 {
118 return;
119 }
120 else
121 {
122 PNODE p = pS->pTop;
123 PNODE q = NULL;
124
125 while(p !=pS->pBottom)
126 {
127 q = p->pNext;
128 free(p);
129 p=q;
130 }
131 pS->pTop = pS->pBottom;
132 }
133
134 }
135 /*
136 在VC++6.0中运行的结果为:
137 ==================================
138 5 4 3 2 1
139 出栈成功,出栈的元素是:5
140 4 3 2 1
141
142 Press any key to continue
143 ==================================
144 */