栈的基本操作

栈的定义及基本操作 图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

CTF密码学奇技淫巧:当Base64遇到ROT13与Atbash

本文深入解析CTF竞赛中Base64、ROT13与Atbash的复合编码技术,提供Python实现与CyberChef可视化处理方案,帮助选手掌握密码学题目的解题技巧。通过NewStarCTF2025实战案例,对比脚本化与可视化工具的优劣,提升Web安全竞赛中的编码处理能力。

weixin_29001683的博客 509

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

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

夜微雨的博客 809

保姆级教程:在华为云Ubuntu服务器上快速搭建RAGflow开发环境(避坑指南)

本文提供了一份在华为云Ubuntu服务器上快速搭建RAGflow开发环境的保姆级教程。针对网络拉取镜像等常见问题,详细介绍了从服务器选型、系统优化、Docker配置到RAGflow部署与验证的全流程,并给出生产环境调优建议,帮助开发者高效避坑,快速构建企业级应用环境。

weixin_29250403的博客 86

Windows 11安装 SQLServer 2008 R2 失败问题处理

Windows 11安装SQL Server 2008 R2失败解决方案 由于Windows 11移除了对PowerShell 2.0的支持,导致SQL Server 2008 R2安装失败。经过多次尝试,最终通过**方案六(修改注册表模拟PowerShell 2.0环境)**成功安装。其他可行方案包括: 使用SP3集成版安装包 通过命令行跳过检查(/SUPPRESSPOWERShellCHECK参数) 创建特殊配置文件 替代方案建议: 使用Docker容器运行 在虚拟机中安装 升级到新版SQL Serve

oDengWei的博客 7187

栈和队列的基本操作

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

零基础学习simulink-- 基于自适应模糊PID控制的直流电机速度控制系统

通过上述代码实现,您可以逐步创建和搭建一个基于自适应模糊PID控制的直流电机速度控制系统。该系统能够根据电机的状态和误差实时调整PID参数,确保电机速度稳定在设定范围内。自适应模糊PID控制具有较强的鲁棒性和适应性,能够在存在不确定性和扰动的情况下提供快速且精确的控制性能。Simulink提供了强大的建模和仿真工具,使得控制系统工程师能够快速构建复杂的控制算法,并将其应用于实际工程中。直流电机建模:建立直流电机的动态模型,包括电枢电压、电流、转速和负载扭矩。自适应模糊PID控制器设计。

amy_mhd的博客 413

栈—栈的定义和基本操作

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

m0_71137624的博客 1523

SpringBoot实战教程-springboot概论

Spring Boot 是一个快速开发框架,能够快速的整合第三方框架,简化XML配置,全部采用注解形式,以及自动配置。内置web容器,帮助开发者能够实现快速开发,简化了应用系统的初始搭建以及开发过程。

鸟哥哥的专栏 4155

python:实现brutefore破解wifi(附完整源码)

python:实现brutefore破解wifi(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 5720

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

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

ChanJose的博客 3万+

超临界二氧化碳发电技术深度解析

超临界二氧化碳发电技术正在突破传统热电转换的物理边界。作为新一代发

硬核科技 602

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

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

辞树 902

DAF-Net:动态注意力红外-可见光图像融合

DAF-Net 红外-可见光融合链路:IR/VIS 双分支 (Conv+ResBlock → 64ch) → DynamicAttentionFusion (Cat→Sigmoid→加权) → 重建 (Conv→Sigmoid)。TNO 上 SSIM=0.782 (vs IR), 0.734 (vs VIS), 参数量仅 218K。核心贡献:轻量动态注意力门控, 无监督 SSIM+MSE 损失不需要配准 ground truth。

FJN110的博客 320

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

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

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

m0_53679998的博客 2万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

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

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

qq_52833138的博客 1221

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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

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

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

目录一.栈的定义二.栈的特点三.栈的理解四.链栈引入五.链栈定义六.链栈的结构体设计七.链栈的基本操作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、付费专栏及课程。

余额充值