栈的基本操作 C语言 数据结构

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

大概80行代码,如下,有需要自取。(数据结构教程 第五版 李春葆)
这次实验是顺序栈的操作,其中取栈顶元素的操作根据自己的情况取舍。

实验四 栈基本操作的实现

【实验目的】
1.掌握栈的顺序存储表示。
2.掌握顺序栈的基本操作,包括创建、入栈、出栈等算法。
【实验内容】
编写程序sqstack.cpp,实现顺序栈的各种基本运算(假设栈中的元素类型为char),并在此基础上设计主程序main.cpp,完成如下功能:
1.初始化栈;
2.判断栈是否为空;
3.依次入栈元素a,b,c,d,e;
4.判断栈是否为空;
5.输出出栈序列;
6.判断栈是否为空;
7.释放栈。

#include <stdio.h>
#include <malloc.h>
#define MaxSize 100
typedef char ElemType;
typedef struct
{
ElemType data[MaxSize];
int top; 
}SeqStack; 

 void InitStack(SeqStack *&s) //初始化栈 
{
 s = (SeqStack *)malloc(sizeof(SeqStack));
 s->top = -1;
}

 void DestroyStack(SeqStack *&s)//释放栈 
{
 free(s);
}

 bool StackEmpty(SeqStack *s)//判断是否为空 
{
return (s->top == -1);
}

 bool Push(SeqStack *&s, ElemType e)//进栈 
{
if(s->top == (MaxSize - 1)) 
return false;
 s->top++;
 s->data[s->top] = e;
 return true;
}

 bool Pop(SeqStack *&s, ElemType &e) //出栈 
{
 if(s->top == -1) 
 return false;
 e = s->data[s->top];
 s->top--;
 return true;
}

 bool GetTop(SeqStack *s, ElemType &e)//取栈顶元素 ,实验报告里面没有出现,可有可无,后面的主函数没有引用该函数。 
{
 if(s->top == -1) 
return false;
 e = s->data[s->top];
 return true;
}

int main(int x, char *y[])
{
 ElemType e;
 SeqStack *s;
 printf("栈的基本运算如下:\n");
 printf(" 1.初始化栈\n");
 InitStack(s);
 printf(" 2.栈为%s\n",(StackEmpty(s) ? "空" : "非空"));
 printf(" 3.依次进栈元素a,b,c,d,e\n");
 Push(s, 'a');
 Push(s, 'b');
 Push(s, 'c');
 Push(s, 'd');
 Push(s, 'e');
 printf(" 4.栈为%s\n",(StackEmpty(s) ? "空" : "非空"));
 printf(" 5.出栈序列:");
 while(!StackEmpty(s))
 {
 Pop(s, e);
 printf("%c ", e);
 }
 printf("\n");
 printf(" 6.栈为%s\n",(StackEmpty(s) ? "空" : "非空"));
 printf(" 7.释放栈\n");
 DestroyStack(s);

return 0;
}

运行结果:
在这里插入图片描述
编译器最好用C-free或者DEV c++,工具下载链接见我的专栏里面《数据结构与算法》(单链表的基本操作)。

LIN协议栈 AUTOSAR架构下 状态管理 LIN State Manager 通过对这些状态的管理和转换,实现了对 LIN 总线通信状态的精确控制,以满足汽车电子系统中不同场景的需求。 阅读详情

相关推荐

三菱CNC数据采集实战:从SDK安装到C#代码调试全流程(附完整资源包)

本文为C#开发者提供了三菱CNC数据采集的完整实战指南。详细介绍了从获取并安装核心A2协议SDK、配置Visual Studio开发环境,到理解COM接口文档、封装C#通信类,并构建具备多设备连接与定时采集功能的WinForms应用程序的全流程。文章重点分享了网络调试、异常处理及性能优化等关键实战经验,帮助开发者高效打通工业自动化数据采集链路。

oauth7security的博客 707

李春葆《数据结构》第五版

李春葆《数据结构》第五版 第二章:线性表 实验一:实现顺序表各种基本运算的算法 #include <stdio.h> #include <malloc.h> #define Maxsize 50 typedef char Elemtype; typedef struct {Elemtype data[Maxsize]; int length; }sqlist ; void...

weixin_45092452的博客 1万+

408——计算机组成原理(持续更新)

小数点前的0代表正数,1代表负数。

qq_55202378的博客 1723

顺序栈上机实验题实战(李春葆数据结构第五版p117)

谨以此纪念废荒岁月独立完成! #include<stdio.h> #include<stdlib.h> #include <iostream> typedef char ElemType ; #define MaxSize 50 typedef struct { ElemType data[MaxSize]; int top ; }SqStack;//顺序栈类型 void InitStack(SqStack*&s) { s=(SqStack

m0_46525584的博客 1987

Proteus仿真——电压比较器

电压比较器是一种对输入信号进行鉴别与比较的电路,是组成非正弦波发生电路的基本单元电路。常用电压比较器有如下几种:单限比较器、滞回比较器、窗口比较器、集成电压比较器等。

weixin_58745307的博客 3377

