栈的顺序实现

c++顺序栈和链式栈的实现 基本定义: 栈(Stack)是n个元素a1,a2,…an,组成的有限序列,记作S =(a1,a2,…,an),并且只能在一端插入和删除元素,n=0时称为空栈。 栈的特征: 由于栈只能从一端插入和删除元素,故栈具有后进先出(Last in,first out,LIFO)的特性。称插入和删除的一端为栈顶(top),另一端为栈底(bottom)。称插入元素为入栈或压栈(push),删除 阅读详情

栈的顺序实现
时间:2006/03/27
测试环境: TC2.0

#include <stdio.h>
#define True 1
#define False 0
#define LEN sizeof(ElemType)
#define Stack_InitSize 100
#define Stack_Increment 30

typedef int ElemType;

struct SqStack
{
ElemType *base;
ElemType *top;
int stacksize;
};

/*构造一个空栈*/
void InitStack(struct SqStack *S)
{
S->base = (ElemType *)malloc(Stack_InitSize*LEN);
if(!S->base)
return;
S->top = S->base;
S->stacksize = Stack_InitSize;
return;
}

/*销毁一个栈*/
void DestroyStack(struct SqStack *S)
{
while(S->top!=S->base)
S->top--;
free(S->base);
free(S);
}

/*将栈里面的元素清空*/
void ClearStack(struct SqStack *S)
{
while(S->top!=S->base)
S->top--;
}

/*判断是否为空栈*/
void IsEmpty(struct SqStack *S)
{
if(S->top==S->base)
printf("/nThe SqStack is empty!");
else
printf("/nThe SqStack is not empty!");
return;
}

/*按出栈顺序打印这个栈*/
void Print(struct SqStack *S)
{
ElemType *p;
p = S->top;
while(p!=S->base)
{
p--;
printf("%d ",*p);
}
printf("/n");
p=NULL;
}

/*向栈里压入数据e*/
void Push(struct SqStack *S,ElemType e)
{
if(S->top - S->base >= S->stacksize) /*栈满,重新分配更大的空间*/
{
S->base = (ElemType *)realloc(S->base,(S->stacksize+Stack_Increment)*LEN);
S->top = S->base + S->stacksize;
S->stacksize += Stack_Increment;
}
*S->top = e;
S->top++;
return;
}

/*弹出栈顶元素*/
void Pop(struct SqStack *S)
{
if(S->top==S->base)
return;
S->top--;
printf("Pop the data:%d/n",*S->top);
return;
}

/*返回栈顶元素*/
int GetTop(struct SqStack *S)
{
ElemType *p = S->top;
if(S->top==S->base)
{
printf("The stack is empty!");
return False;
}
return *(--p);
}

void main()
{
struct SqStack *SS;
int i;
SS = NULL;
/*初始化这个栈*/
InitStack(SS);
/*将数据压入栈内*/
for(i=0;i<10;i++)
Push(SS,i);
/*以出栈顺序打印栈*/
Print(SS);
printf("/n");
/*弹出栈顶元素,并再次打印栈*/
Pop(SS);
Pop(SS);
Print(SS);
/*返回栈顶元素*/
i = GetTop(SS);
printf("/nThe Top data is:%d/n",i);
/*清空栈,并判断是否为空*/
ClearStack(SS);
IsEmpty(SS);
/*销毁栈*/
DestroyStack(SS);
}

运行后结果:

 

 

顺序栈与链栈的初始化,进栈,出栈的具体实现 文章目录一,栈的定义二,顺序栈 一,栈的定义 栈是限定仅在表尾进行插入和删除操作的线性表 允许插入和删除的一端称为栈顶,另一端称为栈底。不含任何数据元素的栈称为空栈。栈又称为后进先出的线性表,简称LIFO结构。 注意: 栈元素具有线性关系,即前驱后继关系 可在线性表的表尾进行插入和删除操作,这里的表尾指的是栈顶 栈底是固定的,最先进栈的只能在栈底 栈的插入操作,叫做进栈,也称压栈,入栈 栈的... 阅读详情

相关推荐

栈的顺序存储(数组实现)

栈的定义 栈是只允许一一端进行操作的的线性表,首先强调的是栈是一种线性表,其次栈只限定在一端进行操作。 基本操作 initstack() 初始化栈 stackempty() 判断栈空 push() 进栈 pop() 出栈 gettop() 获取栈顶元素 destorystack() 销毁栈 顺序栈的实现 初始化 typedef struct{ int data[MAX]; int top; }sqstack; //初始化 void initStack(sqstack

qq_42552006的博客 1374

【数据结构】栈

顺序栈 定义 #define MaxSize 50 //栈中元素最大个数 typedef struct{ ElemType data[MaxSize]; //存放栈中元素 int top; //栈顶指针 }SqStack; 操作集 void InitStack(SqStack &S); //初始化 bool StackEmpty(SqStack S); //判空 bool Push(SqStack &S,ElemType x); //进栈 bool

Obliviate的博客 1313

ANSYS Discovery 2023R1 保姆级教程:手把手教你玩转几何模型参数化(附避坑指南)

