数据结构--链式栈

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

二.链栈的结构:

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))

相关推荐
superman超哥1 小时前
仓颉语言中元组的使用:深度剖析与工程实践
c语言·开发语言·c++·python·仓颉
LYFlied2 小时前
【每日算法】LeetCode 153. 寻找旋转排序数组中的最小值
数据结构·算法·leetcode·面试·职场和发展
charlie1145141913 小时前
现代嵌入式C++教程:C++98——从C向C++的演化(2)
c语言·开发语言·c++·学习·嵌入式·教程·现代c++
雨季余静3 小时前
c语言 gb2312转utf-8,带码表,直接使用。
c语言·c语言utf8·c语言gb2312·c语言gbk·c语言gb18030·gb2312转utf8·gbk转utf8
2401_890443023 小时前
Linux 基础IO
linux·c语言
jianfeng_zhu4 小时前
整数数组匹配
数据结构·c++·算法
yueqingll4 小时前
032、数据结构之代码时间复杂度和空间复杂度的判断:从入门到实战
数据结构
egoist20237 小时前
【Linux仓库】超越命令行用户:手写C语言Shell解释器,解密Bash背后的进程创建(附源码)
linux·c语言·bash·xshell·环境变量·命令行参数·内建命令
罗湖老棍子8 小时前
最小函数值(minval)(信息学奥赛一本通- P1370)
数据结构·c++·算法··优先队列·
LYFlied8 小时前
【每日算法】LeetCode 208. 实现 Trie (前缀树)
数据结构·算法·leetcode·面试·职场和发展