顺序栈与链栈

news2025/2/13 22:56:18

简介

栈和队列是两种重要的线性结构。从数据结构角度看, 栈和队列也是线性表, 其特殊性在于栈和队列的基本操作是线性表操作的子集, 它们是操作受限的线性表。

栈 (stack) 是限定仅在表尾进行插入或删除操作的线性表。 因此, 对栈来说, 表尾端有其特殊含义, 称为栈顶 (top), 相应地, 表头端称为栈底 (bottom)。 不含元素的空表称为空栈。

在这里插入图片描述

顺序栈

顺序栈是指利用顺序存储结构实现的栈,即利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针 top指示栈顶元素在顺序栈中的位置。

基本实现方式为:

在这里插入图片描述

在这里插入图片描述

  • 顺序栈
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100

typedef struct{
	int *base;      //栈顶指针
	int *top;      //栈底指针
	int StackSize;
}SqStack;

//初始化
SqStack InitStack(){
	SqStack S;
	int a [MAXSIZE];
	S.base =  a;
	S.top = S.base;
	S.StackSize = MAXSIZE;
	return S;
}

//入栈
int Push(SqStack *S, int e){
	if(S->top-S->base ==S->StackSize) return 0;   //栈满
	S->top = e;
	(*S).top++;             //S->top ++
	return 1;
}

//出栈
int Pop(SqStack *S){
	if(S->base == S->top) return 0;    //栈空
	(*S).top--;              //S->top--
	int e;
	e= S->top;
	return e;
}

int main(){
	SqStack  S = InitStack();
	Push(&S,1);
	int e = Pop(&S);
	printf("%d\n",e);
	Push(&S,2);
	int e1 = Pop(&S);
	printf("%d\n",e1);
	Push(&S,3);
	int e3 = Pop(&S);
	printf("%d\n",e3);
	return 0;

}

代码上容易出错的地方是(*S).top++,在使用指针操作时,很多时候可能会写成S->top++。注意后者是指针取值,前者是指针运算,在每次入栈和出栈会进行指针运算,所以是前者。

链栈

链栈是指采用链式存储结构实现的栈。链栈是一个受限的链表,限定只能从链表的头部操作。

在链表中有前插法和后插法,前者是以头结点基准,新结点插入到头结点之后,每次插入厚实插入到链表头部;后者以一个尾指针为游标,每次存储新结点地址信息后,与新绩点地址交换在存储下一个新结点信息。

#include<stdio.h>
#include<stdlib.h>

typedef struct StackNode{
	int data;
	struct StackNode *next;
}StackNode,LinkStack;

LinkStack* InitStack(){
	LinkStack* L = (LinkStack*)malloc(sizeof(LinkStack));
	L->next = NULL;
	return L;
}

//入栈-----栈的特点显示链栈只能使用前插法
int Push(LinkStack *L,int e){
	StackNode* node = (StackNode*)malloc(sizeof(StackNode));
	node->data = e;
	node->next = L->next;
	L->next = node;
	return 1;
}

//出栈 (后进先出)
int Pop(LinkStack* L){
	if(L->next ==NULL) return 0;
	int e;
	e= L->next->data;
	L->next=L->next->next;
	return e;
}


int main(){
	LinkStack* L = InitStack();
	Push(L,2);
	Push(L,3);
	int e = Pop(L);
	printf("%d",e);
	int e1 = Pop(L);
	printf("%d",e1);
	return 0;
}

栈与递归

栈有一个重要应用是在程序设计语言中实现递归。由于栈的后进先出的特性,在处理某些具有连续特性的数据结构时,前一步的计算结构影响后一步,就可以使用程序的递归算法。

程序调用自身的编程技巧称为递归。

构成递归需具备的条件:

  1. 子问题须与原始问题为同样的事,且更为简单;

  2. 不能无限制地调用本身,须有个出口,化简为非递归状况处理。

例如 ∑ r = 1 n \sum_{r=1}^n r=1n的求和中,循环是常用的求值方法,但是也是可以使用递归运算的。

int Fn(int x){
	if(x==1) return 1;
	else return Fn(x-1)+x;
}
#include<stdio.h>

