栈和队列的基本见解

news2024/11/15 21:43:17

1.栈

1.1栈的基本概念和结构:

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

栈的操作顺序:(后进先出)

1.2栈的实现:

栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾插数据时带价比更小。

1.2.1创建栈结构:
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>

typedef int type;

typedef struct stable
{
	type* arr; 
	int top;   //栈顶
	int count; //容量
}Stable;

// 初始化栈 
void StableInit(Stable* ps);

//打印测试
void StablePrint(Stable* ps);

// 入栈 
void StablePush(Stable* ps, type data);

// 出栈 
void StablePop(Stable* ps);

// 获取栈顶元素 
type StackTop(Stable* ps);

// 获取栈中有效元素个数 
int StableSize(Stable* ps);

// 检测栈是否为空,如果为空返回非零结果,如果不为空返回0 
bool StableEmpty(Stable* ps);

// 销毁栈 
void StableDestroy(Stable* ps);

2.队列

2.1队列的基本概念和结构:

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出的原则。

入队列:进行插入操作的一端称为队尾。

出队列:进行删除操作的一端称为队头。

队列操作顺序:

2.2队列的实现:

队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低。

2.2.1队列的创建:
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>

typedef int type;

typedef struct Array
{
	type number;
	struct Array* next;
}Array;

typedef struct Queue
{
	Array* arrayhead;
	Array* arrayend;
	int size;
}Queue;

//打印测试
void ArrayPrint(Queue* p);

//初始化
void ArrayInit(Queue* p);

//尾插
void ArrayPush(Queue* p, type x);

//队头删除
void ArrayPop(Queue* p);
 
//获取队头数据
type ArrayFirst(Queue* p);

//获取队尾数据
type ArrayEnd(Queue* p);

//获取数量
int ArrayNumber(Queue* p);

//判空
bool ArrayEmpty(Queue* p);

//释放
void ArrayDestroy(Queue* p);

3.队列和栈的相互实现

3.1队列实现栈:

在实现的过程中可以保持其中一个队列始终为空,入栈操作相当于给非空队列进行入队操作。出栈操作相当于非空队列队尾元素出队,此时需要把非空队列除最后一个元素外其他元素全部入队到空队列中,再出最后一个元素。

3.2栈实现队列:

在实现的过程中创建两个栈,其中一个一直保持为出队列,另一个一直保持为入队列。出队操作,需要把出队的栈元素全部出完,当出完时,把入队的栈的元素全部导入到出队栈里,在进行出栈操作。

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

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

相关文章

Vxe UI 表单设计器、零代码平台

vxe-pc-ui Vxe UI 表单设计器、零代码表单设计器 安装 Vxe UI PC端组件库 官方文档 查看 github、gitee // ...import VxeUI from vxe-pc-uiimport vxe-pc-ui/lib/style.css// ...// ...createApp(App).use(VxeUI).mount(#app)// ...使用 vxe-form-design 设计器组件 vxe-fo…

QML的Image 路径问题(source)

四种路径格式 在 QML 中&#xff0c;当你使用 Image 元素的 source 属性来指定一个图片的路径时&#xff0c;有几种不同的方式可以指定这个路径&#xff0c;每种方式都有其特定的用途和上下文。 相对路径&#xff1a; QML 文件和一个名为 close.png 的图片在同一目录下&#x…

列表元素添加的艺术:从单一到批量

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言 二、向列表中添加单一元素 1. append方法 2. insert方法 三、向列表中添加批量…

CentOS网络配置(三种网络模式:桥接、NAT、Host-Only)

目录 1、虚拟机网络模式 1.1 桥接 1.2 NAT 1.3 Host-Only 2、桥接模式 3、仅主机模式 4、NAT模式 5、centos网络配置 5、virtualbox 下centos7网络配置 5.1管理 ——> 全局设定 ——> 网络&#xff0c;新加网络 5.2 具体虚拟机设置&#xff0c;网络设置&#…

软件设计师笔记2

文章目录 软考知识点总结1. 计算机组成原理网络与信息安全数据结构与算法AOE网 编译原理操作系统软件设计软件测试数据库计算机软件产权其它 软考知识点总结 1. 计算机组成原理 cpu控制器&#xff0c;专门产生指令操作&#xff0c;送到计算机各个部位执行处理 DMA&#xff08…

python调用阿里云通义千问(q-wen-max)API-只能总结pdf文档内容

文章目录 通义千问插件PDF解析插件调用案例通义千问插件 Dashscope插件功能能够使得大模型的生成内容与外部三方应用结合,使得模型生成的内容更加准确和丰富,模型将拥有更好的生成能力。您也可以通过开发自定义插件,来使得模型生成更符合您预期的结果。 使用插件功能,大模…

第十三节:带你梳理Vue2 : watch侦听器

官方解释:> 观察 Vue 实例变化的一个表达式或计算属性函数。回调函数得到的参数为新值和旧值。表达式只接受监督的键路径。对于更复杂的表达式&#xff0c;用一个函数取代<br/>## 1. 侦听器的基本使用侦听器可以监听data对象属性或者计算属性的变化watch是观察属性的…

