之前写过通过顺序表来实现栈,这里就写下基于链表来实现栈的一些操作
首先先要在头文件中创建一个结构体,里面要包含所需要的一些元素
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 }