本文提供ANSYS Discovery 2023R1几何模型参数化的全面教程,涵盖基础环境搭建、核心操作解析及高级应用场景。重点讲解参数化建模中的常见问题与避坑方案,帮助用户高效掌握Workbench与Discovery的协同使用技巧,提升工程仿真效率。

weixin_29204205的博客 752

* & 的问题 (待整理)

资料:http://tieba.baidu.com/f?kz=1053435983 void InitStack( SqStack *&S) 浏览次数:3426次悬赏分:5|解决时间:2006-8-12 00:19|提问者:dangdangxww 为什么这个S形参前面用了* 和&呢?是怎么个用法,含义如何呀? 小弟在这先谢了,那位高手...

weixin_30545285的博客 777

西门子博图TIA Portal V18实战:用LAD梯形图快速上手一个电机启停控制程序

本文详细介绍了如何在西门子博图TIA Portal V18中使用LAD梯形图快速实现电机启停控制程序。从项目创建、硬件组态到LAD编程和仿真调试,逐步引导读者掌握PLC编程的核心逻辑,特别适合工业自动化领域的初学者快速上手。

weixin_30617737的博客 690

史上最牛逼的导航网站(很全很详细)

今天,给大家推荐47个聚合型的导航网站 每一个都收录上百个网站,1个能顶100个,丝毫没有夸张的成分。 (推荐收藏) 设计师导航网站 01 优设导航 https://hao.uisdc.com/ 设计师必备的导航网站,包含设计工具、素材资源、字体设计、配色方案、酷站模板等。 界面清晰无广告,收录网站超过520个。 02 设计导航 http://h...

孙叫兽的博客 7万+

数据结构---链栈

数据结构–链栈 根据栈的定义,和链表结合 利用链表的头插法实现入栈,利用链表删除头元素的方法实现出栈 定义结构体 //定义链栈 typedef struct Linknode{ elemtype data; Linknode *next; }*ListStack; 对栈进行初始化 //初始化 void initStack(ListStack &S){ S=(ListStack)malloc(sizeof(Linknode));//创建头节点 S->next=NULL;//指向空

l1051663145的博客 368

SerDes系列之FFE均衡技术

FFE的基本结构可以在RX侧或TX侧实现,其基本工作原理相同:它通过从同一信号源应用适当的延迟来产生多径信号,然后对它们进行线性缩放和组合以消除信道ISI。

一只豌豆象的博客 4243

栈为何“后进先出”:从访问顺序理解 C 语言动态顺序栈

栈不是“只能存几个数的数组”,而是一种限制访问方向的数据结构。本文先从撤销操作和函数调用理解后进先出,再用内存示意图建立栈顶、栈底、元素数量与容量的模型,最后对照动态顺序栈代码推演初始化、扩容、入栈、出栈和销毁,并通过复杂度分析与练习巩固边界处理。

by20999的博客 1576

芒果YOLO11改进176:2025最新顶会论文|尺度动态损失函数Scale-based Dynamic Loss,即插即用|以减少标签不准确对损失函数稳定性的影响

芒果YOLO11改进186:2025最新顶会论文|尺度动态损失函数Scale-based Dynamic Loss,即插即用|以减少标签不准确对损失函数稳定性的影响

包括YOLOv5、YOLOv7、YOLOv8等模型改进 2132

基于A*算法的二维栅格地图路径规划与避障MATLAB仿真

本文将介绍如何使用MATLAB编写基于A*算法的二维栅格地图路径规划与避障的仿真程序。我们可以使用二维数组表示地图,其中每个元素表示一个栅格的状态,例如1表示障碍物,0表示可行走区域。接下来,我们需要定义A*算法的节点类。G值表示从起始节点到当前节点的代价,H值是启发式函数估计的从当前节点到目标节点的代价。算法,我们可以有效地找到起始点到目标点的最短路径,并在仿真中进行可视化展示。算法的基本思路是从起始节点开始,按照一定的启发式函数选择下一个节点,直到找到目标节点或者遍历完所有可行走区域。

ByteWhizX的博客 1273

栈

栈的特性是:先进后出。栈的四个接口是1.栈顶。2.栈底。3.压栈。4.出栈。 递归的实现就是在模拟栈,数组是连续存放的,而链表是离散存放的。 无递归不编程。 #include void ten2two(int num)//十进制转二进制 { if (num != 0) { int m = num % 2; num = num / 2; //printf("%d", m);//

Mr_xiao_1的博客 348

互联网的发展简史—web

互联网是我现在生活所离不开的一个东西,但是你知道互联网的前世今生吗?本文将讲解互联网的发展史,以及很火的元宇宙概念。

yj11290301的博客 3563

顺序表实现栈

对于顺序表,在 C语言 中表现为数组,在进行栈的定义之前,我们需要考虑以下几个点:1)栈数据的存储方式,以及栈数据的数据类型;2)栈的大小;3)栈顶指针;我们可以定义一个栈的结构体,C语言实现如下所示:int// (1)100005// (2)// (4)int top;// (5)(1) 用DataType这个宏定义来统一代表栈中数据的类型,这里将它定义为整型,根据需要可以定义成其它类型,例如浮点型、字符型、结构体 等等;(2)maxn代表我们定义的栈的最大元素个数;