细粒度图像分类论文(AAM模型方法)阅读笔记

细粒度图像分类论文阅读笔记 摘要Abstract1. 用于细粒度图像分类的聚合注意力模块1.1 文献摘要1.2 研究背景1.3 本文创新点1.4 计算机视觉中的注意力机制1.5 模型方法1.5.1 聚合注意力模块1.5.2 通道注意力模块通道注意力代码实现 1.5.3 空间注意力模块空间注意力代码实现 1.5.…

VScode解决报错“Remote-SSH XHR failed无法访问远程服务器“的方案

VScode解决报错"Remote-SSH XHR failed无法访问远程服务器"的方案 $ ls ~/.vscode-server/bin 2ccd690cbff1569e4a83d7c43d45101f817401dc稳定版下载链接&#xff1a;https://update.code.visualstudio.com/commit:COMMIT_ID/server-linux-x64/stable 内测版下载链接…

ABAQUS应用07-实现拉伸和压缩刚度不同的弹簧建模

文章目录 0、背景描述1、步骤 0、背景描述 到目前为止&#xff0c;本文的内容我还没有具体实践过&#xff0c;但是个人认为后期是会用到的。比如说&#xff0c;对于风电机组地基转动刚度的设置&#xff0c;土体就是一种拉压刚度并不相同的材料。所以现在先记录下来&#xff0c…

如何利用OpenHarmony ArkUI的Canvas组件实现涂鸦功能?

简介 ArkUI是一套UI开发框架&#xff0c;提供了开发者进行应用UI开发时所需具备的能力。随着OpenAtom OpenHarmony&#xff08;以下简称“OpenHarmony”&#xff09;不断更新迭代&#xff0c;ArkUI也提供了很多新的组件&#xff0c;例如Canvas、OffscreenCanvas、XComponent组…

Git Large File Storage (LFS) 的安装与使用

Git Large File Storage [LFS] 的安装与使用 1. An open source Git extension for versioning large files2. Installing on Linux using packagecloud3. Getting StartedReferences 1. An open source Git extension for versioning large files https://git-lfs.com/ Git …

手把手从0到1教你做STM32+FreeRTOS智能家居--第10篇之ASR-PRO语音识别模块

前言 先看实验效果&#xff0c;通过ASR-PRO语音智能识别控制模块&#xff0c;来控制STM32单片机实现对应的控制功能。因为后台好多小伙伴私信问用的是什么语音模块&#xff0c;并且很少在网上看到如何使用此模块相关的文章&#xff0c;所以我将会在本篇文章详细介绍一下此模块…

列表和元组

2.1序列概述 列表和元组的主要不同在于&#xff0c;列表是可以修改的&#xff0c;而元组不可以。这意味着列表适用于需 要中途添加元素的情形&#xff0c;而元组适用于出于某种考虑需要禁止修改序列的情形。 Python支持一种数据结构的基本概念&#xff0c;名为容器&#xff0…

Gradle筑基——Gradle Maven仓库管理

基础概念&#xff1a; 1.POM pom:全名Project Object Model 项目对象模型&#xff0c;用来描述当前maven项目发布模块的基础信息 pom主要节点信息如下&#xff1a; 配置描述举例&#xff08;com.android.tools.build:gradle:4.1.1&#xff09;groupId组织 / 公司的名称com.…

clone方法总结Java

Java中Object类当中有许多方法&#xff0c;如图所示&#xff1a; clone方法就是其中一种&#xff0c;分为浅拷贝&#xff0c;深拷贝举一个例子&#xff1a; 浅拷贝&#xff1a; 在Person类当中右键鼠标然后&#xff0c;选中Generate&#xff1a; 然后重写clone方法 protecte…

福昕PDF编辑器自定义快捷方式

你是否为用不惯福昕PDF编辑器自带的快捷键而发愁&#xff1f;今天&#xff0c;我和大家分享一下如何设置自己想要的快捷键方式&#xff0c;希望能对大家有帮助。 步骤一&#xff1a;打开福昕PDF编辑&#xff0c;并找到更多命令 步骤二&#xff1a;切换到键盘一栏&#xff0c;并…

微信小程序基础 --模板语法(4)

模板语法 1、wxml视图结构 1.1 概述 开发文档&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/framework/quickstart/code.html#WXML-%E6%A8%A1%E6%9D%BF 从事过网页编程的人知道&#xff0c;网页编程采用的是 HTML CSS JS 这样的组合&#xff0c;其中 HT…

【热门话题】Debian常用命令指南

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 Debian常用命令指南引言1. 文件与目录操作lscdmkdirrmcpmv 2. 包管理aptdpkg 3.…

WSL安装CentOS系统

1.首选找一个linux系统&#xff0c;执行docker命令 docker run -it --rm centos:7 bash 2.开一个新窗口&#xff0c;将系统导出 docker export e0ee25406703 -o centos.tar 3.切换到wsl命令&#xff0c;导入tar包 wsl --import centos D:\wsl\centos D:\wsl\centos.tar cen…