栈的基本操作

栈的定义及基本操作 图1 栈的表示假设三个元素a,b,c入栈顺序为a,b,c,那么出栈顺序有几种? 阅读详情

本次程序是以实现栈的基本操作为目的(主要包括栈的初始化、入栈、出栈、取栈顶元素和销毁栈):

程序代码:
#include<stdio.h>

#include<stdlib.h>

#define SeqStackType char
#define SeqMax 1000
typedef struct{
SeqStackType data[SeqMax];
size_t size;
}SeqStack;
//初始化
void SeqStackInit(SeqStack* seq){
seq->size = 0;
}
//销毁
void SeqStackDestroy(SeqStack* seq){
seq->size = 0;
}
//入栈
void SeqStackPush(SeqStack* seq,SeqStackType value){
if(seq == NULL){
//非法输入
return;
}
seq->data[seq->size] = value;
++seq->size;
}
//出栈
void SeqStackPop(SeqStack* seq,SeqStackType* value){
if(seq == NULL){
//非法输入
return;
}
if(seq->size == 0){
//空栈
return;
}
*value = seq->data[seq->size-1];
--seq->size;
}
//取栈顶元素
int GetStackTop(SeqStack* seq,SeqStackType* value){
if(seq == NULL){
//非法输入
return 0;
}
if(seq->size == 0){
//空栈
return 0;
}
*value = seq->data[seq->size-1];
return 1;
}
void printStack(SeqStack* seq,char * str){
printf("\n*******%s************\n",str);
size_t i=0;
for(;i<seq->size;i++){
printf("%c ",seq->data[i]);
}
printf("\n");
}

检测代码:
void teststack(){
SeqStack seq;
int ret;   //接收成功与否的返回值
SeqStackType value;
SeqStackInit(&seq);
printStack(&seq,"初始化");
SeqStackPush(&seq,'a');
SeqStackPush(&seq,'b');
SeqStackPush(&seq,'c');
SeqStackPush(&seq,'d');
ret = GetStackTop(&seq,&value);
printf("except: 1   actual: %d\n",ret);
printf("except: d   actual: %c\n",value);
printStack(&seq,"入栈四个元素");
SeqStackPop(&seq,&value);
printStack(&seq,"出栈一个元素");
printf("value expect: d  actual: %c\n",value);
ret = GetStackTop(&seq,&value);
printf("except: 1   actual: %d\n",ret);
printf("except: d   actual: %c\n",value);
SeqStackPop(&seq,&value);
printStack(&seq,"出栈俩个元素");
printf("value expect: c  actual: %c\n",value);
ret = GetStackTop(&seq,&value);
printf("except: 1   actual: %d\n",ret);
printf("except: d   actual: %c\n",value);
SeqStackPop(&seq,&value);
printStack(&seq,"出栈三个元素");
printf("value expect: b  actual: %c\n",value);
ret = GetStackTop(&seq,&value);
printf("except: 1   actual: %d\n",ret);
printf("except: d   actual: %c\n",value);
SeqStackPop(&seq,&value);
printStack(&seq,"出栈四个元素");
printf("value expect: a  actual: %c\n",value);
ret = GetStackTop(&seq,&value);
printf("except: 0   actual: %d\n",ret);
SeqStackPush(&seq,'c');
SeqStackPush(&seq,'c');
SeqStackPush(&seq,'c');
SeqStackPush(&seq,'c');
printStack(&seq,"入栈四个元素");
SeqStackDestroy(&seq);
printStack(&seq,"销毁");
}


int main(){
teststack();
}

检测结果:

[chaiyandong@MiWiFi-R1CL-srv shujujiegou]$ ./stack


*******初始化************


except: 1   actual: 1
except: d   actual: d


*******入栈四个元素************
a b c d 


*******出栈一个元素************
a b c 
value expect: d  actual: d
except: 1   actual: 1
except: d   actual: c


