数据结构(严蔚敏)之三——顺序栈之c语言实现

1332:【例2-1】周末舞会C++ 【题目描述】 假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队。跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴。规定每个舞曲能有一对跳舞者。若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。现要求写一个程序,模拟上述舞伴配对问题。 【输入】 第一行两队的人数; 第二行舞曲的数目。 【输出】 配对情况。 【输入样例】 4 6 7 【输出样例】 1 1 2 2 3 3 4 4 1 5 2 6 3 1 代码: #include<bits/ 阅读详情

实验:

编写一个程序实现顺序栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能:

(1)初始化顺序栈

(2)插入元素

(3)删除栈顶元素

(4)取栈顶元素

(5)遍历顺序栈

(6)置空顺序栈

分析:

栈的顺序存储结构简称为顺序栈,它是运算受限的顺序表。

对于顺序栈,入栈时,首先判断栈是否为满,栈满的条件为:p->top= =MAXNUM-1,栈满时,不能入栈; 否则出现空间溢出,引起错误,这种现象称为上溢。

出栈和读栈顶元素操作,先判栈是否为空,为空时不能操作,否则产生错误。通常栈空作为一种控制转移的条件。

注意:

(1)顺序栈中元素用向量存放

(2)栈底位置是固定不变的,可设置在向量两端的任意一个端点

(3)栈顶位置是随着进栈和退栈操作而变化的,用一个整型量top(通常称top为栈顶指针)来指示当前栈顶位置

顺序栈的实现:

#include <stdio.h>
#include <malloc.h>

typedef int SElemType;
typedef int Status;
#define INIT_SIZE 100
#define STACKINCREMENT 10
#define Ok 1
#define Error 0
#define True 1
#define False 0
typedef struct
{
	SElemType *base;
	SElemType *top;
	int stacksize;
}SqStack;

//初始化栈
Status InitStack(SqStack *s)
{
	s->base = (SElemType *)malloc(INIT_SIZE * sizeof(SElemType));
	if(!s->base)
	{
		puts("存储空间分配失败!");
		return Error;
	}
	s->top = s->base;
	s->stacksize = INIT_SIZE;
	return Ok;
}

//清空栈
Status ClearStack(SqStack *s)
 {
   s->top = s->base;
   return Ok;
 }

//栈是否为空
Status StackEmpty(SqStack *s)
 {
   if(s->top == s->base)
     return True;
   else
     return False;
 }

//销毁栈
Status Destroy(SqStack *s)
{
	free(s->base);
	s->base = NULL;
	s->top = NULL;
	s->stacksize=0;
	return Ok;
}

//获得栈顶元素
Status GetTop(SqStack *s, SElemType &e)
{
	if(s->top == s->base) return Error;
	e = *(s->top - 1);
	return Ok;
}

//压栈
Status Push(SqStack *s, SElemType e)
{
	if(s->top - s->base >= s->stacksize)//栈满
	{
		s->base = (SElemType *)realloc(s->base, (s->stacksize + STACKINCREMENT) * sizeof(SElemType));
		if(!s->base)
		{
			puts("存储空间分配失败!");
			return Error;
		}
		s->top = s->base + s->stacksize;//修改栈顶位置
		s->stacksize += STACKINCREMENT;//修改栈长度

	}
	*s->top++  = e;
	return Ok;
}

//弹栈
Status Pop(SqStack *s, SElemType *e)
{
	if(s->top == s->base) return Error;
	--s->top;
	*e = *(s->top);
	return Ok;
}

//遍历栈
Status StackTraverse(SqStack *s,Status(*visit)(SElemType))
 {
     SElemType *b = s->base;//此处不能直接用base或top移动,即不能改变原栈的结构
     SElemType *t = s->top;
   while(t > b)
     visit(*b++);
   printf("\n");
   return Ok;
 }

Status visit(SElemType c)
 {
   printf("%d ",c);
   return Ok;
 }

测试代码:

