结构体与栈

本文探讨了两种栈的实现方式——顺序栈和链式栈。顺序栈使用静态或动态数组,但获取最小值效率低且长度固定。链式栈则通过链表实现,入栈时同步更新最小值,提高了效率,但出栈时需要注意释放节点以防止内存泄漏。

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

栈的顺序为先进后出。栈可以右多种出具结构来表达。
第一种:顺序栈,开辟一片连续的区域存储数据:例如静态数组或者动态数组。数组的尾部进行出栈进展的操作。
数据结构为
Struct stack{
int size;
int data[maxsize];
}
可以进行的操作.Create push pop top, getsize, free and getMin.
缺点:如果要GetMin的话需要每次都遍历一次,效率比较低。第二,数据长度固定,不可变,会浪费空间,不够灵活。
第二种:链式栈:开辟一片不连续的空间,用链表的方式给串在一起。对战的头部进行出栈或者入栈的操作。
数据结构比上一种要稍微复杂
第一步先定义每个节点的结构
struct node{
int data;
int min/Max;
struct node * next.
}LNode;
第二部定义链表的数据结构
struct stack{
int size;
LNode* next
} LStack
可以进行的操作.Create push pop top, getsize, free and getMin.
入栈的时候需要把Minvalue 同时入栈,getSize可以直接利用。效率可以提高
缺点:出栈要Free 释放的节点,避免内存泄漏
源代码:

typedef struct node
{
   
	int data;
	int min;
	struct node* next;
}LNode;

//define link table structure
typedef struct MinStack
{
   
	int size;
	LNode* next;
}MinStack;
//create stack
MinStack* minStackCreate()
{
   
	MinStack* initstack = (MinStack*)malloc(sizeof(MinStack));
	initstack->size = 0;
	initstack->next = NULL;
	return initstack;
}

void minStackPush(MinStack* obj, int val) {
   
	if (obj == NULL) return;
	// create a node;
	LNode* newnode = (LNode*)malloc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值