微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

链栈的应用

【例】用 不带头结点 的单链表存储链栈,设计初始化栈、判断栈是否为空、进栈和出栈等相应的算法。

  • 标准版
typedef struct LNode{
	int data;
	struct LNode *next;
}LNode;

//初始化
void initStack(LNode *&lst){
	lst=NULL;                   
}

//判断是否为空
int isEmpty(LNode *lst){
	if(lst==NULL)
		return 1;
	else 
		return 0;
}

//进栈
void push(LNode *&lst,int x){
	LNode *p;
	p=(LNode*)malloc(sizeof(LNode));
	p->data=x;
	p->next=NULL;
	//以下为插入操作
	p->next=lst;
	lst=p;
}

//出栈
void pop(LNode *&lst,int &x){
	if(lst==NULL)
		return 0;
	LNode *p;
	p=lst;
	x=p->data;
	lst=lst->next;
	free(p);
	return 1;
}
  • 解析版
/* 与有头结点的链栈相比,结点结构不会改变 */
typedef struct LNode{
	int data;
	struct LNode *next;
}LNode;

//初始化
void initStack(LNode *&lst){
	lst=NULL;                   //若是有头结点的,则为 lst->next=NULL;     
}

//判断是否为空
int isEmpty(LNode *lst){
	if(lst==NULL)             //若是有头结点的,则为 if(lst->next==NULL)      
		return 1;
	else 
		return 0;
}

//进栈
void push(LNode *&lst,int x){

	/* 创建一个结点,里面存放要插入的值 */
	LNode *p; 
	p=(LNode*)malloc(sizeof(LNode));
	p->data=x;
	p->next=NULL;
	
	//以下为插入操作
	p->next=lst;
	lst=p;
	
}

//出栈
void pop(LNode *&lst,int &x){

	if(lst==NULL)        //空栈不能出栈
		return 0;
		
	LNode *p;
	p=lst;              // p 和 lst 都指向最后一个结点,即栈尾结点
	x=p->data;          // 用 x 取得要出栈元素的 data 的值
	lst=lst->next;      //将 lst 指向要出栈元素的前一个元素
	free(p);            //出栈,释放掉空间
	
}

原文地址:https://www.jb51.cc/wenti/3281571.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