链栈的应用

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

  • 标准版
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);            //出栈,释放掉空间
	
}

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...