链栈是用链表来表示的栈,其实质上还是链表,插入使用的是尾插法,只不过一直使用top指针来操作栈,而这个top指针就是main函数中的那个初始指针,入栈和出栈都是和链表一样的操作。可能唯一不同的就是在main函数中栈的初始化不需要分配空间(当然也可以分配空间,看个人实际代码操作)
#include<stdio.h>
#include<stdlib.h> typedef struct node{
int data;
struct node *next;
}LinkStack; //判断是否为栈空
int isEmpty(LinkStack *ls){ if(ls==NULL)
return ;
return ; } //出栈
LinkStack *outStack(LinkStack *ls){ LinkStack *p = ls;
ls = p->next;
free(p);
return ls; } //入栈
LinkStack *inStack(LinkStack *ls,int e){ LinkStack *p = (LinkStack *)malloc(sizeof(LinkStack));
p->data = e;
p->next = NULL; p->next = ls;
ls = p;
return ls; } //为了打印,迫不得已
void display(LinkStack *ls){ LinkStack *p = ls;
while(p!=NULL){
printf("%d ",p->data);
p = p->next;
} } void main(){ LinkStack *ls = NULL; //这个指针就是top指针
int i,num[] = {,,,,,}; for(i=;i<;i++)
ls = inStack(ls,num[i]); display(ls); }