c语言栈 《个人理解》

一般我自己就用那个链栈(动态栈)

个人认为这个方便简单点  

在我看来这个栈就是一个先进后出的存储格式而已,在用结构体创建栈的时候保证初始化成功,开辟节点的时候把它连在后面,top指针指向他。出栈的时候记得移动以哈指针就行了,就是一个特殊点点的链表而已(就像只能用头插法,头指针变成top,尾巴上的指针变成battom指针了,出栈的时候就相当于头插法的时光倒流一样)。


我理解的基本上就是这个意思了

一个小练习题

http://codevs.cn/problem/3139/

#include<stdio.h>
#include<malloc.h>
struct stack
{
int a;
struct stack *next;
};
struct zhen
{
struct stack *ptop;
struct stack *pbattom;
};


int main()
{
void init(struct zhen *p);
void in(struct zhen *p,int s);
void out(struct zhen *p);
void chuzhan(struct zhen *p);
int n,a,b,c=0,d=0,e=0;
struct zhen  p;
init(&p);
scanf("%d",&n);
for(a=0;a<n;a++)
{
scanf("%d",&b);
if(b==1)
{
e+=1;
scanf("%d",&c);
in(&p,c);
}
else if(b==2)
{
d+=2;
if(d>e+e)
break;
chuzhan(&p);
}
else
{
if((p.ptop)==(p.pbattom))
printf("impossible!\n");
else
out(&p);
}
}
return 0;
}
void init(struct zhen *p)//初始化栈
{
p->ptop=(struct stack *)malloc(sizeof(struct stack));
p->pbattom=p->ptop;
p->ptop->next=NULL;
}
void in(struct zhen *p,int s)//入栈

struct stack *pnew=(struct stack *)malloc(sizeof(struct stack));
pnew->a=s;
pnew->next=p->ptop;
p->ptop=pnew;
}
void out(struct zhen *p)
{
struct stack *k=NULL;
printf("%d\n",p->ptop->a);
k=p->ptop->next;
}
void chuzhan(struct zhen *p)
{
struct stack *k=NULL;
p->ptop=p->ptop->next;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值