int Fn(int x){
	if(x==1) return 1;
	else return Fn(x-1)+x;
}


int main(){
	int e = Fn(5);
	printf("%d",e);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/645416.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算字母出现次数【存在括号计算】

计算字母出现次数【存在括号计算】 此代码考虑到了本问题的大多可能情况&#xff0c;闲话少述&#xff0c;代码中的注释很丰富。 代码绝对可以解决你的问题&#xff01; 不行你就评论&#xff0c;回复速度超快 作者时间YaoChongChong2023年6月14日10&#xff1a;40 Descript…

T8151B T8310 T8311罗克韦尔自动化可信通信接口

​ T8151B T8310 T8311罗克韦尔自动化可信通信接口 T8151B T8310 T8311罗克韦尔自动化可信通信接口 DCS控制器正反作用怎么判断&#xff1f; dcs控制器的正反作用可以在工程师站更改&#xff0c;比如中控系统那就在工程师站的操作界面把控制系统上的调节阀位号点开就会有正反作…

【华为云分布式消息服务RocketMQ】

MD[华为云分布式消息服务RocketMQ] 华为云分布式消息服务RocketMQ,使用指南 说明1&#xff1a;华为云rocketmq默认是集群4.8版本&#xff0c;而非单机版。 说明2&#xff1a;华为云rocketmq兼容性较好&#xff0c;一般不需要进行SDK改造。 1.创建/购买分布式消息服务RocketM…

水文水动力模型在城市内涝、城市排水、海绵城市规划设计中教程

详情点击链接&#xff1a;水文水动力模型在城市内涝、城市排水、海绵城市规划设计中应用教程 一&#xff0c;CAD、GIS水力建模过程 1.1复杂城市排水管网系统快速建模&#xff1a;通过标准化的步骤&#xff0c;利用CAD数据、GIS数据建立SWMM模型。在建模的不同阶段发挥不同软…

生成AI(三)—创建自己的MidJorney

背景&#xff1a;MidJorney是面向互联网的图像AIGC产品&#xff0c;在政企内部&#xff0c;存在大量需求训练内部的知识作为自己的AIGC工具。基本需求是信息安全考虑&#xff0c;合规考虑。 目标&#xff1a;通过自准备的数据训练MidJorney同类模型&#xff0c;成为私有化部署…

【基于容器的部署、扩展和管理】3.9 云原生容器的安全性和合规性

往期回顾&#xff1a; 第一章&#xff1a;【云原生概念和技术】 第二章&#xff1a;【容器化应用程序设计和开发】 第三章&#xff1a;【3.1 容器编排系统和Kubernetes集群的构建】 第三章&#xff1a;【3.2 基于容器的应用程序部署和升级】 第三章&#xff1a;【3.3 自动…

关于Android的帧动画,补间动画,属性动画的使用和总结。(附源码)

说明&#xff1a;内容有点多&#xff0c;可以分块阅读&#xff0c;后续可能会拆分为三讲 一. Android的动画总结 一 . 帧动画 帧动画其实就是通过连续播放图片来模拟动画效果 以下是俩种实现方式&#xff1a; 1. xml文件的方式 首先在drawable下建立animation_lufi.xml <?…

视频剪辑需要学哪些软件 视频剪辑在哪里学

视频剪辑涉及到素材准备、视频的编辑与生成、格式的转换等方面&#xff0c;因此需要学习到的软件类型也不少。比如在准备素材时&#xff0c;可能会涉及到音频、图片等处理&#xff0c;以及特效的应用等。接下来&#xff0c;就让我们详细了解下视频剪辑需要学哪些软件&#xff0…

如何进行安全技术交底

安全技术交底是一项非常重要的安全管理工作&#xff0c;对于保障施工现场的安全和人员的生命安全具有不可替代的作用。那么作为公司管理层如何实时了解安全技术交底的执行情况&#xff0c;工作人员是否做到认真、安全、彻底执行&#xff1f; 有没有更好、更简便低成本的方法来做…

利好再现!股、债携手上涨将继续?

政策支持继续&#xff0c;6月13日&#xff0c;国家发改委等部门印发《关于做好2023年降成本重点工作的通知》&#xff0c;助力经济运行整体好转。当日&#xff0c;央行公开市场操作中7天逆回购中标利率也下调10个基点&#xff0c;市场对于6月降息预期越来越浓了。带动A股市场震…

Spark SQL数据源:JSON数据集

文章目录 一、读取JSON文件简介二、读取JSON文件案例演示&#xff08;一&#xff09;创建JSON文件并上传到HDFS&#xff08;二&#xff09;读取JSON文件&#xff0c;创建临时表&#xff0c;进行关联查询1、读取user.json文件&#xff0c;创建临时表t_user2、读取score.json文件…

高速视觉筛选机PCI Express实时运动控制卡XPCIE1028

产品导读 正运动技术的PCI Express总线运动控制卡XPCIE1028&#xff0c;具备位置锁存、多维高速硬件位置比较输出PSO、同步跟随、精准触发的运动控制和I/O控制功能。 配合正运动技术MotionRT7实时内核使用&#xff0c;可高度满足高速视觉筛选机应用所需的运动控制需求。 XPC…

png转jpg,直接改后缀?

通过把.png改为.jpg可以改变图片的格式么&#xff1f; 将PNG文件扩展名改为JPEG的扩展名&#xff08;.jpg或.jpeg&#xff09;不会更改图像的格式。它只是更改了文件扩展名&#xff0c;这可能导致一些图像查看器和编辑器无法正确识别和处理该文件。 PNG和JPEG是两种不同的图像文…

揭秘水文覆盖变化!使用 R 语言轻松处理 GRACE.nc 文件

一、引言 在今天越来越严重的气候变化条件下&#xff0c;水文覆盖成为了越来越多研究者重视的话题。水文覆盖指的是地表或植被表面被水覆盖的面积&#xff0c;包括河流、洼地、湖泊、蓄水池等。它反应了一个地区的水资源分布、水域利用等情况&#xff0c;对于水资源管理和自然…

centos7中docker安装单机版本及对应的分布式应用中心【亲测可用】

第一部分&#xff1a;安装docker篇 1.安装docker&#xff0c;sudo为以管理员身份运行,如当前登录为root用户&#xff0c;加上也不影响 sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-…

在不安装ghostscript软件情况下,Windows中将ghostscript DLL(gsdll64.dll)库提供给python,并将资源打包进exe

1. 先安装ghostscript软件&#xff0c;将安装后的文件夹复制到项目文件夹下 2. 安装ghostscript&#xff0c;修改代码调用gsdll64.dll文件 pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple ghostscript 将ghostscript 库安装的文件夹复制到项目文件夹下&#xff…

信贷产品的贷前获客营销策略搭建

在竞争激烈的信贷市场中&#xff0c;有效的贷前获客营销策略对于吸引潜在借款人、提高转化率以及保持客户忠诚度至关重要。本文将分享一些关于信贷产品贷前获客营销策略搭建的基本框架和经验分享&#xff0c;希望能对大家有所启发。 1、市场调研和目标客户定义 在制定贷前获客…

20230614使用360安全卫士的断网急救箱解决不能上网的问题

20230614使用360安全卫士的断网急救箱解决不能上网的问题 2023/6/14 12:29 未连接到互联网 网络连接错误&#xff0c;请检查您的网络设置 刷新 无法访问此网站youtube.com 的响应时间过长。 请试试以下办法&#xff1a; 检查网络连接 检查代理服务器和防火墙 运行 Windows 网…

小程序步骤条实现

步骤条实现 <template><view class"contractInfo"><view class"contractInfo_center" style"overflow-y: auto; display: flex; overflow-y: hidden"><view class"contractInfo_center_block" v-for"(ite…

AI推文三天百万播放项目拆解

小说推文是之前操作的第一个入局的项目&#xff0c;很快就跑通了0-1&#xff0c;但是实践三个月后我决定从入⻔到放弃&#xff0c;但是大家可以借鉴一下这个项目操作经验&#xff0c;网上报了两个推文项目的陪跑199299,分享一下这个经验&#xff0c;大家可以提提意⻅。 为什么…