顺序存储的栈

数据结构-栈的顺序存储 数据结构-栈的顺序存储,进栈、出栈、取栈顶元素、判断栈是否为空、置空、 结束 立即下载

栈定义:仅限在表尾进行插入和删除的线性表

栈的特点:

1)一般来说能在表尾进行进栈和出栈的数据

2)先进后出(last in first out )

3)栈会有栈顶,栈底,通常栈底为高地址,栈顶为高地址,如下图所示

操作系统一般会在内存划出一块,专门用于栈操作,当然这个跟普通的操作有些区别:比如存放数组,地址是增加的;但是在存入数据到栈,地址则是不断减小的

栈的存储结构:

typedef struct _SQSTACK
{
	SElemType* base;
	SElemType* top;
	int stacksize;
}SqStack;
数据定义:
//默认的存储空间的大小和空间增长大小
#define STACK_INIT_SIZE	100
#define STACK_INCREMENT	10

//存储数据的类型定义
#ifndef INT_TYPE
#define INT_TYPE
#endif // INT_TYPE

#ifdef INT_TYPE
typedef		int		SElemType;
#elif defined FLOAT_TYPE
typedef		float	SElemType;
#elif defined STRING_TYPE
typedef		char*	SElemType;
#elif defined STRUCT_TYPE
typedef		void*	SElemType;
#endif
栈的操作,会涉及到初始化栈,销毁栈,进栈(入栈),出栈,还有判断栈空,栈大小,以及清空栈,如下:

栈的初始化:

