链栈的实现:

文章提供了两种链栈的实现,一种不带头结点,另一种带头结点。通过InitStack函数初始化链栈,Push函数使用头插法将元素入栈,Pop函数实现出栈并返回删除的元素。代码中包括了链栈的插入、打印和删除操作的详细过程。
摘要由CSDN通过智能技术生成

 不带头结点:

#include<stdio.h>
#include<stdlib.h> 
typedef struct Linknode{
	int data;//一般写成ElemType data;
	struct Linknode *next; 
}SNode ,*LiStack;
//不带头结点的链栈初始化 
bool InitStack(LiStack &S){
	S=NULL;
	return true; 
}
//不含有头结点的头插法 
bool Push(LiStack &S,int x){
	SNode *addention=(SNode *)malloc(sizeof(SNode));
	if(addention==NULL)
		return false;
	addention->data=x;
	addention->next=S;
	S=addention;
	return true;
}
void print(LiStack &S){
	SNode *temp=S;
	while(temp!=NULL){
		printf("%d ",temp->data);
		temp=temp->next;
	}
	printf("\n");
}
bool Pop(LiStack &S,int &x){
	//首先要检查是否为空
	if(S==NULL)
		return false;
	x=S->data;
	SNode *temp=S;
	S=S->next;
	free(temp);
	return true;
	 
}
int main(){
	LiStack S;
	int d;
	InitStack(S);
	for(int i=0;i<5;i++){
		Push(S,i);
	}
	print(S);
	Pop(S,d);
	print(S);
	printf("删除的数是:%d\n",d);
	return 0;
}

 

 带头结点

#include<stdio.h>
#include<stdlib.h> 
typedef struct Linknode{
	int data;//一般写成ElemType data;
	struct Linknode *next; 
}SNode ,*LiStack;
//带头结点的链栈初始化 
bool InitStack(LiStack &S){
	S=(SNode *)malloc(sizeof(SNode));
	if(S==NULL)
		return false;//创建失败
	S->next=NULL; 
	return true; 
}
//有头结点的头插法 实现入栈 
bool Push(LiStack &S,int x){
	SNode *addention=(SNode *)malloc(sizeof(SNode));
	if(addention==NULL)
		return false; 
	addention->data=x;
	addention->next=S->next;
	S->next=addention;
	return true;
}
void print(LiStack &S){
	SNode *temp=S->next;
	while(temp!=NULL){
		printf("%d ",temp->data);
		temp=temp->next;
	}
	printf("\n");
}
bool Pop(LiStack &S,int &x){
	//首先要检查是否为空
	if(S->next==NULL)
		return false;
	x=S->next->data;
	SNode *temp=S->next;
	S->next=temp->next;
	free(temp);
	return true;
	 
}
int main(){  
	LiStack S;
	int d;
	InitStack(S);
	for(int i=0;i<5;i++){
		Push(S,i);
	}
	print(S);
	Pop(S,d);
	print(S);
	printf("删除的数是:%d\n",d);
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值