*******出栈俩个元素************
a b 
value expect: c  actual: c
except: 1   actual: 1
except: d   actual: b


*******出栈三个元素************
a 
value expect: b  actual: b
except: 1   actual: 1
except: d   actual: a


*******出栈四个元素************


value expect: a  actual: a
except: 0   actual: 0


*******入栈四个元素************
c c c c 


*******销毁************

数据结构-栈操作-用链表实现栈基本操作 原文链接:https://www.goroutine.me/datastructure/2019/06/11/data-structure-stack-based-on-linkedlist-01.html 数据结构中的栈基本操作,我这里是也是为了学习记录我自己的书写的代码过程.其中包含取栈的新建,新增元素,删除元素,取指定索引值,向元素尾部追加元素 等等! 1、 场景 1.1、 中文描述 数据结... 阅读详情

相关推荐

实验三 栈的基本操作

实验三 栈的基本操作一、实验目的 1.掌握栈的存储结构的表示和实现方法。 2.掌握栈的入栈和出栈等基本操作算法实现。 3.了解栈在解决实际问题中的简单应用。二、实验内容 1.建立顺序栈,并在顺序栈上实现入栈和出栈操作。 2.建立链栈,并在链栈上实现入栈和出栈操作。三、实验要求 1.建立顺序栈,并在顺序栈上实现入栈和出栈操作。 (1)根据输入的栈中元素个数n和各元素值建立一个顺序栈

沉默的大多数 2万+

栈的基本操作及应用

/*栈的基本操作及实现表达式求值*/ #include<stdio.h> #include<stdlib.h> #include<windows.h> #define STACK_INIT_SIZE 100 //存储空间初始分配量 #define STACKINCREMENT 10 //存储空间分配增量 #define OK 1 #define OVERFLOW 0 #define ERROR 0

离歌笑的博客 1051

手把手用瑞萨E1仿真器调试RH850 CAN通信:从报文收发到底层寄存器监控

本文详细介绍了使用瑞萨E1仿真器调试RH850 CAN通信的全过程,包括硬件连接、CS+开发环境配置、CAN控制器寄存器解析以及双通道网关实战开发。通过实战案例和错误诊断技巧,帮助开发者快速掌握RH850F1L的RS-CAN控制器应用,提升车载网络开发效率。

weixin_30919429的博客 163

[数据结构]---实现栈及栈的基本操作(使用顺序表实现)

栈: 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out即后进先出)的原则。 栈的基本结构: 栈的基本操作: 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。 出栈:栈的删除操作叫做出栈。出数据也在栈顶。 栈实现方式: 链表...

夜微雨的博客 809

微信h5 支付,已经获得weixin://wap/pay?prepayid,但是无法调起微信客户端支付

结果几个接口,最终获得到到一直包含调起微信客户端的支付链接 但是直接打开这个页面,却不能调起微信客户端支付,原因是,在打开新页面的时候,需要设置a.rel = "noreferrer"; <body> <a href="javascript:void(0)" onclick="openNewWindowNoreferrer(this)">点击支付</a&...

qq_31683775的博客 4万+

TransUnet官方代码训练自己数据集(彩色RGB3通道图像的分割)

官方代码:https://github.com/Beckschen/TransUNet 目的:训练5个类别的汽车部件分割任务(测试在另一篇博客中) 实现效果: 1. github下载代码,并解压。 项目里的文件可能跟你下载的不一样,不急后面会讲到! 2. 配置数据集(尽最大努力还原官方数据集的格式)。 通常自己手上的数据集分images和labels文件夹,分别存放着原始图像和对应的mask图像,如下图所示; mask图像中的像素有0,1,2,3,4 分别代表背景,车身,轮子,车灯,窗户,一共五个

qq_37652891的博客 5万+

栈和队列的基本操作