Doctor_Anonymous的博客 1735

基于 FPGA 的 CNN 卷积神经网络之池化层 Verilog 实现

池化层是卷积神经网络(CNN)中的关键组件,用于降低特征图的维度,减少计算量和防止过拟合。常见的池化操作包括最大池化和平均池化。FPGA 提供了高效的并行处理能力,可以加速这些操作。池化层在 CNN 中扮演重要角色,通过降低数据维度提升计算效率。在 FPGA 上实现池化层,可以充分利用硬件资源实现高效的并行计算,有助于提高实时应用中的推理速度。

走向CTO的路上... 1256

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

c语言实现栈(顺序栈,链栈)

c语言实现数据结构栈,顺序栈,链栈

@初阶牛的博客 1668

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

栈的顺序链式及共享栈的实现

1.栈的定义注意栈是个操作受限的线性表栈又被称为后进先出的线性表,简称为LIOF(last in first out)其特殊之处在于限制了这个线性表的插入和删除位置,他始终只在当前栈顶进行操作。数学性质: 个不同的元素进栈,出栈元素的不同排列的个数为 。上述公式也是灰常经典的 ,可采用的数学归纳法去证明。个人感觉顺序栈这块出题也就在卡特兰数出了其他没啥难度基本操作同时栈这个逻辑结构还分为了顺序栈,共享栈和链栈三种实现方式栈的ADT定义: 顺序栈的清空: 顺序栈的销毁: 顺序栈的初始化: 顺序栈的判满操作:

m0_49218627的博客 1240

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

VB摄像头监控

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

数据结构学习笔记——栈的基本知识和顺序存储结构实现栈(顺序栈)

目录一、栈的相关知识二、顺序栈的定义三、顺序栈的初始化四、判断顺序栈是否为空栈五、判断顺序栈是否为满栈六、进栈(插入操作)七、出栈(删除操作)八、读取顺序栈顶元素九、顺序栈的建立一个简单的顺序栈的基本实现例子十、栈的遍历输出 一、栈的相关知识 栈是一种只允许在一端进行插入或删除操作的线性表,它是一种特殊的线性表,其遵循的原则是先进后出(FILO),即后进的元素先被取出来。由于它是一种线性表,所以有两种方式:顺序存储结构和链式存储结构表示,即顺序栈和链式栈。 其中,栈的插入操作称为进栈,栈的删除操作称为

小宇y的博客 9048

栈的顺序实现和链接实现

顺序实现 #include <iostream> using namespace std; typedef char datatype; const int maxsize=100; typedef struct{ datatype data[maxsize]; int top; }sqstack; //初始化 void init_sqstack(sqstack *sq){ s...

ZJH的博客 185

栈的顺序存储及代码实现

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

weixin_36101480的博客 1064

栈的顺序存储结构的简单实现

一、栈的定义 栈( stack)是限定仅在表尾进行插入和删除操作的线性表。 我们把允许插入和删除的一端称为栈顶(top), 另一端称为栈底(bottom), 不含任何数据元素的栈称为空栈。栈又称为后进先出(Last In First Out)的线性表,简称LIFO结构。 栈是一个特殊的线性表,栈元素具有前驱和后继的关系。它是在表尾进行删除和插入操作的。这里的表尾是指栈顶不是栈尾。 栈的插入操作也叫...

qq_43411563的博客 781

基于顺序表实现栈

栈是一种后进先出(LIFO)的特殊的线性表。它限定仅在表尾进行插入或删除,表尾端被称作栈顶,表头端称作栈底。不含元素的空表称为空栈。栈的基本操作有三个,分别为:入栈、出栈。取栈顶元素。下面,我们先来基于顺序表实现栈,即顺序栈。seqstack.h: #pragma once #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #include&lt;...

Cecilia3333的博客 522

栈的实现:顺序栈

栈(stack)是一种很常见的线性结构。它是只允许在一端进行插入和删除操作的线性表,这一端我们称为栈顶。栈的特点常被称为:先进后出(filo-first int last out),或者是后进先出(lifo-last in first out)。这个描述从它的操作特点可以看出,只许在一端进行插入,那么显然,先进的肯定后出。栈的应用,比如系统应用栈来实现递归,图的深度遍历使用了栈,递归要用到栈……。说到它的实现就有两种形式:顺序栈、链栈。其中以顺序栈最为常见。 栈的常见操作:

CCPP Blog 7184

【数据结构】利用顺序表实现栈

数据结构的常见线性表,分别是顺序表,链表,栈,队列本篇给大家带来利用顺序表实现栈和讲解顺序表学完了,在实现栈比较简单,只不过是顺序表的变形而已,主要理解和熟悉栈的特性(后进先出),栈相关OJ题主要对其特性方面出题。

Eraser的博客 685

c++使用顺序结构实现栈

关于栈的介绍在此不用多说了,想必在

lalala 826
上一篇: 单链表的基础实现
下一篇: 收到李老师的Mail,真开心
wayne23
博客等级 码龄21年 18粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值