栈的链式存储结构

数据结构----共享栈和链式结构栈 1.共享栈 1.1共享栈的定义 共享栈其实就是两个栈,合起来,共享一个数组存数据。这样子的好处就是,两个栈同一个空间。当栈1的数据多,栈2数据比较少,就可以这样子共享,对空间的浪费就会减少。当栈1为空,top1 = -1;栈2为空,top2 = n; 关键:有两个栈底,和两个栈顶top1,top2,从数组两端向中间靠拢。当 top1 + 1 = top2 的时候为栈满。 1.2共享栈结构 /*... 阅读详情

一 概述

采用链式存储的栈成为链栈,链栈的优点是便于多个栈共享存储空间和提高效率,且不存在栈满上溢的情况。通常情况采用单链表实现,并规定所有的操作都是在单链表的表头进行的。

不含头结点的链栈,Lhead指向栈顶元素。

含头结点的链栈,头结点中只有指向链栈的指针,不含有元素。

二 链栈的链式存储类型描述

typedef struct Linknode{
    ElemType data;            //数据域
    struct Linknode *next;    //指针域
}*LinkStack;                  //栈类型定义

三 链栈操作细节

采用链式存储栈,便于结点的插入和删除。链栈的操作与链表类似,入栈和出栈的操作都在链表的表头进行。需要注意的是,对于带表头结点和不带表头结点的链栈,具体实现会有所区别。

四 链栈的代码实现

/**
*带头结点的链栈实现
**/
#include<stdio.h>
#include<cstdlib>

struct StackNode{
	int data;
	StackNode *next;
};

/*struct linkStack {
	StackNode *top; //栈顶指针
	int count;	//计数器
};*/

//链栈的初始化,创建头结点
StackNode* initLinkStack() {

	StackNode *head = (StackNode*)malloc(sizeof(StackNode));
	
	if(head == NULL) {
		printf("Allocate Memory failed.\n");
		return NULL;
	}
	
	head->data = 0;
	head->next = NULL;
	return head;
}

//数据入栈
void Push(StackNode* head, int element) {
	
	if(head == NULL) {
		printf("The head node don't exist!");
		return;
	}
	
	StackNode* node = (StackNode*)malloc(sizeof(StackNode));
	if(node == NULL){
		printf("Error!");
		return;
	}
	
	node->data = element;
	node->next = head->next;
	head->next = node;
}

//数据出栈
int Pop(StackNode* head) {
	
	if(head == NULL||head->next == NULL) {
		printf("Error!");
	}
	
	StackNode* temp = head->next;
	head->next = temp->next;
	int value = temp->data;
	free(temp);
	return value;
}

//栈的长度
int getLinkStackLength(StackNode* head){
	
	if(head == NULL||head->next == NULL) {
		return 0;
	}
	
	int length = 0;
	StackNode* p = head->next;
	while(p != NULL) {
		length++;
		p = p->next;
	}
	
	return length;
}

int main() {
	StackNode* head = NULL;
	printf("initStack");
	head = initLinkStack();
	Push(head, 3);
	Push(head, 2);
	Push(head, 1);
	printf("output the length of the stack:");
	printf("%d\n",getLinkStackLength(head));
	printf("%d\n",Pop(head));
	printf("%d\n",Pop(head));
	printf("output the length of the stack:");
	printf("%d\n",getLinkStackLength(head));
	printf("%d\n",Pop(head));
	printf("output the length of the stack:");
	printf("%d\n",getLinkStackLength(head));
	return 0;
}

代码结果

计算机组成原理实验:手把手教你用模拟程序实现中断机制(附完整代码) 本文通过一个计算机组成原理模拟实验,手把手教你从零实现一个可工作的中断系统。实验详细演示了如何配置中断控制器、编写主程序与中断服务程序,并观察中断响应、现场保护和恢复的全过程,深入解析了中断原理的核心机制。 阅读详情

相关推荐

下载Python3.10的相关方法及问题解决

下载Python3.10的相关方法及问题解决 报错unable to locate package python3.10-dev以及subprocess.CalledProcessError: Command ‘(‘lsb_release‘, ‘-a‘)‘ returned non-zero exit status 1问题解决

Istil 1555

链栈的介绍与实现