1.栈 入栈:push(); 出栈:pop(); 获取栈顶元素:peek(); 判空:empty(); import java.util.Stack; public class Main { public static void main(String[] args) { //入栈 Stack<String> st = new Stack<>(...

qq_42794545的博客 196

HP MSA 2050磁盘阵列配置步骤

一、盘阵与服务器直接连接 1.1 单控制器配置:一台服务器/ 一个 HBA/ 单路径 1.2 双控制器配置:两台服务器/ 每台服务器一个 HBA/ 双路径 二、通过交换机(一般光纤交换机) 2.1 双控制器配置:两台服务器/ 两台交换机 三、配置MSA2050 3.1在完成硬件安装后,可以访问控制器模块的基于 Web 的管理界面 SMU (存储 管理实用程序),以便监视和管理此存储系统。 首先...

jw5493的博客 1万+

栈—栈的定义和基本操作

栈的定义,基本操作和代码实现

m0_71137624的博客 1523

Gartner DSG数据安全治理 架构及解读

目录背景:架构图: 解释:英文解释:(自上而下)平衡业务与风险、威胁、合规之间的关系(5个维度之间的平衡)优先处理数据集制定安全策略实施安全工具策略配置同步从上到下,从需求调研开始实施数据安全治理。千万不要跨过数据摸底、治理优先级分析、制定治理整体策略,而直接从技术工具开始对数据安全进行治理。 先明确选择需要治理的对象,优先选择重要数据进行数据安全治理工作。可以通过数据梳理、分类分级等手段,完成数据资产盘点和筛选,在纷杂的数据中理清头绪。

锦慈的技术博客 7218

《深入掌握MongoDB数据库》 - 专栏介绍和目录

本专栏系统讲解MongoDB从基础到高级的全栈知识,涵盖安装配置、核心操作、性能优化、安全运维等核心内容。基础部分包括CRUD操作、数据类型、查询语法等入门知识;进阶部分深入索引优化、聚合查询、事务处理等高级特性;核心原理解析存储引擎与数据格式;安全运维则聚焦访问控制、认证机制、审计日志等企业级实践。通过实战案例与最佳实践,帮助开发者全面掌握MongoDB在不同场景下的应用,适合各层次技术人员系统学习。

数据知道的博客 2997

C++ 栈(Stack)的基本操作

一、栈的定义:        一种可以实现“先进后出(后进先出)”的存储结构        生活中的例子:玩具枪的子弹夹,后进来的子弹先射出。         二、分类:                 静态栈:使用数组                 动态栈:链表 三、算法:                出栈:push                 压栈:pop     ...

ChanJose的博客 3万+

Trustzone/TEE/安全 面试100问-目录

关键词:cache学习、mmu学习、cache资料、mmu资料、arm资料、armv8资料、armv9资料、 trustzone视频、tee视频、ATF视频、secureboot视频、安全启动视频、selinux视频,cache视频、mmu视频,armv8视频、armv9视频、FF-A视频、密码学视频、RME/CCA视频、学习资料下载、免费学习资料、免费 周贺贺,baron,代码改变世界ctw,Arm精选, 资深安全架构专家,十年手机安全/SOC底层安全开发经验。擅长trustzone/tee安全产品的设计

baron-周贺贺-代码改变世界ctw 652

数据结构——栈基本操作的实现

栈的基本操作包括了:入栈、出栈、判断栈是否为空、初始化等。 顺序栈的实现: 利用顺序表实现栈的基本操作: #include<bits/stdc++.h> using namespace std; #define clr(a) memset(a, 0, sizeof(a)) #define line cout<<"----------"<<endl;...

辞树 902

【数据分析】宏基因组alpha和beta多样性分析和差异物种筛选案例

本教程为读者呈现了宏基因组α和β多样性分析的完整案例。通过实际数据和详细步骤,读者可以深入理解这两种分析方法及其在R语言中的实现过程。教程中不仅提供了清晰的代码示例,还对每一步骤进行了详细解释,使读者能够轻松跟随并掌握分析技巧。无论是初学者还是有一定基础的研究者,都能通过本教程快速上手宏基因组多样性分析,为微生物组学研究提供有力支持。

专注生信领域 2211

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

链栈的基本操作(超详细)

本文参考王卓老师的数据结构视频和严蔚敏老师的《数据结构》栈:操作受限的线性表,限定仅在表尾进行插入和删除操作的线性表,即后进先出。这一端被称为栈顶,相对地,把另一端称为栈底。链栈:用链式结构存储的栈(我实际用的是不带头结点的单链表)例子:类似子弹压入弹夹,后放入的子弹可以先从弹夹弹出来。栈是一种操作受限的线性表,虽然操作受限,但是与线性表有点类似,只不过栈的插入和删除都在表尾而已。我实现的链栈其实与不带头节点的链表有很大关系,各位也可以参考下链表来学习链栈。

m0_53679998的博客 2万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

头歌链栈的基本操作及应用

栈的链式存储结构是采用某种链表结构,栈的链式存储结构简称为链栈。这里采用单链表作为链栈,该单链表是不带头结点的。不带头结点的单链表如图所示:如何改造不带头结点的单链表实现栈的链接存储?将链表头作为栈顶(前插法),方便入栈和出栈操作,如图所示:可以用不带头结点的单链表存储链栈,设计初始化栈、判断栈是否为空、进栈和出栈等相应算法。对不带头结点的单链表,在进行插入、删除、查值等操作运算时需要对表首进行特殊处理。下面先复习不带头结点的单链表的基本操作。不带头结点的单链表基本操作。

qq_52833138的博客 1221

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

数据结构 栈-链栈及基本操作

目录一.栈的定义二.栈的特点三.栈的理解四.链栈引入五.链栈定义六.链栈的结构体设计七.链栈的基本操作7.1链栈的初始化7.2链栈判空7.3链栈入栈7.4链栈出栈 一.栈的定义 栈是限定仅在表尾进行插入和删除操作的数据结构(受到限制的线性表)。 我们把允许插入和删除的一端称为栈顶,另一端称为栈底,不含任何元素为空栈。 二.栈的特点 后进先出 比如word,浏览器网页等一系列软件中,都有撤销的操作,就是利用栈的这种方式来实现的,可能不同软件的代码不同,但是他们的原理是一样的均为:后进先出。 三.栈的理解

Mi-ronin的博客 6568

栈的基本操作及其应用

文章目录一、栈的基本概念二、栈的基本操作1.创建一个栈2.初始化栈3.销毁栈4.判定S是否为空5.求栈的长度6.取栈顶元素7.遍历打印栈8.入栈操作9.出栈操作三,完整代码四,栈的应用 一、栈的基本概念 栈(stack)是限定仅在表尾进行插入和删除操作的线性表 我们把允许插入和删除的一端成为栈顶,另一端为栈底,不含任何数据元素的栈称为空栈。特点是“先进后出(LIFO结构)” 二、栈的基本操作 1.创建一个栈 代码如下(示例): #include <stdio.h> #include &l

m0_61452966的博客 4083

链栈的基本操作

/*这里采用的是带有头节点(s)的单链表实现: 链栈的4要素: (1)栈空条件:s->next=NULL (2)栈满条件:不考虑 (3)进栈e操作:将包含e的节点插入到头节点之后 (4)退栈操作:取出头节点之后的节点的元素并删除之*/ //链栈中的数据节点的类型LiStack定义如下: #include<iostream> #include<...

weixin_43933077的博客 613

栈的基本操作(详细)

栈的各种基本操作(详细),不看会后悔

qq_43346784的博客 1万+
上一篇: 带头结点双向链表的操作(2)
下一篇: 基于顺序表的队列基本操作实现
CYD、孤狼
博客等级 码龄9年 24粉丝 129原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值