大话数据结构:栈与队列(2)栈的链式存储

栈的链式存储结构及实现

栈的链式存储结构:链栈
基本上不存在栈满的情况,栈满意味着内存满了,这时候电脑会死机
栈顶指针和头指针合二为一
链栈结构代码

typedef struct StackNode
{

	SElemType data;
	struct StackNode *next;
	
}StackNode,*LinkStackPtr;

typedef struct LinkStack
{
	LinkStackPtr top;
	int count;
	
}LinkStack;

进栈
先给新元素e分配一个新结点S,结点S的数据域存储e,结点S的指针域指向当前的栈顶元素的指针域,然后把这个新结点S赋给栈顶。
代码实现

/*输入元素e为新的栈顶元素*/
Status Push(LinkStack *S,SElemType e)
{
	LinkStackPtr s= (LinkStackPtr)malloc (sizeof (StackNode));//创建新结点
	s->data=e;
	s->next=S->top;//把当前的栈顶元素赋值给新结点的直接后继
	S->top=s;//将新的结点S赋值给栈顶指针
	S->count++return OK;
}

出栈
把结点先用变量p存起来,将栈顶指针下移一位,最后释放p即可。

/*若栈不空,则删除S的栈顶元素,yomge返回其值,并返回OK;否则返回ERROR*/
Status Pop (LinkStack *S,SElemType *e)
{
	LinkStackPtr p;
	if (StackEmpty(*S))
		return ERROR;
	*e=S->top->data;
	p=s->data;//将栈顶结点赋值给p
	S->top=S->top->next;//栈顶指针下移一位,指向后一结点
	free(p);//释放结点
	S->count--;
	return OK;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值