数据结构--链式栈

一.链式栈的栈顶在哪里?

二.链栈的结构:

typedef struct LSNode{
int data;
struct LSNode* next;
}LSNode ,*PLStack;

//链栈的节点.由于栈顶在第一个数据节点,所以不需要top指针

三.链式栈的实现:

cpp 复制代码
//初始化

	LSNode* p = (LSNode*)malloc(sizeof(LSNode));
	assert(p != NULL);

	p->data = val;
	p->next = ps->next;
	ps->next = p;

	return true;
}
//获取栈顶元素的值,但是不删除
bool  GetTop(PLStack ps, int* rtval )
{
	assert(ps != NULL);
	if (ps == NULL)
		return false;

	if (IsEmpty(ps))
		return   false;

		*rtval=ps->next->data;
		return true;
}
//获取栈顶元素的值,但是删除
bool   Pop(PLStack ps, int* rtval)
{
	assert(ps != NULL);
	if (ps == NULL)
		return false;

	if (IsEmpty(ps))
		return   false;

	LSNode* p = ps->next;
	*rtval = p->data;

	ps->next = p->next;
	free(p);
	return true;
}
//判空
bool IsEmpty(PLStack ps)
{
	return ps->next == NULL;
}
//获取栈中有效元素的个数
int  GetLength(PLStack ps)
{
	assert(ps != NULL);
	if (ps == NULL)
		return -1;
	int count = 0;
	for (LSNode* p = ps->next; p != NULL; p = p->next)
	{
		count++;
	}
	return count;
}
//清空所有的数据
void Clear(PLStack ps)
{
	Destroy(ps);
}
//销毁
void Destroy(PLStack ps)
{
	//总是删除第一个数据节点
	LSNode* p;
	while (ps->next != NULL)
	{
		p = ps->next;
		ps->next = p->next;
		free(p);
	}
}

四.链式栈的总结:

链栈栈顶:栈顶在表头(即第一个数据节点)(时间复杂度是O(1))

相关推荐
汀、人工智能4 小时前
[特殊字符] 第40课:二叉树最大深度
数据结构·算法·数据库架构·图论·bfs·二叉树最大深度
赫瑞5 小时前
数据结构中的排列组合 —— Java实现
java·开发语言·数据结构
大熊背5 小时前
ISP Pipeline中Lv实现方式探究之三--lv计算定点实现
数据结构·算法·自动曝光·lv·isppipeline
升职佳兴5 小时前
C盘爆满自救:3步无损迁移应用数据到E盘(含回滚)
c语言·开发语言
Zarek枫煜8 小时前
C3 编程语言 - 现代 C 的进化之选
c语言·开发语言·青少年编程·rust·游戏引擎
yuannl109 小时前
数据结构----队列的实现
数据结构
senijusene9 小时前
IMX6ULL 平台 I2C 总线:从硬件原理到裸机驱动
c语言·arm开发·驱动开发
Mr_Xuhhh9 小时前
从ArrayList到LinkedList:理解链表,掌握Java集合的另一种选择
java·数据结构·链表
kelleyv9 小时前
C语言过时了?C3和Zig谁能拯救它
c语言·zig·c3·系统级开发·语言革新
沉鱼.4410 小时前
第十三届题目
c语言·c++·算法