栈的基础知识(二)

这篇博客介绍了如何使用链式存储来实现栈的功能,包括无头结点的栈的创建、压栈、出栈操作。文章通过C语言代码展示了具体的实现细节,并指出栈可以有头结点也可以没有,实际中常用的是无头结点的链栈。学习时间为两段,分别在2021年6月7日和6月12日。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习目标:栈的链式存储实现


学习内容:

栈的代码实现

1、 创建栈(无头结点)

typedef struct LinkNode{
	ElemType data;
	struct LinkNode*pnext;
}PLStack*;

/*
typedef struct LinkStack{
	PLinkNode* ptop = NULL;
	PLinkNode *pbottom = NULL;
}LStack, PLStack*;
*/ //一般来说,不需要栈顶和栈底的指针
void main(){
	PLStack LS;
	InitLS(&LS);
	return;
}

void InitLS(PLStack P){
	//p = (PLStack)molloc(sizeof(LinkNode));   //一般来说,链栈不必有头结点。需要的话,加上这一句
/*	if(p->ptop == NULL){
		printf("分配内存失败\n");
		exit(-1);
	}
	*/
	p->pnext = NULL;
}

2、 压栈、出栈(无头结点)

压栈(有无头结点一样):思路和链表头插法一样

void put(PLStack p, int x)
{
	//LinkNode new;不能这么写,因为执行这个函数就会回收该变量的空间,要用molloc动态分配才行
	LinkNode *pnew = (LinkNode*)malloc(sizeof(LinkNode));
	//下面三句,头插法思想
	pnew->data = x;
	pnew->pnext = p->pnext;  
	p->pnext = pnew;
	return;
}
bool pop(PLStack p)
{
	if(empty(p) == 1){
		printf("栈为空,无法出栈");
		return false;
	}
	else{
		LinkNode *t = p;
		p = p->pnext;
		free(t);
		return true;
	}
	return
}

bool empty(PLStack p)
{
	if(p->pnext == NULL){
		return true;
	}else{
		return false;
	}
}

学习时间:

1、 2021-6-7 13:30-14:00
2、2021-6-12 21:30-22:30


学习产出:

1、 数据结构视频3.1.3
2、栈可以有头结点可以没有,常用的是没有头结点。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值