从仿真到实战:PMOS缓启动与栅极泄放电路的优化设计

本文深入探讨了PMOS缓启动与栅极泄放电路的优化设计,通过立创EDA仿真和实物调试,解决了关断速度慢和耐压问题。文章详细介绍了电路改进方案和低功耗优化技巧,为工程师提供了实用的工程实践建议,帮助提升电源开关电路的性能和可靠性。

weixin_28721917的博客 260

数据结构入门,栈的课后习题

写出下列程序段的运行结果(栈中的元素类型是char) main() { SeqStack S; char x,y; InitStack(&S); x='C'; y='K'; Push(&S,x); //S=C,x='C',y='K' (为了方便看,我是右边为栈顶) Push(&S,'A'); //S=CA,x='C',y='K' Push...

weixin_56119039的博客 748

innovus实战攻略 | 用setUsefulSkewMode解锁时序优化的“隐藏技能”!

就像时序优化的“瑞士军刀”,参数虽多,但掌握了分类逻辑后,用起来其实很简单!如果你有更绝的用法,欢迎在评论区分享,大家一起卷起来!简单来说,它就是时序优化的“乾坤大挪移”。通过调整触发器的时钟到达时间,把关键路径的建立时间“借”给非关键路径,从而实现全局时序收敛。别急,这个命令就是你的“时序救星”!(工具最多只能借1.2ns的裕量,防止“借过头”导致新问题!这个参数能帮你兜底!(对关键路径“下死手”,确保优化到位!(设置上限,给工具套上“紧箍咒”!(直接跳过边界,避免优化反噬!(全局管理,防止“借过头”!

weixin_50820814的博客 1357

数据结构教程(第五版 李春葆 上机实验题3 验证性实验)

数据结构上级实验题3

L093117l的博客 2605

【VibeCoding系列】小白入门指南:模型选择、编辑器选择、项目预定全分析

开箱即用:下载安装就能用,不用配 API Key(也可以自己配)Cmd+K 快速修改:选中代码,按 Cmd+K,直接让 AI 修改Cmd+L 对话:侧边栏聊天,支持引用文件和代码@文件引用:输入 @ 就能引用项目中的文件,AI 自动读取上下文Agent 模式:告诉 AI 一个需求,它自动跨文件修改下载地址cursor.com(免费版有额度限制,足够入门)✅下载 Cursorcursor.com),安装打开✅选一个小项目(个人名片页 or Todo List)✅按照七步工作流开干。

十年老程序猿,AI 疯狂研究专家,前沿硬核知识分享 212

利用大规模生物活性挖掘,计算识别针对癌基因驱动蛋白 EGFR、BRAF 与 CDK4 的高亲和力抑制剂

背景:精准癌症治疗需要小分子抑制剂与致瘤蛋白靶点之间的精确匹配。方法:我们使用 Python 及 ChEMBL 数据库 API 开发了一套计算流程,系统性地筛选针对 EGFR、BRAF 与 CDK4 的高亲和力配体。对 IC50 < 1000 nM 的生物活性进行过滤,并检索候选化合物的分子结构(SMILES)以供后续优化。结果:本研究共识别出 [插入总数] 种独特化合物。其中,对 BRAF 激酶而言,我们挑选了一批 IC50 低至 6.0 nM 的高效实验性化合物。

u012133341的博客 96

《数据结构》C语言版 栈的基本操作实现

严蔚敏数据结构C语言实现栈的基本操作 源码如下: #include<stdio.h> #include<stdlib.h> #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 #define OVERFLOW -1 #define OK 1 #define ERROR 0 typedef int Status; typedef int SElemType; typedef struct { SElemType* bas

Cherish599的博客 1万+

鲁棒控制理论 --- H∞ 控制(被裁篇)

鲁棒控制理论 --- H∞ 控制

记录老板的每次pua,分享领导每天的毒鸡汤... 6万+

数据结构严蔚敏 栈基本操作 C语言实现

【数据结构严蔚敏】 第三章 栈基本操作C语言实现 注意部分: 1.*S.top++ = e;= *S=e ; S.top++ ; 若要实现指针所指地址的元素值++,语句应该是(*a)++而不是*a++ 2.关于指针 普通变量如 int a,&amp;amp;amp;a表示变量a所在地址,a表示a所在地址中存储的值 指针变量如 int * a ,a表示a中存储的一个int型变量的地址,*a表示在a存储的地址中存...

欢乐佛的博客 2883

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

数据结构与算法C语言实现——栈的基本操作

数据结构与算法C语言实现——栈的基本操作 雨中漫步 问题:编写程序任意输入栈长度和栈中的元素值,构造一个顺序栈,对其进行清空、销毁、入栈、出栈以及取栈顶元素操作。 #include <stdio.h> #include <stdlib.h> #define MaxSize 100 typedef int ElemType; typedef struct { ElemTyp...

abcwsp的博客 3922

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

数据结构(C语言)读书笔记4:栈及基本操作

1、栈是限定仅在表尾进行插入和删除操作的线性表。是一种特殊的线性表。表头端称为栈底(bottom),表尾端称为栈顶(top)。特点是一种后进先出的线性表。 2、栈的抽象数据类型的定义:     ADT Stack{ 数据对象:D={ai | ai∈ElemSet,i=1,2,。。。。n} 数据关系:R={ | ai-1, ai∈D, i = 2, ..., n } 基本操作: ini

彬彬有礼 1286

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

数据结构c语言栈的基本操作实验报告,C语言数据结构之栈的基本操作

C语言数据结构之栈的基本操作,栈的各种操作C语言数据结构之栈的基本操作一.程序结构图二.算法及其功能函数InitStack(SqStack *S)/*创建栈*/GetTop(SqStack *S,SElemType e) /*取栈顶元素并用e返回*/ Push(SqStack *S,SElemType e) /*插入e为栈顶元素*/ Po...

weixin_29913191的博客 828

【数据结构-栈】C语言实现顺序栈基本操作

C语言实现顺序栈基本操作基本操作顺序栈储存结构初始化顺序栈判断顺序栈是否为空顺序栈的长度清空顺序栈销毁顺序栈压栈n个元素入栈出栈遍历测试代码整合 基本操作 顺序栈储存结构 //定义顺序栈存储结构 typedef struct { int *top; //栈顶指针 int *base; //栈底指针 int stacksize; //顺序栈最大容量 } SqStack; 初始化顺序栈 //初始化顺序栈 Status InitStack(SqStack *s) { (*s).ba

weixin_43716338的博客 3897

详解数据结构-栈的基本操作以及栈数组、栈链表的实现(C语言代码实现)

在开始前,请牢记这句话:栈是一种先进后出的数据结构。栈(stack)是限定仅在表的一端进行操作的数据结构,请联系我们前文所学的,设想一个单链表我们只能够对其链表的表尾结点进行操作,而操作也只能够进行插入一个新的结点与删除最末尾的这个结点两个操作,而这样强限制性的‘链表’,就是我们所说的栈。让我们重新理顺一下定义:💡栈分为数组栈和链表栈,其区别是数组栈使用数组进行功能的模拟,实现较为快速和便利,而链表栈使用链表的思路去设计,实现较为麻烦,但是其稳定不易出错;

Dola的博客 1301

数据结构学习——C语言对栈的基本操作

栈(Stack)是一种常用的数据结构,遵循先进后出(LIFO)的原则,对表尾进行操作,常用于临时存储和撤销等操作,其基本操作包括栈的创建、入栈(也叫压栈Push)、出栈(又称弹栈)、栈的遍历、栈的清空(clear)、栈的销毁(destroy)等。

weixin_63586719的博客 7864

数据结构 栈的基本操作以及C语言实现

栈是限定仅在表尾进行插入或删除操作的线性表。

Misous的博客 221

【数据结构】C语言 栈的基本操作

【数据结构】C语言 栈的基本操作 #include<stdio.h> #include<stdlib.h> #include<string.h> #define MAX 100 typedef struct { char data[MAX]; int top; } Stack; int InitStack(Stack *S)//构造空栈 { S->top=-1; return 1; } int StackEmpty(Stack *S)//判断栈

shannidawang的博客 689

数据结构——栈的基本操作(C语言实现)

#include "stdio.h" #include "malloc.h" //用于malloc、realloc函数 #define size 10 //存储空间分配增量 typedef int type; typedef struct stack { type* base;//栈底元素 type* top;//栈顶元素 int stacksize;//栈的空间大小 }Sqstack; type InitStack(Sqstack* S); //初始化栈函数 type StackEmpty(

weixin_45731724的博客 623

c语言栈的操作字符型数据,C语言数据结构之栈的基本操作.doc

C语言数据结构之栈的基本操作.docC语言数据结构之栈的基本操作程序结构图mainmainGetTopStackEmptyNizhiPopPushStackLengthInitStackGetTopStackEmptyNizhiPopPushStackLengthInitStack算法及其功能函数InitStack(SqStack *S) /*创建栈...

weixin_39589253的博客 218

数据结构源码笔记(C语言):栈的基本操作

#include <stdio.h> #define MaxSize 100 typedef char ElemType; typedef struct { char stack[MaxSize]; int top; } stacktype; void initstack(stacktype *S) { S->top=-1; } void push(stacktype *S,ElemType x) { if (S->top==MaxSize) p

半个冯博士 643

C语言数据结构-栈表的基本操作

int *base;//栈底int *top;//栈顶//可存最大元素数量}Sqstract;当栈不存在时(建立前/销毁后),base为NULL,栈顶的初值等于栈底。栈的顺序实现时,给base分配存储空间,但栈底不能动,只能指向栈底元素,所以不能通过base来对栈内元素进行操作。top为栈顶指针,始终指向末尾元素的下一位,在栈不为空的情况下,*(top-1)为栈顶元素的值。栈可以追加存储空间。

2301_79975618的博客 569
上一篇: 数据结构 C语言 实现单链表的各种基本操作
下一篇: C#案例应用(一)-----------销售管理系统
思维矩阵K
博客等级 码龄7年 605粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

思维矩阵K

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值