//初始化栈
int InitStack(SqStack *S)
{
	S->base = (SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
	if (!S->base)
	{
		return -1;
	}
	S->top = S->base;
	S->stacksize = STACK_INIT_SIZE;
	return 0;
}
栈才初始化,里面还没有数据,这时候top,base都指向分配空间的基地址,表示栈空

销毁栈:

//销毁栈
int DestroyStack(SqStack *S)
{
	if (S->base)
	{
		free(S->base);
		S->base = NULL;
		S->top = NULL;
		S->stacksize = 0;
	}
	return 0;
}
如果栈存在,就销毁地址空间,将栈尺寸置0

进栈:

int Push(SqStack *S, const SElemType data)
{
	assert(S->base != NULL);
	if (S->top - S->base >= STACK_INIT_SIZE)
	{
		S->base = (SElemType*)realloc(S->base, 
			(STACK_INIT_SIZE + STACK_INCREMENT) * sizeof(SElemType));
		if (!S->base)
		{
			return -1;
		}
		S->top = S->base + S->stacksize;
		S->stacksize += STACK_INCREMENT;
	}
	*S->top++ = data;

	return 0;
}
如果栈的大小大于已分配长度,重新分配空间,并使栈顶重新指向新的位置,之后就将数据存入当前栈顶指向的位置,然后栈顶+1

出栈:

//出栈
int Pop(SqStack *S, SElemType *data)
{
	assert(S->base != NULL);
	if (S->base == S->top)
	{
		return -1;
	}
	*data = *(--S->top);
	
	return 0;
}
首先将栈顶位置-1,然后取得当前位置的值

以下为辅助函数,如下:

//栈是否为空
int IsStackEmpty(const SqStack &S)
{
	return ((S.base == S.top) ? true:false);
}
//得到栈的长度
int GetStackLength(const SqStack &S)
{
	assert(S.base != NULL);

	return S.stacksize;
}
//清空栈
int ClearStack(SqStack *S)
{
	assert(S->base != NULL);
	if (S->base != S->top)
	{
		S->top = S->base;
	}
	S->stacksize = 0;

	return 0;
}
测试用例祥看下节

GB/T 27930-2023协议升级与CANoe仿真测试实践 本文深入解析GB/T 27930-2023协议的核心升级,包括A/B类系统分类与EVIN码引入,并详细指导如何使用CANoe搭建仿真测试环境、编写CAPL脚本及利用DLL库进行一致性验证与故障注入测试,助力开发人员确保电动汽车充电通信的合规性与稳定性。 阅读详情

相关推荐

Cursor赋能Qt C++:从环境配置到项目构建的AI开发新范式

本文详细介绍了如何利用Cursor工具链提升Qt C++开发效率,从智能环境配置到CMake项目构建的全流程实践。通过AI辅助编程、Qt生态优化及高级调试技巧,开发者可快速完成从传统开发到AI驱动的新范式转换,显著缩短项目搭建时间并提升代码质量。

weixin_30329623的博客 546

顺序栈——栈的顺序存储

顺序栈:栈的顺序存储。

weixin_73926427的博客 407

SAP Fiori Elements 扩展实战:UI 层扩展、OData 服务扩展、CDS 视图增强及全流程案例

UI 层扩展主要关注在不修改标准生成界面的基础上,自定义用户界面元素和交互逻辑。典型需求包括:在现有 Fiori Elements 界面上添加新的字段(如表格列或表单项)、增加自定义按钮并绑定操作、以及通过控制器扩展加入事件处理等。无论在 RAP 还是传统 BOPF 架构下,前端 UI 扩展通常采用 SAPUI5 提供的**扩展点(Extension Points)和控制器扩展(Controller Extension)**机制来安全地插入自定义代码。下面分别说明两种后端架构下 UI 扩展的实现方式。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 900

数据结构:栈

栈(Stack)是只允许在一端进行插入或删除操作的线性表。首先栈是一种线性表,但限定这种线性表只能在某一端进行插入和删除操作。栈顶(Top)线性表允许进行插入删除的那一端栈底(Bottom)固定的,不允许进行插入和删除的另一端。空栈不含任何元素。

m0_72625526的博客 2266

18、社区多能源管理与点对点能源交易优化调度策略研究

本文研究了社区多能源管理与点对点(P2P)能源交易的优化调度策略,构建了适用于单一社区多个产消者的P2P交易模型,以用户生产成本最小化为目标,设计了基于ADMM算法的迭代优化方法。通过电热联合调度与能源共享机制,结合光伏、热电联产(CHP)和储能系统(ESS),实现了用户侧能源的高效利用。仿真结果表明,引入P2P交易和CHP设备显著降低了用户能源成本,提高了电力自给率和天然气利用率,减少了对主电网的依赖。研究验证了ADMM算法在分布式优化中的有效性,为未来社区能源系统的智能化管理提供了理论支持和技术路径。

git9versioner的博客 70

大聪明教你学Java | Seata 2.5 从下载到运行:全流程编译部署教程

Seata 2.5 版本带来了不少特性优化,但实际部署时却发现一个尴尬问题:全网找不到一篇完整覆盖「Git 源码下载→本地编译→环境配置→启动验证」的实操教程。作为一名踩遍无数坑才成功跑通的开发者,我深知这个过程的煎熬:Git 拉取源码后编译失败、依赖版本冲突、配置文件参数混乱、启动时端口占用或连接报错… 每一个坑都能耗费数小时排查。为了让后续开发者少走弯路,我将自己从0到1的完整实操经验整理成文,跟着步骤走即可成功运行 Seata 2.5.

不肯过江东丶 2071

数据结构之栈的顺序存储结构及其应用

文章目录栈的顺序存储解题思路结构体的定义:相关操作实现初始化依次对栈中的每个数据元素输出进栈(push)出栈(pop)新增操作栈中元素个数具体代码实现样例输出栈的应用之括号匹配匹配函数样例输出写在最后 栈的顺序存储 这里是数据结构个人学习的笔记记录,如有问题欢迎指正说明 解题思路 栈是仅能在表尾进行插入和删除操作的线性表,遵循先进后出。 先来定义结构体变量,它类似于顺序表,不过结构体中记录长度的变量改为top来记录栈顶,具体定义如下 结构体的定义: typedef struct CharStack{

AHuRui的博客 2422

【高级】系统架构师 | 2026年上半年案例分析真题

标准答案:系统因缺乏足够历史数据(用户行为、物品信息或评分等),难以做出准确推荐的问题。另外两种:物品冷启动(新课程 / 新知识点缺少互动数据)系统冷启动(平台上线初期整体数据稀缺)类型典型表现常见缓解用户冷启动新注册学员无历史问卷/前测、热门兜底、人口统计学特征、知识图谱前置测评物品冷启动新课无人学无人评内容特征推荐、专家标注、探索流量系统冷启动新平台双边都稀缺规则引擎、运营冷启、知识图谱强约束路径本题已点明「用户冷启动」,另外两种按推荐系统经典三分法作答即可。

大胆尝试,小心实践 358

数据结构-顺序栈详解(C语言)

本文主要讲述顺序栈基本定义和特点以及顺序栈的C语言代码实现与顺序栈的实际应用。以上就是顺序栈的基本介绍,本文仅仅简单介绍了顺序栈概念、特点、运算以及顺序栈的应用。顺序栈是一种特殊的线性数据结构,它遵循先进后出(FILO)的原则,即在栈顶添加和删除元素。顺序栈在计算机科学中经常使用,因为它允许我们在高频率的情况下进行添加和删除操作。

m0_55698213的博客 4263

DFI协议时序

参数名称典型值应用场景关键影响tcmd_lat1-2个时钟周期命令与地址锁存同步地址错误风险tphy_wrlat1-2个时钟周期写操作响应速度写带宽与延迟2-3个时钟周期写操作端到端延迟系统吞吐量1-2个时钟周期连续写命令间隔信号干扰与资源冲突tphy_rdlat1-2个时钟周期读操作响应速度读带宽与延迟trddata_en由CL决定(如0.41 ns)读数据返回时间系统延迟10-20 ps写数据与命令对齐数据丢失风险<1 µs低功耗模式切换。

qq_43134430的博客 5102

搞定最强大模型Gemini学生订阅,白嫖一年,包教包会

白嫖现在最强大模型

BUG猿的博客 2万+

顺序栈(栈的顺序储存结构)

顺序栈(栈的顺序储存结构)

q322359的博客 1320

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

栈的顺序存储结构

栈的c语言实现

分享点点滴滴的知识~ 485

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

栈的顺序存储

栈顺序存储的基本操作: 1)初始化栈 2)入栈 3)出栈 4)返回栈的大小 5)返回栈顶元素 6)判断栈是否为空 7)销毁

