数据结构—链栈(C/C++版)

本文为CSDN博主coder_gxd原创

转载请注明:https://blog.csdn.net/coder_gxd/article/details/79841031


本文介绍数据结构中单链表的常用算法(C/C++版),欢迎各位同学讨论指正。

#include <stdlib.h>//函数malloc(),free()所在头文件   
//本文链栈为含有头结点的链栈   

//定义链栈结点
typedef struct LNode {//链栈结点定义延用单链表定义 
	int data;//数据域 
	struct LNode *next;//指针域 
}LNode;


//链栈初始化代码,时间复杂度为O(1); 
//创建空栈lst,并初始化为空
void initStack(LNode *&list){//链栈头结点作为栈顶结点 
	lst=(LNode *)malloc(sizeof(LNode));
	lst->next=NULL;
} 

//判断栈空,时间复杂度为O(1); 
//栈空返回1,否则返回0;
int isEmpty(LNode *lst){
	if(lst->next==NULL){
		return 1;
	} 
	else{
		return 0;
	}
} 

//进栈操作,时间复杂度为O(1); 
//将数据元素 x 进栈,一般不存在栈满情况(除非超出内存)
void push (LNode *lst,int x){
	LNode *p;
	p=(LNode *)malloc(sizeof(LNode));
	p->next=NULL;//此句省略也正确,但每创建一个结点就使之next=NULL,是一个避免错误的好习惯; 
	p->data=x;//这两句用来创建链栈结点p,并存储x;
	p->next=lst->next;
	lst->next=p;//这两句将结点 p 链接在头结点后; 
	
}

//出栈操作,时间复杂度为O(1); 
//链栈lst出栈,出栈数据赋给x,若成功返回1,链空,出栈失败返回0; 
void pop (LNode *lst,int &x){
	if(lst->next==NULL){//链空,出栈失败返回0; 
		return 0;
	}
	LNode *p=lst->next;
	x=p->data;
	lst->next=p->next;//这三句实现删除链栈结点操作; 
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值