链栈:采用链式存储的栈称为链栈 链栈的优点在于多个栈共享存储空间和提高其效率,且不存在栈满上溢的情况,通常采用单链表实现,并规定所有操作都是在单链表的表头进行的 #include <stdio.h> #include <stdlib.h> typedef int ElementType; // 特殊的线性表,只有在栈顶一端进行插入删除 typedef struct node { ElementType data; struct node *Next;

夜飘凌的博客 2351

从零到一:Cadence AC仿真中的运放性能参数深度解析与实战避坑指南

本文深度解析Cadence AC仿真中运放性能参数的精确测量方法,包括开环增益、带宽和相位裕度等关键指标。通过实战案例分享常见设置错误的避坑技巧,帮助工程师提升设计成功率和仿真效率,特别针对全差分运放和工艺角分析提供专业指导。

www00的博客 294

栈的顺序存储结构与链式存储结构及代码实现

一、栈的概念 1.1 栈的定义 栈(Stack) :是只允许在一端进行插入或删除操作的线性表。首 先栈是一种线性表,但限定这种线性表只能在某一端进行插入和删除 操作,如图所示:子弹先进后出或后进先出 栈的示意图: 栈顶(Top): 线性表允许进行插入删除的那一端。 栈底(Bottom): 固定的,不允许进行插入和删除的另一端。 空栈: 不含任何元素的空表。 进栈(压栈或入栈): 栈的插入操作 出栈(弹栈): 栈的删除操作 1.2 栈的基本操作 InitStack(&S): 初始化-一个空栈 S

weixin_43800761的博客 3994

多模态变体—ALIGN:高效的图像-文本学习

ALIGN 论文介绍了该模型的关键技术。无人工标注数据:使用互联网数据进行训练,不依赖人工清洗的数据集。高效的对比学习策略:采用大规模图像-文本配对数据,通过对比学习优化嵌入空间。支持零样本(zero-shot)学习:可以在没有专门训练的情况下执行多种任务,如分类、检索等。可扩展性强:ALIGN 采用高效的 CNN 或 Transformer 作为编码器,适用于大规模计算。

Azperk的博客 1218

保姆级教程:在MounRiver Studio上为CH32V307配置FreeRTOS与LwIP网络栈

本文提供了一份详细的教程,指导如何在MounRiver Studio上为CH32V307配置FreeRTOS与LwIP网络栈。从开发环境搭建到网络功能验证,涵盖了FreeRTOS内核定制、LwIP协议栈配置、硬件抽象层实现等关键步骤,帮助开发者快速掌握RISC-V架构下的嵌入式网络开发。

weixin_29275257的博客 362

栈文档之链栈

采用链式存储的栈称为链栈。链栈的优点是便于多个栈共享存储空间和提高效率,且不存在栈满上溢的清空。通常采用单链表实现,并且规定所有操作都是在单链表的表头进行上的(因为头结点的 `next` 指针指向栈的栈顶结点)。

二木成林 8580

[pytorch] MedicalNet 3D Resnet预训练模型迁移学习实战:从分割到分类的代码改造

本文详细介绍了如何利用PyTorch对MedicalNet 3D ResNet预训练模型进行迁移学习,从分割任务改造为分类任务。通过解析模型结构、调整分类头、加载预训练权重及优化训练策略,帮助开发者在医疗影像领域快速实现高效模型部署。文章还涵盖了数据预处理、增强技巧及模型轻量化等实用内容。

kmeans3miner的博客 246

《数据结构》—— 顺序栈、链栈、共享栈的基础知识

栈的逻辑基础与代码。

博樽 1695

Java接入DeepSeek大模型:从零实现流式对话+多轮会话管理(完整项目实战)

emitter.completeWithError(new RuntimeException("连接DeepSeek服务超时"));private static final Set<String> BLACK_WORDS = Set.of("暴力", "色情", "政治敏感");emitter.onCompletion(() -> log.info("SSE连接完成"));emitter.onTimeout(() -> log.warn("SSE连接超时"));// 每个路由基础连接数。

wjianwei666的专栏 931

2025年全国青少年信息素养大赛复赛真题(算法创意实践挑战赛C++初中组试卷1:带解析)(7月6日试卷)

2025年全国青少年信息素养大赛复赛真题(算法创意实践挑战赛C++初中组试卷1:带解析)(7月6日试卷)

王老师青少年编程 1960

链式存储结构-栈

