【数据结构】【王道】【栈与队列】顺序栈的实现及基本操作(可直接运行)

数据结构第三章——栈与队列 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考栈是只允许在表的一端进行插入和删除操作的线性表,队列也是一种操作受限的线性表,只允许在表的一端进行插入,在表的另一端进行删除。操作特性时先进先出。循环队列即将队列想像成为一个环状空间(但实际上该怎么存还怎么存),从逻辑上将队列视为环初始时:Q.front=Q.rear=0; 阅读详情

总目录


各部分的解释已经以注释形式写于代码中。

1.基本操作

1.1 结构体定义

typedef struct {    // 定义顺序栈
    int data[MaxSize];  // 静态数组存放栈中元素
    int top;    // 栈顶指针:指向目前栈顶元素的位置
} SeqStack;

1.2 初始化

// 初始化
void InitStack(SeqStack &S) {
    // 初始化栈顶指针,由于在顺序栈中,0表示栈底部的位置
    // 所以初始应赋小于0的值,常用-1
    S.top = -1;
}

1.3 判空

// 判断栈空
bool StackEmpty(SeqStack S) {
    // 空栈条件:栈顶指针等于-1!!!
    // 说明栈中没有任何元素
    if(S.top == -1) {
        return true;
    } else {
        return false;
    }
}

1.4 入栈

// 进栈操作
// 类似于线性表的插入操作,即“增”操作
// 但由于栈的特殊性,只允许在栈顶进行操作,所以可称为进栈操作
// 即在栈顶增加元素
bool Push(SeqStack &S, int x) {
    // 判断栈是否已满,由于top是静态数组最后一个元素的下标(栈顶元素下标)
    // 所以只需要判断top值是否已经达到静态数组最大长度-1即可
    if(S.top == MaxSize - 1) {
        return false;
    }
    // top指针+1-->下标加一,指向数组后一位
    S.top = S.top + 1;
    // 新元素入栈
    S.data[S.top] = x;
    // 以上操作等价于S.data[++S.top] = x;
    return true;
}

1.5 出栈

// 出栈操作
// 类似于线性表的删除操作,即“删”操作
// 但由于栈的特殊性,只允许在栈顶进行操作,所以可称为出栈操作
// 即在栈顶弹出元素
bool Pop(SeqStack &S, int &x) {
    // 栈顶指针等于-1,栈为空,不可删除
    if(S.top == -1) {
        return false;
    }
    // 注意:虽然在此处出栈操作栈顶指针减一,可视为删除成功
    // 但实际上数据仍然保留在存储单元中,只是从逻辑上删除了
    // 将栈顶元素赋给x,x为引用变量,可从外部获取弹出的数据
    x = S.data[S.top];
    // 栈顶指针减一
    S.top = S.top - 1;
    // 以上操作等价于x= S.data[S.top--]
    return true;
}

1.6 取栈顶元素

// 读取栈顶元素
// 与出栈操作类似,但并不会改变栈顶指针的值
bool GetTop(SeqStack S, int &x) {
    // 栈顶指针等于-1,栈为空,不可删除
    if(S.top == -1) {
        return false;
    }
    // 栈顶元素
    x = S.data[S.top];
    return true;
}

1.7 弹出并输出栈中所有元素

// 输出栈中所有元素
// 由于栈只能从一端进行操作,所以想要输出所有元素,就必须要将所有元素弹出并输出
void PrintStack(SeqStack S) {
    if(StackEmpty(S)) {
        printf("the stack is empty!");
    }
    while(!StackEmpty(S)) {
        int x;
        Pop(S, x);
        printf("pop:%d\n", x);
    }
}

2.完整代码

#include<stdio.h>

#define MaxSize 10  // 定义栈中元素最大个数

typedef struct {    // 定义顺序栈
    int data[MaxSize];  // 静态数组存放栈中元素
    int top;    // 栈顶指针:指向目前栈顶元素的位置
} SeqStack;

// 初始化
void InitStack(SeqStack &S) {
    // 初始化栈顶指针,由于在顺序栈中,0表示栈底部的位置
    // 所以初始应赋小于0的值,常用-1
    S.top = -1;
}

// 判断栈空
bool StackEmpty(SeqStack S) {
    // 空栈条件:栈顶指针等于-1!!!
    // 说明栈中没有任何元素
    if(S.top == -1) {
        return true;
    } else {
        return false;
    }
}

