栈的建立及相关算法

 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 }

 

posted @ 2022-03-05 17:37  empty_y  阅读(131)  评论(0)    收藏  举报