qq_45432387的博客 945

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

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

栈的顺序存储及代码实现

栈是在数据结构中经常能遇到的,在我们平时也能遇到。比如当我们在打断点调试时,经常能遇到堆栈,先调用的后出来。或者网页的后退键也是栈的应用。 一.栈及其初始化 栈是限定仅在表尾进行插入和删除操作的线性表。 我们把允许插入的一端称为栈顶,另一端称为栈底。 栈称为先进后出,简称FOLI 栈也是线性表,也有前驱后继关系。线性表的表尾是栈顶 栈插入操作叫进栈,入栈 栈删除操作叫出栈 栈的结构 栈的顺序...

weixin_36101480的博客 1064

栈的顺序存储结构及实现

栈的顺序存储结构 下标为 0 的一段作为栈底比较好,因为首元素都存在栈底,变化量最小。 /* 顺序栈结构 */ typedef struct { SElemType data[MAXSIZE]; int top; /* 用于栈顶指针 */ }SqStack; 如图所示,栈结构定义。定义一个变量来指示栈顶元素在数组中的位置,它可以来回移动,若存储栈的长度为Stack...

qq_44587855的博客 1872

栈的顺序存储实现

文章目录链表的顺序存储1 链表顺序存储头文件SeqStack.h2 实现这些函数功能SeqStack.c3 在main.c中测试4文件结构和结果 链表的顺序存储 首先要认识到viod* p[2];表示的是两个创建一个包含两个元素的数组,每个元素是void* 类型。即 void * p[2]; //和这种写法相同 void *p0; void *p1; 采用份文件的形式使用VS2013 C语言 编...

qq_41050821的博客 474

栈及栈的顺序存储结构的实现

在之前讲解了线性表的链式存储、顺序存储以及静态链表,循环链表和双向链表我们只需了解即可,接下来我们讲解线性表的应用“栈” 栈 栈是限定仅在表尾进行插入和删除操作的线性表 我们吧允许插入和删除的一端称为栈顶,另一端称为栈底,不含任何数据元素的栈我们称为空栈,栈又称为后进先出的线性表,简称为LIFO结构,可以理解为给枪的弹夹装子弹,后装的子弹会被先发射出去 既然栈是线性表的一种,线性表有顺序存储和链式...

但行好事 无问西东 1067

栈之栈的顺序存储

栈(stack): 再来说说栈的几个概念与常见操作: 栈的设计思路: 下面说一下栈的顺序存储原理: 具体代码设计思想: 话不多说,直接上代码: stack.h: #ifndef _STACK_H_ #define _STACK_H_ #define EMPTY_INDEX -1 //代表栈里面没有元素 #define MAX_SIZE 100 //这里设计可以大一点,防止数据溢出 //定义抽象的数据存放类型 typedef int element_type;//...

Pxx520Tangtian的博客 897

栈的顺序存储的实现

栈是一种先进先出的结构,他是一种特殊的线性表,栈的数据元素之间的一一对应的关系可以利用顺序的存储来表示, 那么可以利用数组来实现栈数据结构。 在第二种结构中,从数组开始位置进行操作,对栈进行操作时会涉及到大量的数组的移动和删除,而第二种从尾部操作则会避免不必要的操作,所以我们选用第一种结构。同时由于栈是一种特殊的线性表,所以直接基于以前实现的线性表来实现栈的顺序存储,线性表的顺序存储见:ht...

qq_33185566的博客 478
上一篇: 插入排序之希尔排序(Shell Sort)
下一篇: 二叉树先序遍历的非递归算法
comwise
博客等级 码龄15年 58粉丝 85原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值