// 进栈操作
// 类似于线性表的插入操作,即“增”操作
// 但由于栈的特殊性,只允许在栈顶进行操作,所以可称为进栈操作
// 即在栈顶增加元素
bool Push(SeqStack &S, int x) {
    // 判断栈是否已满,由于top是静态数组最后一个元素的下标(栈顶元素下标)
    // 所以只需要判断top值是否已经达到静态数组最大长度-1即可
    if(S.top == MaxSize - 1) {
        return false;
    }
    // top指针+1-->下标加一,指向数组后一位
    S.top = S.top + 1;
    // 新元素入栈
    S.data[S.top] = x;
    // 以上操作等价于S.data[++S.top] = x;
    return true;
}

// 出栈操作
// 类似于线性表的删除操作,即“删”操作
// 但由于栈的特殊性,只允许在栈顶进行操作,所以可称为出栈操作
// 即在栈顶弹出元素
bool Pop(SeqStack &S, int &x) {
    // 栈顶指针等于-1,栈为空,不可删除
    if(S.top == -1) {
        return false;
    }
    // 注意:虽然在此处出栈操作栈顶指针减一,可视为删除成功
    // 但实际上数据仍然保留在存储单元中,只是从逻辑上删除了
    // 将栈顶元素赋给x,x为引用变量,可从外部获取弹出的数据
    x = S.data[S.top];
    // 栈顶指针减一
    S.top = S.top - 1;
    // 以上操作等价于x= S.data[S.top--]
    return true;
}

// 读取栈顶元素
// 与出栈操作类似,但并不会改变栈顶指针的值
bool GetTop(SeqStack S, int &x) {
    // 栈顶指针等于-1,栈为空,不可删除
    if(S.top == -1) {
        return false;
    }
    // 栈顶元素
    x = S.data[S.top];
    return true;
}

// 输出栈中所有元素
// 由于栈只能从一端进行操作,所以想要输出所有元素,就必须要将所有元素弹出并输出
void PrintStack(SeqStack S) {
    if(StackEmpty(S)) {
        printf("the stack is empty!");
    }
    while(!StackEmpty(S)) {
        int x;
        Pop(S, x);
        printf("pop:%d\n", x);
    }
}

int main() {
    SeqStack S;
    InitStack(S);
    int x;
    Push(S, 3);
    GetTop(S, x);
    printf("push:%d\n", x);
    Push(S, 5);
    GetTop(S, x);
    printf("push:%d\n", x);
    Push(S, 7);
    GetTop(S, x);
    printf("push:%d\n", x);
    PrintStack(S);
    return 0;
}

3.运行截图

在这里插入图片描述

数据结构之栈、队列、数组--王道 1.栈 栈 (stack) 是限定仅在表尾进行插入或删除操作的线性表。 因此, 对栈来说, 表尾端有其特殊含义, 称为栈顶 (top),相应地, 表头端称为栈底 (bottom)。不含元素的空表称为空栈。 栈又称为后进先出 (Last In First Out, LIFO) 的线性表. 2.队列 队列(queue)是一种先进先出(First In First Out, FIFO)的线性表。 它只允许在表 的一端进行插入,而在另一端删除元素。 在队列中,允许插入的一端称为队尾(rear), 允许删 阅读详情

相关推荐

(王道408考研数据结构)第三章栈和队列-第一节:栈基本概念、顺序栈和链栈基本操作

文章目录一:栈基本概念(1)栈的定义(2)压栈和出栈(3)进栈出栈变化形式(4)栈的操作二:栈的顺序存储结构及其操作实现(1)顺序栈的定义(2)进栈(3)出栈(4)读取栈顶元素(5)共享栈三:栈的链式存储结构及其操作实现(1)链栈的定义(2)进栈(3)出栈 一:栈基本概念 (1)栈的定义 栈(stack):是一种将插入和删除操作限制在一端进行的线性表。我们把允许插入和删除的一端称之为栈顶(top),另一端则称之为栈顶(bottom),不含任何数据元素的栈称之为空栈。栈中元素遵循后进先出原则 类似于生活

快乐江湖的博客 2635

数据结构之栈和队列(顺序栈、链栈、循环队列)

