1 # include<stdio.h>
2 # include<malloc.h>
3 typedef struct node {
4 int data;/*数据域*/
5 struct node * next; /*指针域*/
6 } node, *pnode; /*栈节点*/
7
8 typedef struct Stack {
9 pnode top;
10 pnode bottom;
11 } stack, *pstack; /*栈本身*/
12
13 void stack_push(pstack s, int val); //入栈
14 void stack_pop(pstack s);/*出栈*/
15 bool stack_isempty(pstack s);/*栈是否为空*/
16 void showstack(pstack s);/*遍历栈*/
17 int main() {
18 /*初始化创建栈*/
19 stack s;
20 pstack p = &s;
21 pnode pnew = (pnode)malloc(sizeof(node));
22 p->bottom = p->top = pnew;/*最初栈顶和栈底都指向空*/
23 /*测试stack_push()*/
24 stack_push(p, 5);
25 stack_push(p, 7);
26 stack_push(p, 19);
27 showstack(p);
28 /*测试stack_pop()*/
29 stack_pop(p);
30 showstack(p);
31 stack_pop(p);
32 showstack(p);
33 /*测试stack_isempty()*/
34 if (stack_isempty(p)) printf("栈空\n");
35 else printf("栈非空\n");
36 stack_pop(p);
37 if (stack_isempty(p)) printf("栈空\n");
38 else printf("栈非空\n");
39 return 0;
40 }
41 void stack_push(pstack s, int val) {
42 pnode pnew = (pnode)malloc(sizeof(node));/*创建新节点*/
43 pnew->data = val;
44 pnew->next = s->top;
45 s->top = pnew;
46 /*尾插法插入,栈顶上移*/
47 }
48
49 void showstack(pstack s) {
50 /*自上而下遍历整个栈*/
51 for (pnode p = s->top; p != s->bottom; p = p->next) {
52 printf("%d ", p->data);
53 }
54 printf("\n");
55 }
56
57 void stack_pop(pstack s) {
58 pnode p = s->top;/*用于删除的指针p*/
59 s->top = p->next;/*栈顶下移*/
60 free(p);
61 p = NULL;/*删除栈顶元素*/
62 }
63 bool stack_isempty(pstack s) {
64 if (s->bottom == s->top) return true; /*当栈顶和栈底指向相同说明整个栈没有元素了*/
65 else return false;
66 }