从零开始的数据结构学习日记(四)——1.4链栈

本文深入解析链栈的数据结构,包括链栈的定义、基本运算如初始化、入栈、出栈和取栈顶元素的具体实现。同时,对比了链栈与顺序栈的空间特性和适用场景,为读者提供选择合适数据结构的依据。

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

1.1链栈

栈的链接存储结构称为链栈,用单链表来表示,类型定义如下:

typedef struct node
{
	datatype data;
	struct node*next;
}StackNode;//链栈结点类型
typedef struct
{
	StackNode*Top;//指向栈顶结点的指针
}LinkStack;

1.2链栈的基本运算

1.2.1栈初始化

建立空链栈

void InitStack(LinkStack*&S)
{
	S=(LinkStack*)malloc(sizeof(LinkStack));
	S->Top=NULL;
}

1.2.2入栈

void Push(LinkStack*S, datatype x)
{
	StackNode*p=(StackNode*)malloc(sizeof(StackNode));
	p->data=x;
	p->next=S->Top;//将新节点插入到栈顶
	S->Top=p;//更新结点信息
}

1.2.3出栈

int Pop(LinkStack*S, datatype&x)
{
	StackNode*P=S->Top;
	if(S->Top=-1)
	{
		printf("栈下溢");
		return 0;
	}
	else
	{
		x=p->data;
		S->Top=p->next;
		free(p);
		return 1;
	}
}

1.2.4取栈顶元素

int GetTop(LinkStack*S, datatype&x)
{
	StackNode*P=S->Top;
	if(S->Top=-1)
	{
		printf("栈下溢");
		return 0;
	}
	else
	{
		x=p->data;
		return 1;
	}
}

1.3顺序栈与链栈的比较

二者的基本运算的时间复杂度均为O(1),空间特性上,顺序栈需要一个固定长度作为栈的初始容量,可能存在存储元素个数限制和空间的浪费问题,但是链栈不存在,链栈的每个元素需要一个结构域,产生了结构性开销,故当使用过程中元素个数变化较大时使用链栈,反之用顺序栈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值