目录 链式存储结构-栈 链式存储结构-栈 #include <stdlib.h> #include <stdio.h> typedef int data_t; //类型 typedef struct node{ data_t data...

测试 544

OpenHarmony电源管理驱动架构剖析:HDI框架下的低功耗实现

鸿蒙电源管理驱动模块是OpenHarmony操作系统中负责设备电源状态管理的核心组件。该模块基于HDI(Hardware Device Interface)框架实现,提供了完整的电源管理功能,包括系统休眠/唤醒、运行锁管理、休眠模式控制等核心功能。public:// 主要接口函数// 运行锁管理private:// 内部辅助函数// 成员变量public:// 运行锁控制接口// 回调管理private:// 内部辅助函数。

m0_67505153的博客 209

栈的链式存储结构及实现

今天学习栈的链式存储结构。 链式存储结构最大的好处就是没有空间的限制,通过指针指向将结点像一个链子一样把结点链接,那么栈的同样可以用于链式存储结构。 栈的链式存储结构,简称为链栈。想想看,栈只是栈顶来做插入和删除操作,栈顶放在链表的头部还是尾部呢?由于单链表有头指针,而栈顶指针也是必须的,那么干嘛不让他们合二为一呢,所以比较好的办法是把栈顶放到单链表的头部。另外栈顶在头部了,那么单链表的头结点...

重庆李四 1万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【数据结构】栈的链式存储结构

采用链表存储的栈称为链栈,这里采用带头结点的单链表实现链栈的优点是不存在栈满上溢的情况入栈出栈操作在单链表的表头(入栈也叫头插)在栈顶插入数据元素,新插入的数据元素成为新的栈底

2301_80031203的博客 1724

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

链式存储结构实现队列的入队和出队操作以及 栈的出栈和入栈操作

链式存储结构实现队列的入队和出队操作以及 栈的出栈和入栈操作其实本质上就是用含头结点的单链表来模拟队列的入队和出队,以及栈的入栈和出栈 换句话来形容,用单链表来实现队列和栈 对于队列: 存储结构 typedef struct QueueNode//队列结点 { int data; QueueNode *next; }QueueNode; typedef struct

wtm 2万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

栈的链式存储结构与队列的链式存储结构

因为我们已经学过了线性表的链式存储结构,所以我们可以基于线性表的链式存储结构来学习栈的链式存储结构队列的链式存储结构,说到这里必须要提一下栈和队列存储元素的特点是什么?当然是栈先进后出,队列先进先出咯,学过栈和队列的甚至听说过的都知道,还用说吗。。。。。。同时要实现栈的链式存储我们必须要实现我们之前所写的栈的接口stack,实现队列的链式存储结构需要实现我们之前所写的队列中的接口Queue。 栈...

qq_44941119的博客 459

C语言 栈的链式存储结构

/* 栈的链式存储结构 不断声明一个结构体去存储值 top 指向 栈顶 count 用来计算栈的个数 */ #include <stdio.h> #include <stdlib.h> typedef char ElementType; typedef struct StackNode{ ElementType data; //存放栈的数...

Xunzi229的博客 458

栈的链式存储结构及应用(C、Java代码)

链式存储结构最大的好处就是没有空间的限制,可以通过指针指向将结点像以链的形式把结点链接,我们熟悉的线性表就有链式存储结构。 当然,栈同样有链式存储结构,栈的链式存储结构,简称链栈。 从图片可以看到,和单链表很像,拥有一个头指针top,又称作栈顶指针,所以此时就不再需要单链表里面的头结点了。 对于链栈来说,基本不存在栈满的情况,除非计算机内存已经没有了可使用的空间,如果真的存在,...

ana35287的博客 401

栈的链式存储结构及C实现

栈的链式存储结构,简称链栈。

keepupblw的专栏 790

栈与队列——栈的链式存储结构

栈的链式存储结构 == 链栈

weixin_46048397的博客 174

单链表实现栈的链式存储结构

package com.myTest.stack; /** * 单链表实现栈的链式存储结构 * * @param <T> */ public class LinkStack<T> { public static void main(String[] args) { LinkStack<Integer> linkStack = new LinkStack<>(); linkStack.push(1); .

zhangjiaxx的博客 583
上一篇: 第一个shell script的编写和执行
下一篇: 冒泡排序及其优化
至学者
博客等级 码龄9年 180粉丝 773原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值