数据结构--链式栈

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

二.链栈的结构:

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

相关推荐
Mr.H012735 分钟前
快速排序的常见构思
数据结构·算法
懒羊羊不懒@1 小时前
JavaSe—Stream流☆
java·开发语言·数据结构
工一木子3 小时前
从 LinkedList 血案说起:用 3W 法搭建数据结构知识框架
数据结构
陌路203 小时前
S15 排序算法--归并排序
数据结构·算法·排序算法
oioihoii4 小时前
《C语言点滴》——笑着入门,扎实成长
c语言·开发语言
ゞ 正在缓冲99%…4 小时前
leetcode1770.执行乘法运算的最大分数
java·数据结构·算法·动态规划
say_fall5 小时前
C语言容易忽略的小知识点(1)
c语言·开发语言
耳总是一颗苹果6 小时前
数据结构---时空复杂度
数据结构
立志成为大牛的小牛6 小时前
数据结构——四十、折半查找(王道408)
数据结构·学习·程序人生·考研·算法
程序员东岸8 小时前
数据结构精讲:从栈的定义到链式实现,再到LeetCode实战
c语言·数据结构·leetcode