栈的链式存储结构和线性表的链式很像,而且简单的多
#include <stdio.h>
#include <stdlib.h>
typedef struct node//结构体定义
{
int data;//数据域,存储数据
struct node *next;
}node,*linklist;
void create_stack(linklist *l)//栈的建立,采用尾插法
{
linklist p,r;
(*l)=(node*)malloc(sizeof(node));
(*l)->next=NULL;
int i,j,x;
printf("please input:");
scanf("%d",&j);
(*l)->data=j;//通过头结点来存储top,栈的大小
r=(*l);
for(i=0;i<j;i++)
{
p=(node*)malloc(sizeof(node));
scanf("%d",&x);
p->data=x;
r->next=p;
r=p;//重新从r开始插入,使每个节点都在最后面
}
r->next=NULL;
}
void print_stack(linklist *l)//栈的打印输出
{
linklist p;
p=(*l)->next;
while(p)
{
printf("%4d",p->data);
p=p->next;
}
}
void push_stack(linklist *l)//进栈
{
int i,j,x;
printf("please input:");
scanf("%d",&x);
linklist p,r;
p=(node*)malloc(sizeof(node));
p->data=x;
r=(*l)->next;
for(i=1;i<(*l)->data;i++)
{
r=r->next;
}
r->next=p;
p->next=NULL;
(*l)->data++;
}
void pop_stack(linklist *l)//出栈操作
{
int i,j,x;
linklist p,r;
p=(*l)->next;
for(i=1;i<(*l)->data-1;i++)
{
p=p->next;
}
printf("%d",p->next->data);
p->next=NULL;
free(p->next);
(*l)->data--;
}
int main()
{
linklist a;
create_stack(&a);
pop_stack(&a);
push_stack(&a);
print_stack(&a);
return 0;
}