第三章 数据结构与算法——栈和

news2025/2/28 21:36:06

栈和队列被称为插入和删除受限制的线性表。

🍁一、栈的基本概念

🌕(一)栈的概念:

①:栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。 栈中的数据元素遵守后进先出 LIFO Last In First Out )的原则。
②:压栈:栈的插入操作叫做进栈 / 压栈 / 入栈, 入数据在栈顶
③:出栈:栈的删除操作叫做出栈。 出数据也在栈顶

🍁二、栈的顺序存储结构(栈的实现)

🌕(一)、特点

①:栈的顺序存储结构简称“顺序栈”;

②:顺序栈利用一组连续地址的存储单元(数组)依次存放从栈低到栈顶的数据元素,通常用一维数组存放栈的元素,同时设top“箭头”(有些地方称top为“指针”,但不是C语言中的指针,top是一个整型变量,所以为了避免混淆,小编称其为“箭头”)指示栈顶元素的当前位置,空栈时top值为0。

🌕(二)、静态实现

因为栈是特殊的线性表,所以栈的实现和线性表差不多,只是多了一个top“箭头”;

#define N 10

typedef struct Stack
{
	int data[N];
	int top;
}Stack;

静态实现有一个很大的缺点就是扩容不方便,所以具体实现我们会使用动态实现;

注意:理论上顺序表的结构比栈的链式存储结构要方便许多,但顺序存储在实际运用中有一些缺点,特别扩容不方便;所以具体实现以及以后练题我们会使用栈的链式存储;

🌕(三)、动态实现(优先)

因为线性表在之前的文章已经实现过了 ,而栈的实现和线性表差不多,所以小编就快速实现;具体操作可以参考小编之前的文章;

⭐️ (三.1)、定义

在原基础上多了一个top箭头用于指向栈顶位置;

