ch3-栈和队列-链栈的入栈与出栈操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <stdio.h>
#include <stdlib.h>

//链表的的的结构体定义
typedef struct lineStack{
int data;
struct lineStack *next;
}lineStack;

//入栈函数push,stack为当前的链栈,a表示入栈元素
//通常我们将链表的头部作为栈顶,尾部作为栈底,所以采用头插法
//stack初始为头结点
lineStack *push(lineStack *stack,int a){
//创建存储新元素的结点
lineStack *line=(lineStack*)malloc(sizeof(lineStack));
line->data=a;
//创建好的结点,该建立新结点与头结点stack的逻辑关系了
line->next=stack;
//更新头指针的指向
stack=line;
return stack;//返回头结点
}

//栈顶元素出链栈的实现函数
lineStack *pop(lineStack *stack){
//当栈不空时方可出栈
if(stack){
//声明一个新指针指向栈顶节点
lineStack *p=stack;
//更新头指针
stack=stack->next;//stack=p->next;
printf("出栈元素:%d\n",p->data);//这里必须是p->data,不能是stack->data
if(stack){
printf("新栈顶元素:%d\n",stack->data);
}
else{
printf("栈已空\n");
}
free(p);
}
else{
printf("栈内无元素");
return stack;
}
return stack;
}

int main() {
lineStack * stack=NULL;
stack=push(stack, 1);
stack=push(stack, 2);
stack=push(stack, 3);
stack=push(stack, 4);
stack=pop(stack);
stack=pop(stack);
stack=pop(stack);
stack=pop(stack);
stack=pop(stack);
return 0;
}

结果

1
2
3
4
5
6
7
8
9
出栈元素:4
新栈顶元素:3
出栈元素:3
新栈顶元素:2
出栈元素:2
新栈顶元素:1
出栈元素:1
栈已空
栈内无元素

凡希 wechat
喜欢所以热爱,坚持干货分享,欢迎订阅我的微信公众号
呐,请我吃辣条