一、栈 1、栈以及栈的基本操作 (1)栈:只允许在一端进行插入或删除操作的线性表。特点:先进后出。 栈顶:允许进行插入删除。 栈底:不允许进行插入和删除,固定的。 (2)栈的基本操作 2、栈的顺序存储结构 (1)顺序栈的实现 (2)顺序栈的基本操作 顺序栈的基本运算: (3)共享栈:栈底位置相对不变,两个顺序栈共享一个一维数组空间,将两个栈底分布设置在两端,两个栈顶向共享空间的中间延伸。 栈空:top0=-1,top1=maxsize 栈满:top1=top0+1 进栈:s.data[++top0

qq_43752469的博客 1544

【专栏必读】王道考研408数据结构+算法设计与分析万字笔记使用说明及章节导航

各位老铁思维导图在我整理完笔记后会放上去的,我需要根据王道的思维导图重新再做一遍 文章目录一:有关注意事项二:关于专栏三:学习建议四:各专栏导航(各位老铁别催,质量优先)(1)第一章:绪论(2)第二章:线性表(3)第三章:栈和队列第四章:串第五章:二叉树第六章:图 首先感谢王道大大(手动比心),很用心在做了,大家可以看其中两节是否符合胃口 (王道408考研数据结构)第五章树-第三节1:二叉树遍历(先序、中序和后序) (王道408考研数据结构)第五章树-第四节2:平衡二叉树(AVL)及其旋转 一:有.

快乐江湖的博客 5万+

栈的基本操作

StackEmpty(S):判断一个栈是否为空,若栈S为空则返回true,否则返回false。DestroyStack(&S):销毁栈,并释放栈S占用的存储空间(“&”表示引用调用)GetTop(S,&x):读栈顶元素,若栈S非空,则用x返回栈顶元素。Pop(&S,&x):出栈,若栈S非空,则弹出栈顶元素,并用x返回。Push(&S,x):进栈,若栈S未满,则将x加入使之成为新栈顶。InitStack(&S):初始化一个空栈S。

qq_39321234的博客 337

经典点云配准算法:迭代最近点算法ICP(Iterative Closest Point)

迭代最近点算法,又名为 ICP(Iterative Closest Point)算法。 (1)ICP算法对初始值的依赖比较大,具体的配准过程中,如何选择初始值是一个问题,可以使用轮式里程计、imu预积分或其它先验的配准结果。 (2)ICP迭代次数过多,实际工程中需要考虑到其实时性的优化问题。 (3)迭代终止的阀值的设置也是需要考虑的点,可以考虑自适应阀值的方法。 (4)关于寻找最近点可以使用kdtree进行临近搜索。

qq_35102059的博客 1万+

从 JDK8 到 JDK17:CRMEB 框架升级

【摘要】CRMEB开源框架已成功从JDK8升级至JDK17,带来显著性能提升:并发吞吐量提高35%,响应延迟降低40%,资源占用减少25%。升级方案解决87个技术卡点,支持模块化扩展和微服务转型,兼容SpringBoot3.0等新技术。提供基础版到企业级的升级服务,包含代码重构指导和性能调优。经金融级验证的方案可帮助电商平台实现日均10万+UV承载,支付成功率提升至99.7%。现以低于市场30%的价格提供全周期技术支持,助力企业抢占技术先机。

weixin_39782540的博客 701

顺序栈的基本操作:初始化、进栈、出栈、读栈顶元素

顺序栈:利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时由于栈操作的特殊性,还必须附设一个位置指针top(栈顶指针)来动态地指示栈顶元素在顺序栈中的位置。通常以top=-1表示空栈。代码如下:#include<iostream>using namespace std;#define TRUE 1#define FALSE 0//顺序栈的存储结构#...

weixin_34388207的博客 3766

FastDDS之共享内存

transport层负责为DDS用户数据收发和服务发现提供通信。包含UDP,TCP,SHM。

u010378559的博客 3085

C语言 栈的基本操作 栈的实现

栈的操作的基本实现

Death Note 1万+

CANoe从入门到精通“保姆级”教程(二)- 堪称全网“最全”系列

CANoe各功能区介绍;

车载控制器AutoSAR软件开发工程师 2万+

模块学习(一)——编码电机

编码电机测速

qq_51406846的博客 7911

C语言实现顺序栈的基本操作(初始化、判断空、入栈、出栈、获取栈顶元素)

//顺序栈的基本操作 #include #define MaxSize 50 typedef int ElemType; //定义栈结构体 typedef struct { ElemType data[MaxSize]; int top; }SqStack; //初始化栈 void InitStack(SqStack &S) { S.top = -1; }

u012913936的博客 3万+

SYSU-MM01数据集评估避坑指南:从RGB/IR图像理解到Python评估脚本调优

本文详细解析了SYSU-MM01数据集在跨模态行人重识别(ReID)评估中的关键技巧与常见陷阱。从RGB/IR图像理解到Python评估脚本优化,提供了数据评估模式选择、single-shot/multi-shot差异分析、特征文件处理规范等实用指南,帮助研究者避开指标异常问题,提升评估效率与准确性。

weixin_29044713的博客 196

王道数据结构课代表 - 考研数据结构 第三章 栈和队列 究极精华总结笔记

数据结构与算法 笔记导航🚥🚥🚥 🥬 第一章 绪论 🥕 第二章 线性表 🥪 第三章 栈和队列 🍊 第四章 串-KMP(看毛片算法) 🍒 第五章 树和二叉树 🍀 第六章 图 🍚 第七章 查找(B树、散列表) 🧄 第八章 排序 (内部排序:八大排序动图演示与实现 + 外部排序) 🍔 数据结构与算法 复试精简笔记 🎨 408 全套初复试笔记汇总 传送门 🏃‍🏃‍🏃‍ 如果本篇文章对大家起到帮助的话,跪求各位帅哥美女们,求赞👍 、求收藏、求关注!

clzZ2的博客 5993

NE555构成多谐振荡器及三角波、正弦波的生成(附工程文件)

NE555构成多谐振荡器及三角波、正弦波的生成 续上一篇:NE555基本原理及相关公式的推导

qq_49979053的博客 5万+

【机器学习实战中阶】音乐流派分类-自动化分类不同音乐风格

数据下载地址:https://www.kaggle.com/datasets/andradaolteanu/gtzan-dataset-music-genre-classification/data背景音乐。专家们长期以来一直在尝试理解声音以及是什么使一首歌曲与另一首不同。如何可视化声音。是什么使一个音调与另一个不同。这个数据集希望能提供实现这些目标的机会。内容原始流派 - 包含10种流派,每种流派有100个音频文件,每个文件长度为30秒(著名的GTZAN数据集,声音的MNIST)

2145

【数据结构】【王道】【数据结构实现】文章目录

数据结构实现文章目录

treesorshining的博客 1914

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

王道考研数据结构代码总结

目录 不带头结点的单链表 带头结点的单链表 不带头结点的单链表 #include<iostream> #include<algorithm> using namespace std; typedef struct LNode { int data; struct LNode* next; }LNode, * LinkList; //struct LNode* == LinkList //强调节点 用LNode //强调链表 用LinkList //初始化单链

兜率工的博客 3万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

王道数据结构 | 第三章 栈、队列和数组

王道数据结构复习:第三章 栈队列数组

emmm_Yeah的博客 1043

pscad IEEE标准系统搭建说明

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

【数据结构】第三章:栈和队列

【数据结构】第三章:栈和队列 一、栈 1. 栈的定义 2. 栈的基本操作 二、顺序栈 1. 顺序栈的实现 2. 顺序栈的基本操作 3. 两种实现方式对比 3. 共享栈 三、链栈 1. 链栈的实现 2. 链栈的基本操作 四、队列 1. 队列的定义 2. 队列的基本操作 3. 双端队列 五、顺序队列 1. 顺序队列的实现 2. 顺序队列的基本操作 3. 三种实现方式对比 六、链队列 1. 链队列的实现 2. 链队列的基本操作 七、栈的应用 1. 括号匹配 2. 表达式求值 3. 递归 八、队列的应用 九、特殊矩

iFulling的博客 1685

王道考研数据结构代码总结(前四章)

本文包含王道考研讲课中所涉及的数据结构中的所有代码,当PPT代码和书上代码有所区别时以咸鱼的PPT为主,个人认为PPT上的代码比王道书上的代码要便于理解,此外,本博客也许会补充一些额外的代码进来(不仅受限于王道考研),408中冷门考点频出,应该会囊括所有涉及到的代码,这也是我的DS的第二轮复习,希望与大家共勉之,由于博客体量的问题,原先打算此文也将收录诸如os中的吸烟者问题等的一系列伪代码,具体看到时候本文字数而定。如果一篇博客放不下的话会拆分成为两三篇文章发布。

佛系更新 5569

王道数据结构-栈和队列(C++代码实现)

顺序栈(top=-1、top=0)、链栈(带头结点、不带头结点)、循环队列(顺序存储结构)的C++代码实现

lljjhh001的博客 2129

数据结构笔记(王道考研) 第三章:栈和队列

数据结构笔记(王道考研) 第三章:栈和队列

zimuzi2019的博客 3160

王道数据结构第三章(栈和队列)笔记

采用顺序存储的栈成为顺序栈。

Java程序员十六的博客 1920

王道视频-数据结构-笔记3:栈和队列

栈和队列都是操作受限的线性表。

我是一只小嵩鼠 2103

王道数据结构笔记03—栈与队列(C语言)

本笔记来源于b站王道考研白嫖课程,仅供个人以及大家学习使用

qq_28356977的博客 2158
上一篇: 【数据结构】【王道】【线性表】循环链表的实现及基本操作(可直接运行)
下一篇: 【数据结构】【王道】【栈与队列】不带头结点链栈的实现及基本操作(可直接运行)
Silver  Star
Silver Star 新星创作者: 大数据技术领域 新星创作者: 大数据技术领域
博客等级 码龄7年 1万+粉丝 72原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

Silver Star

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

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

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

打赏作者

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

抵扣说明:

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

余额充值