链栈是用链表来表示的栈,其实质上还是链表,插入使用的是尾插法,只不过一直使用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 }