int main()
{
	SqStack a;
	SqStack *s = &a;
	SElemType e;
	InitStack(s);
	int n;
	puts("请输入要进栈的个数:");
	scanf("%d", &n);
	while(n--)
	{
		int m;
		scanf("%d", &m);
		Push(s, m);
	}
	StackTraverse(s, visit);
	puts("");
	puts("8进栈后:");
	Push(s, 8);
	StackTraverse(s, visit);
	puts("");
	Pop(s, &e);
	printf("出栈的元素是:%d\n", e);
	printf("元素出栈后事实上并没有清除,依然存在于内存空间,所谓的出栈只是指针移动,出栈的元素是%d\n", *s->top);//判断出栈后元素是否还存在于内存中
	Destroy(s);
	return 0;
}

运行结果:



实现顺序栈的各种基本运算的算法 阅读详情

相关推荐

【数据结构系列】严蔚敏C语言版算法实现并附带详细注释(逐步更新)

数据结构在编程过程中是不可或缺的,是举足轻重的,想要编写出一个好的程序,学好数据结构这门学科是必经之路。本文是各种数据结构实现的目录文章,我会在我学习数据结构这门课程的过程中逐步更新其中的内容。.................................

weixin_65334260的博客 5025

顺序栈(数组实现)

【代码】顺序栈(数组实现)

weixin_52119087的博客 534

《数据结构:c语言版》(严蔚敏)知识点整合

数据结构是相互之间存在一种或多种特定关系的数据元素的集合, 《数据结构》让读者认识到了各种数据结构在处理数据上的优缺点, 理解掌握相关数据结构的具体操作,在结构的基础上添加好的算法,就能够更好的处理和利用数据。 算法的时间空间复杂度: 线性表: 线性表的顺序存储结构 用一组连续的存储单元依次存储线性表的数据元素。 特点:线性表的顺序存储是一种随机存取的存储结构。 随机存取:即读写存储的消息的时间与存储的位置无关 相关操作: 2.插入: 3.查找 4.删除 1.初始化 2.单链表的插入 3.查找 4.

目标检测专栏持续更新中,改进YOLO系列通用,适用v5、v7、v8、所有博客均是团队原创博客,所有文章禁止转载,违者必究。 1万+

编写一个程序,实现顺序栈的各种基本运算。

完成如下功能: (1)初始化栈s; (2)判断栈s是否非空; (3)依次进栈元素a,b,c,d,e (4)判断栈s是否非空; (5)输出栈长度; (6)输出从栈顶到栈底元素; (7)输出出栈序列; (8)判断栈s是否非空; (9)释放栈。 代码: #include"iostream" #include"malloc.h" using namespace std;

Stay hungry 1万+

编写一个程序实现顺序栈的各种基本运算(假设顺序表的元数基本类型为Char)

/* *Copyright (c) 2016, 烟台大学计算机学院 *All rights reserved. *文件名称:main.cpp *作者:张旺华 *完成日期: 2016 年 7 月 1 日 *版本号:v1.0 *问题描述:编写一个程序实现顺序栈的各种基本运算(假设顺序表的元数基本类型为Char) * */ #include #include #define Max

张旺华的博客 1万+

数据结构之顺序栈:严蔚敏C语言实现详解

本文还有配套的精品资源,点击获取 简介:数据结构是计算机科学核心课程,专注于数据的有效存储和操作。栈是数据结构中的基础,其后进先出(LIFO)特性使得它在算法实现中非常重要。顺序栈是栈的一种实现,通过数组在内存中连续存储数据。C语言中顺序栈的实现包括元素的压栈、弹栈和查看栈顶元素等操作。本教程详细介绍了严蔚敏教授的顺序栈实现方法,包括栈的定义、初始化、操作方法和错误处理等。...

weixin_31715353的博客 1439

数据结构C语言版-严蔚敏 笔记及源码(3)顺序栈的表示和实现

栈 栈和线性表相似,栈也有两种存储表示方法。 顺序栈 链栈 栈(Stack)是限定仅在表尾进行插入或删除操作的线性表。因此,对栈来说,表尾端有其特殊含义,称为栈顶(top),相应的,表头端称为栈底(bottom)。栈的修改时按后进先出的原则进行的。因此栈又称为后进先出线性表 顺序栈的操作有: InitStack(&S) #栈的初始化 DestortStack(&S) #销毁栈 ClearStack(&S)