typedef int DataType;
typedef struct Stack
{
	DataType* head;
	int top;
	int catacity;
}ST;
⭐️(三.2)、初始化
//初始化
void STinit(ST* ps)
{
	assert(ps);
	//刚开始没有元素,所以top指向-1,因为数组下标从0开始
	ps->top = -1;
	ps->catacity = 0;
	ps->a = NULL;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1107504.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

四川竹哲电子商务有限公司让抖音带货更轻松

随着电子商务的飞速发展,带货直播成为了新的行业热点。四川竹哲电子商务有限公司,一家在电子商务领域有着深厚实力和丰富经验的企业,正以其独特的视角和策略,引领着抖音带货的发展趋势,让这个新型商业模式更加轻松、高…

C++初阶(三)

文章目录 一、auto关键字(C11)1、auto简介2、auto使用规则1、 auto与指针和引用结合起来使用2、 在同一行定义多个变量 3、auto不能推导的场景1、 auto不能作为函数的参数2、 auto不能直接用来声明数组3、特性总结 二、基于范围的for循环(C11)1、范围for的语法2、 范围for的使用…

基于springboot校园二手书交易管理系统

功能如下图所示 摘要 校园二手书交易管理系统是一款基于Spring Boot框架的应用程序,旨在便捷管理大学校园内的二手书籍交易。该系统致力于为学生和教职工提供一个高效、便捷的平台,以便买卖二手书籍,从而减轻经济压力,减少资源浪费…

Linux高性能服务器编程 学习笔记 第十七章 系统监测工具

tcpdump是一款经典的抓包工具,即使今天我们已经有了像Wireshark这样更易于使用和掌握的抓包工具,tcpdump仍是网络程序员的必备利器。 tcpdump提供了一些选项用以过滤数据包或定制输出格式,常见的选项如下: 1.-n:使用I…

ROS 示例

参考链接1 话题中的Publisher与Subscriber 例1: 发送和接收 hello, world 1、创建工作空间 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src catkin_init_workspace创建完成后,可以在工作空间的根目录下使用catkin_make命令编译整个工作空间&#xff1…

nfs+rpcbind实现服务器之间的文件共享

NFS简介 NFS服务及Network File System,用于在网络上共享存储,分为2,3,4三个版本,最新为4.1版本。NFS基于RPC协议,RPC为Remote Procedure Call的简写。 应用场景:用于A,B,C三台机器上需要保证被访问到的文件是一样…

用Bing绘制「V我50」漫画;GPT-5业内交流笔记;LLM大佬的跳槽建议;Stable Diffusion生态全盘点第一课 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🔥 美国升级AI芯片出口禁令,13家中国GPU企业被列入实体清单 nytimes.com/2023/10/05/technology/chip-makers-china-lobbying…

QT自定义空间之软键盘

QT自定义空间之软键盘 1.功能列表2.效果2.1 中文键盘&汉字输入2.2 英文输入法2.3 数字键盘2.4 数据键盘效果 3.部分代码3.1 汉字输入3.2 切换数字键盘3.3 键盘显示&隐藏3.4 控件提升3.5样式设置3.6 使用QLineEditAllKeyBoard 控件 1.功能列表 支持中文输入法支持引文输…

jdk7新增时间类Date,SimpleDateFormat,Calendar

Date //需求1 打印时间远点开始一年后的时间extracted();//需求2 定义任意两个date对象 比较那个时间在前 哪个在后Random rnew Random();Date date1new Date(Math.abs(r.nextInt()));Date date2new Date(Math.abs(r.nextInt()));System.out.println(date1);System.out.printl…

在迪拜举行的 GITEX GLOBAL 2023 IT 展览会上,Positive Technologies 荣获两项大奖!

🏆 在迪拜举行的 GITEX GLOBAL 2023 IT 展览会上,Positive Technologies 荣获两项大奖。这两个奖项都是影响力网络安全领域的最佳供应商。 🏵 Future Enterprise Awards 2023 是该地区 IT 行业最重要的奖项之一。该奖项每年颁发给对信息技术…

python---三目运算符

在Python中三目运算符也叫三元运算符,其主要作用:就是用于 简化if...else...语句。 基本语法: 原 if 条件判断: # 语句段1 else: # 语句段2 新-----三目运算符/三元运算符 语句段1 if 条件判断 else 语句段2 案例 输入两个数…

网站如何优化加速,让网站降低延迟

优化网站架构 精简页面加载过程:通过消除冗余代码和不必要的图像,并采用CDN资源分发,以减少加载时间。 精心规划内容架构:通过使用恰当的标题和描述,使搜索引擎能够快速理解页面的内涵。 选择性能出众的前端框架&…

【QT】常用控件——按钮组

继承Widget PushButton 设置图片,先导入图片资源,见:【QT】资源文件导入_复制其他项目中的文件到qt项目中_StudyWinter的博客-CSDN博客 在布局中添加图片 调整尺寸 toolButton 显示图片、文本 显示图片(图片和文字都有时&#…

git学习——第5节 远程仓库

自行设置:远程仓库 - 廖雪峰的官方网站 (liaoxuefeng.com) 添加远程库 现在的情景是,你已经在本地创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既…

排查手机应用app微信登录问题不跳转失败原因汇总及其解决方案

经过最近我发的文章,我个人觉得解决了不少小问题,因为最近很小白的问题已经没有人私聊问我了,我总结了一下排查手机应用app微信登录问题不跳转失败的原因汇总及其解决方案在这篇文章中,分析微信登录不跳转的原因,并提供解决方案。希望通过这篇文章,能够帮助大家顺利解决这…

Python Connect SQLServer 2008

Macos(经过了两天,无数次的方法验证,寻找各种资料,总结如下) brew install freetds0.91 如果出现错误就进行手工安装 brew install freedts0.91 出错。 linqllinqldeMBP-2 / % brew install freetds0.91 Warning: No …

css-水滴登录页

效果图&#xff1a; html <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><link type"text/css" rel"stylesheet" href"login.css" /></head><body><…

从零开始的C语言学习第十九课:C语言内存函数

目录 1. memcpy使用和模拟实现 2. memmove使用和模拟实现 3. memset函数的使用 4. memcmp函数的使用 1. memcpy使用和模拟实现 void * memcpy ( void * destination, const void * source, size_t num ); 函数memcpy从source的位置开始向后复制num个字节的数据到destinati…

sylar高性能服务器-配置(P9)代码解析+调试分析

文章目录 一、代码解析1.1配置基类(ConfigVarBase)1.2配置参数类(ConfigVar)1.3配置管理类(Config) 二、代码调试2.1SYLAR_LOG_INFO(SYLAR_LOG_ROOT())2.2ConfigVart调试 本节内容主要讲诉了sylar高性能服务器视频P9的内容&#xff0c;并给出了代码逐步调试的步骤和结果。本节内…

Linux块设备缓存Bcache使用

1 Bcache简介 Bcache是Linux内核块层cache&#xff0c;它使用SSD来作为HDD硬盘的cache&#xff0c;从而起到加速作用。Bcache内核模块仅在Linux 3.10及以上版本支持&#xff0c;因此使用Bcache&#xff0c;需要将内核升级到3.10及以上版本&#xff0c;并在内核配置项中打开Bca…