之前写过通过顺序表来实现栈,这里就写下基于链表来实现栈的一些操作
首先先要在头文件中创建一个结构体,里面要包含所需要的一些元素
4 typedef char LinkType;
5 typedef struct LinkStack
6 {
7 LinkType data;
8 struct LinkStack* next;
9 }LinkStack;
10
栈的初始化
类似与链表初始化的操作,只需要将链表的节点置空
4 //栈初始化
5 void LinkStackInit(LinkStack** node)
6 {
7 *node=NULL;
8 }
9
入栈
有两种方法分别为头插法和尾插法,这里采用的为头插法
24 //入栈(头插法)
25 void LinkStackPush(LinkStack** stack,LinkType value)
26 {
27 if(stack == NULL)
28 {
29 //非法操作
30 return ;
31 }
32 LinkStack* new_node=CreateLinkNode(value);
33 new_node->next=*stack;
34 *stack=new_node;
35 }
出栈
有两种方法,分别为头删法和尾删法,这里采用的是头删法
36 //出栈
37 void LinkStackPop(LinkStack** stack)
38 {
39 if(stack == NULL)
40 {
41 //非法输入
42 return ;
43 }
44 if(*stack == NULL)
45 {
46 //空链表
47 return;
48 }
49 LinkStack* to_erase=*stack;
50 *stack=(*stack)->next;
51 free(to_erase);
52 return;
53 }
取栈顶元素
54 //取栈顶元素
55 int LinkStackTop(LinkStack* stack,LinkType* value)
56 {
57 if(value == NULL)
58 {
59 //非法操作
60 return 0;
61 }
62 if(stack == NULL)
63 {
64 return 0;
65 }
66 *value=stack->data;
67 return 1;
68 }