数据结构《顺序栈》知识点详解+C语言完整代码-超详细_顺序栈代码运行-程序员宅基地

技术标签: c语言  数据结构  开发语言  

1. 定义

栈:只能在表的一端(栈顶)进行插入和删除运算的线性表。

2. 逻辑结构

与线性表相同,仍为一对一关系。

3. 存储结构

用顺序栈或链栈存储均可,但以顺序栈更常见。

4. 运算规则

只能在栈顶运算,且访问结点时依照后进先出(LIFO)或先进后出(FILO)的原则。

5. 实现方式

关键是编写入栈和出栈函数,具体实现依顺序栈或链栈的不同而不同。基本操作有入栈、出栈、读栈顶元素值、建栈、判断栈满、栈空等。

C语言代码实现

1. 顺序栈的表示

在这里插入图片描述

2. 结构体

结构体定义代码 如下:

typedef int Status;
typedef int SElemType;
typedef struct {
   
    
	SElemType *top; //栈顶指针
	SElemType *base; //栈底指针
	int stacksize;	//栈可用的最大容量
}SqStack;

3.初始化

构造一个空栈
在这里插入图片描述

(1)分配空间并检查空间是否分配失败,若失败则返回错误
(2)设置栈底和栈顶指针
(3)设置栈大小

初始化代码 如下:

//顺序栈的初始化
Status Initstack(SqStack &S)
{
   
    
	//构造一个空栈S
	S.base=(SElemType*)malloc(MAXSIZE*sizeof(SElemType));//为顺序栈动态分配一个最大容量为MAXSIZE的数组空间
	if (!S.base)
		exit(OVERFLOW); //存储分配失败
	S.top=S.base; //top初始为base,空栈
	S.stacksize=MAXSIZE; //stacksize置为栈的最大容量MAXSIZE
	return 1;
}

4.入栈

在这里插入图片描述

(1)判断是否栈满,若满则出错
(2)元素x压入栈顶
(3)栈顶指针加1
入栈代码 如下:

//顺序栈的入栈
Status Push(SqStack &S,SElemType x){
   
    
// 插入元素e为新的栈顶元素
	if(S.top-S.base>=S.stacksize)
		return 1;//栈满
	*S.top=x;//元素x压入栈顶
	S.top++;//栈顶指针加1
	//*(S.top++) = x; 
	return 0; 
}

5.出栈

在这里插入图片描述
(1)判断是否栈空,若空则出错
(2)获取栈顶元素x
(3)栈顶指针减1
出栈代码 如下:

