C语言链栈

链栈是用链表来表示的栈,其实质上还是链表,插入使用的是尾插法,只不过一直使用top指针来操作栈,而这个top指针就是main函数中的那个初始指针,入栈和出栈都是和链表一样的操作。可能唯一不同的就是在main函数中栈的初始化不需要分配空间(当然也可以分配空间,看个人实际代码操作)

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 
 4 typedef struct node{
 5     int data;
 6     struct node *next;
 7 }LinkStack;
 8 
 9 //判断是否为栈空 
10 int isEmpty(LinkStack *ls){
11     
12     if(ls==NULL)
13         return 1;
14     return 0;
15     
16 }
17 
18 //出栈 
19 LinkStack *outStack(LinkStack *ls){
20     
21     LinkStack *p = ls; 
22     ls = p->next;
23     free(p);
24     return ls;
25     
26 }
27 
28 //入栈 
29 LinkStack *inStack(LinkStack *ls,int e){
30     
31     LinkStack *p = (LinkStack *)malloc(sizeof(LinkStack));
32     p->data = e;
33     p->next = NULL;
34     
35     p->next = ls;
36     ls = p;
37     return ls;
38     
39 }
40 
41 //为了打印,迫不得已 
42 void display(LinkStack *ls){
43     
44     LinkStack *p = ls;
45     while(p!=NULL){
46         printf("%d ",p->data);
47         p = p->next;
48     }
49     
50 }
51 
52 void main(){
53     
54     LinkStack *ls = NULL;            //这个指针就是top指针 
55     int i,num[6] = {21,31,45,67,90,44};
56     
57     for(i=0;i<6;i++)
58         ls = inStack(ls,num[i]);
59         
60     display(ls);
61     
62 }
posted @ 2018-11-27 17:37  捞的不谈  阅读(468)  评论(0编辑  收藏  举报