SuperYong的博客 586

FreeRTOS OTA实战:从Bootloader设计到安全升级的完整流程(附MQTT示例代码)

本文详细介绍了在FreeRTOS系统中实现安全OTA固件升级的完整流程。内容涵盖从Bootloader设计、存储分区规划到与MQTT协议集成的OTA Agent任务开发,并重点解析了固件签名验证、防回滚等关键安全机制,为嵌入式物联网设备提供了一套高可靠性的远程升级解决方案。

weixin_29248653的博客 161

数据结构考研自用——静态顺序栈的实现【王道/严蔚敏C语言版】

静态顺序栈的c语言实现

Like___This的博客 488

sklearn2pmml xgboost缺失值(missing)处理的坑

sklearn2pmml xgboost缺失值(missing)如何处理 今天同事在部署xgboost pmml模型时遇到了大坑,线上spark预测和本地python预测结果怎么都不对应,记录一下处理过程。 看了下同事的代码,貌似也没有问题 from sklearn2pmml import PMMLPipeline from sklearn2pmml import sklearn2pmml fro...

Skycrab 8969

VsCode安装和配置c/c++环境(超完整,小白专用)

1. vsCode配置C/C++环境 1. vsCode下载和安装 1. 下载Microsoft vsCode [vsCode在这里插入图片描述官网下载: https://code.visualstudio.com/ 2. 安装vsCode 3. 下载中文插件 我这边已经下载过,刚卸载但是没有重启编译器,所以界面显示了中文 2. MinGW编译器下载和配置 1. 下载MinGW 在线安装——下载MinGW-W64-install.exe(速度慢) 下载压缩包——×86_64-posix-

黄化的多多 60万+

数据结构(c语言版)严蔚敏---顺序栈的操作实现

【代码】数据结构(c语言版)严蔚敏---顺序栈的操作实现。

guyuedongfang的博客 286

MATLAB下pdf文件操作读取示例

当遇到一些需要大量数据的项目,数据的读取与储存显得尤为重要。怎样把数据从其他格式的文件中读取,并运用到程序中是很多时候我们要解决的问题。对于平常的.txt,和.xlsx文件,MATLAB有对应的函数帮助读取,但是遇到pdf文件时MATLAB很难读取内容。本文以一个操作实例提供了一个从pdf文件中读取数据的方法。

UESTC 五高考3模拟的博客 6558

数据结构(c语言版)严蔚敏 代码实现

此文章代码主要参考严蔚敏(c语言版)第二版教材和优快云上的博文完成。此代码为可执行代码,持续修改更新中。

guyuedongfang的博客 617

MATLAB实战:用ARMAX模型搞定电力系统惯量评估(附完整代码)

本文详细介绍了如何利用MATLAB中的ARMAX模型进行电力系统惯量评估,解决新能源占比提高带来的系统惯量下降问题。通过系统辨识技术,从电网运行数据中准确提取惯量参数,并提供完整的代码实现,帮助工程师快速应用于实际工程。

peach的博客 637

2024年下半年网络规划设计师论文真题

3、深入论述自身参与的工业网络是如何实施的,为实现制造业的智能化,如何实现数据的跨系统互通,促进各种工业数据的充分流动和无缝集成以及数据安全。3、结合自身参与的网络建设,详细叙述针对该网络“去NAT”的规划和设计方案。4、在实施过程中遇到的问题以及如何处理,项目实施后的效果和评价。2、大型园区网络“去NAT”改造和业务融合的整体架构。1、“网络去NAT”对推进ipv6演进和应用的意义。4、改造过程中遇到的问题及解决方案。2、简要叙述自身参与的制造网络建设。1、网络规划在智能制造中的意义。

鹿鸣天涯 2367

严蔚敏版数据结构(C语言版)算法实现代码

严蔚敏版数据结构(C语言版)算法实现代码数据结构(C语言版)代码实现线性表顺序表 数据结构(C语言版)代码实现 部分采用C++的语法实现 线性表 顺序表与链表 顺序表 代码如下: #include <bits/stdc++.h> using namespace std; #define MaxSize 100 #define ElemType int #define Status int #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10

weixin_45741097的博客 1万+

HandwrittenMathFormulaRecognition:基于YOLOv8的手写数学公式识别系统

输入:包含手写数学公式的图像(拍摄的板书、作业纸等)输出:对应的数字文本形式的数学公式(如LaTeX格式或文本表达式)标准的手写数学表达式数据集,包含在线轨迹及图片,广泛用于公式识别研究。包含近10万对公式图片及对应的LaTeX标注,适合训练公式识别模型。MathBrush公开手写数学公式图像数据集,含多种书写风格。手写数字与符号数据集(MNIST及其扩展)用于基础数学符号的训练。

YOLO 283

数据结构--第三章 栈和队列

注:根据严蔚敏等人的数据结构(C语言版)(第二版)记录,用于自己的复习记录。

m0_48858329的博客 1243

用Python绘制DCA曲线详解及示例代码

在这篇文章中,我们将详细解释如何使用Python绘制DCA曲线,并提供示例代码。通过使用上述的示例代码和解释,你可以自己尝试不同的投资金额、期数和增长率来绘制自定义的DCA曲线。通过运行上述代码,我们将得到一个绘制了DCA曲线的图表。该图表将显示出DCA投资策略在给定投资金额、投资期数和增长率下的投资价值随时间的变化情况。在上述代码中,我们使用一个循环来计算每个投资期的DCA曲线值。现在,我们可以使用上述函数来计算DCA曲线的值,并将其绘制成图表。最后,我们返回计算得到的DCA曲线值列表。

TechPr的博客 1410

OV9734 DATASHEET,完整规格书

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

栈的操作

从今天开始,重写《数据结构C语言版:严蔚敏》一书里的程序。毕竟数据结构是一个程序员的内功。以后定期每隔一天更新一次。若对数据结构不熟悉的同学可以一看,现在先写了顺序栈的代码 P.S. 所有代码在C-free 5.0上通过编译运行,程序里用到一个common.h的头文件,里面保存一些常用的宏定义   栈的特性:后进先出。。。 以下是顺序栈的结构:SeqStack.h   #define ...

yulchaochow的专栏 198

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

数据结构

数据结构 栈的顺序存储表示 最近在学严蔚敏老师的数据结构,有些代码片段保存下来   #include&lt;stdio.h&gt; #include&lt;malloc.h&gt; #define STACK_INIT_SIZE 4 #define STACKINCREMENT 2 // data typedef int SElemType; typedef struct { ...

nonoiamyoufather的博客 175

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

栈的c语言实现

栈的基本概念栈是限定仅在表尾进行插入或删除的操作.因此,对于栈来说,表尾端有其特殊的含义,称为栈顶(top),相应的表头端称为栈底(bottom).不含元素的空表称为空栈. 栈的修改是按照后进先出的原则进行的,又成为LIFO结构.插入元素的操作称为入栈,删除栈顶元素的操作成为出栈.栈的基本操作有: 插入 删除 初始化 判空 取栈顶元素 清除栈 销毁栈 遍历栈 栈的长度 栈的表示和实现栈有两种表示方

林贻民的博客 1899

顺序栈的实现(严蔚敏版)

顺序栈的实现(严蔚敏版)

weixin_72792264的博客 246

2021-10-16【严蔚敏数据结构代码实现合集】【c语言学习必备】

线性表 2021-9-14【数据结构/严蔚敏】【顺序表】【代码实现算法2.1-2.7】 2021-9-18【数据结构/严蔚敏】【单链表】【代码实现算法2.8-2.12】 2021-9-18【数据结构/严蔚敏】【静态链表】【代码实现算法2.13-2.17】 2021-9-19【数据结构/严蔚敏】【双向链表】【代码实现算法2.18-2.19】 2021-9-19【数据结构/严蔚敏】【带头结点的线性表】【代码实现算法2.20-2.21】 2021-9-19【数据结构/严蔚敏】【一元多项式的表示及相加、相减、相乘

eternity_memory的博客 1万+
上一篇: 数据结构(严蔚敏)之六——链式队列c语言实现
下一篇: 数据结构(严蔚敏)之四——链栈之c语言实现
君只见独不见
博客等级 码龄12年 99粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值