//顺序栈的出栈
Status Pop(SqStack 
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/susuwhsbbs/article/details/122514844

智能推荐

青藏高原MODIS逐日无云积雪面积数据集-程序员宅基地

文章浏览阅读732次,点赞24次,收藏15次。在充分考虑青藏高原的地形和山地积雪特征的情况下,本套数据集采用了多种去云过程和步骤相结合,逐步实现保持积雪分类精度的情况下,完成逐日积雪的云量消除,形成了“青藏高原MODIS逐日无云积雪面积”的逐步综合分类算法,完成了“青藏高原MODIS逐日无云积雪面积数据集(2002~2018年)”。结果表明,在高原地区,当积雪深度>3 cm时,无云积雪产品总分类精度达到96.6%,积雪分类精度达89.0%,整个算法流程对MODIS积雪产品去云的精度损失较低,数据可靠性较高。(a)C6.1版MODIS无云积雪结果;

本地CMD命令将webp格式文件批量转换为图片格式(jpg、png、bmp、gif)_cmd命令转换文件格式-程序员宅基地

文章浏览阅读504次。其中,[input_image.webp]是您要转换的输入图像文件的路径和文件名,[output_image.png]是输出文件的路径和文件名。这将在当前目录下生成名为output.png的图像文件。_cmd命令转换文件格式

使用 QGIS 设置GeoServer栅格图层样式_geoserver 图层字体大小更改-程序员宅基地

文章浏览阅读907次,点赞15次,收藏28次。地理空间数据没有内在的可视化功能,必须对其进行样式设置才能在地图上直观地表示。默认情况下,GeoServer 使用称为样式层描述符 (SLD) 的标记语言来定义显示数据的样式规则。SLD 是一种基于 XML 的语言,允许用户和软件控制地理空间数据的视觉描绘。这种语言确保客户端和服务器都可以理解如何直观地呈现数据。添加样式要添加新样式,请导航至数据 > 样式页面,然后单击添加新样式链接。您将被重定向到新的样式页面,该页面与“样式编辑器数据”选项卡相同。_geoserver 图层字体大小更改

Xcode 下载真机包调试_xcode中i真机调试包下载地址-程序员宅基地

文章浏览阅读3.9k次。解决在低版本的Xcode上使用高版本iOS系统手机进行真机测试Xcode 真机包资源下载地址:真机包资源下载地址下载好以后解压,复制到以下路径:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport重启Xcode后就可以用Xcode真机调试了..._xcode中i真机调试包下载地址

2021 ICPC Southeastern Europe Regional Contest Werewolves(树上背包)-程序员宅基地

文章浏览阅读808次。2021 ICPC Southeastern Europe Regional Contest Werewolves(树上背包)链接题意:给出一个n个节点的树(n≤3000n\le3000n≤3000),每个点有自己的颜色,好子树的定义是,子树内有一半以上的节点是同一种颜色,问有多少种划分子树的方法,最后对998244353998244353998244353取模。思路:dls讲的树上背包。。当时听了也没太明白代码怎么写,现在想想还是对树上背包这种不太熟。我们对于每个颜色,都要在树上进行一次dp,这样就_2021 icpc southeastern europe regional contest

pytorch多个张量的加减乘除运算_pytorch张量之间的减法-程序员宅基地

文章浏览阅读4k次。import torcha1 = torch.rand(2, 3)print(a1)a2 = torch.rand(2, 3)print(a2)print(a1.add(a2)) # 加法运算a1 + a2,不改变参与运算的张量的值print(a1 + a2) # 加法运算a1 + a2,不改变参与运算的张量的值print(a1.sub(a2)) # 减法运算a1 - a2,不改变参与运算的张量的值print(a1 - a2) # 减法运算a1 - a2,不改变参与运算的张量的_pytorch张量之间的减法

随便推点

BEVDet笔记_bevdet检测头-程序员宅基地

文章浏览阅读322次,点赞3次,收藏4次。BEV空间中不同类别的空间分布与图像视图的空间分布是完全不同的,图像视图相机的透视成像机制导致不同类别共享相似的空间分布,因此经典的NMS是对不同的类别采用相同的阈值,比如在2D目标检测中,两个实例的bounding box IoU是低于0.5的(这句话存疑),在BEV空间中,所有实例间的重叠接近于0,预测结果中IoU分布也因类别而异,在BEV空间中有些目标例如行人占比很小,冗余的框可能和GT间并没有交集,那就是IoU等于0,这就导致正样本和负样本空间关系如果依赖IoU的NMS其实是失效的。_bevdet检测头

使用ArcGIS统计栅格数据面积_arcgis重分类后计算面积-程序员宅基地

文章浏览阅读5w次,点赞20次,收藏194次。很多的时候我们都会遇到统计面积的需求,如果是矢量数据就比较容易统计面积,但数据如果是影像图,又是经纬度坐标(没有经过投影)就需要相应的一系列的处理。我这里拿到的是辽宁省的栅格图,坐标系统Xi”an80,其中分为五类地类,然后分别统计它们的面积。 数据是经纬度的坐标系统,没有进行投影,不能直接用经纬度计算面积,所以首先我们通过高斯投影将影像图的经纬度坐标转成平面直角坐标,在ArcCata_arcgis重分类后计算面积

已知函数定义 def func(**p): return ‘‘.join(sorted(p)) 那么表达式 func(x=1, y=2, z=3)的值为 xyz-程序员宅基地

文章浏览阅读7.5k次。下列解析def func(**p): return p print(func(x=1, y=2, z=3)) # {'x': 1, 'y': 2, 'z': 3}def func(**p): return sorted(p) print(func(x=1, y=2, z=3)) #['x', 'y', 'z']def func(**p): return ''.join(sorted(p)) print(func(x=1, y=2,_def func(**p)

iOS开发 判断用户是否开启了定位服务_获取用户是否开启了始终定位服务-程序员宅基地

文章浏览阅读1k次。if ([CLLocationManagerlocationServicesEnabled] && ([CLLocationManagerauthorizationStatus] ==kCLAuthorizationStatusAuthorizedWhenInUse || [CLLocationManagerauthorizationStatu_获取用户是否开启了始终定位服务

【JAVA实现腾讯云COS(对象存储)】SpringBoot微服务实现将视频上传到腾讯云COS(拿来就能用)_java 腾讯cos工具类-程序员宅基地

文章浏览阅读2.5k次,点赞2次,收藏9次。2.3 最后说一下: 返回值R,根据自己项目的业务返回来自定义。2.2 下面直接上接口的代码(复制过来就能用!这里没有用static 修饰:大家可以自己加静态修饰。_java 腾讯cos工具类

win11&centos7安装Subversion与配置 svn服务端_win11安装svn-程序员宅基地

文章浏览阅读2.9k次。启动SVN服务器有两种方法,一个是命令行方式,一个是注册Windows服务。[3]命令行方式的缺陷是:只要运行服务器端程序的命令行窗口一关闭,服务就停止了,很不方便,而且每次开机都需要手动启动。此时查看当前系统中的服务,可以看到我们刚刚创建的服务,但此时它还没有启动,如果创建失败,需检查sc命令是否正确。[1]将SVN服务端程序注册为Windows服务,就可以让SVN服务随系统一起启动,克服了命令行方式的不足。如果启动失败,那很有可能是binpath中的内容有错误,此时只能将已经创建的服务删除,重新创建。_win11安装svn