C Language 栈和队列 - 链栈(六)

链栈和单链表区别是,栈的弹出元素是在头顶弹出,所以后一个元素的next域是前一个元素的地址,所以在入栈的时候格外的注意一下就行

  • 创建单链栈:
typedef char ElemType;
typedef struct linknode {
	ElemType data;
	struct linknode *next;
} LinkNode;
  • 初始化单链栈算法:
void initLStack(LinkNode *&s) {
	s = new LinkNode;
	s->next==NULL;
}
  • 销毁链栈算法:
void destroyLStack(LinkNode *&s) {
	LinkNode *pre=s,*p=s->next;
	while(p!=NULL) {
		free(pre);
		pre=p;
		p=pre->next;
	}
	free(pre);
}
  • 进栈算法:
void pushLStack(LinkNode *&s,ElemType e) {
	LinkNode *p;	//链栈没有栈满的情况
		p=new LinkNode;
	
	p->data = e; 
	p->next=s->next;
	s->next=p;
}

在这里插入图片描述

  • 出栈算法:
bool popLStack(LinkNode *&s,ElemType &e) {
	LinkNode *p;
	if(s->next==NULL)
		return false;

	p=s->next;	
	e=p->data;
	s->next=p->next;
	free(p);
	return true;
}

就是从最后一个逆序出栈,直到栈空为止。

  • 取栈顶元素算法:
bool getLStackTop(LinkNode *&s,ElemType &e) {
	if(s->next==NULL)
		return false;
		
	e=s->next->data;
	return true;
}
  • 初始化进栈以及出栈操作结果如下:在这里插入图片描述
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值