数据结构-栈,队列

news2024/10/2 14:22:59

栈,队列

  • 1 知识框架
  • 2 栈
    • 2.1 顺序栈
    • 2.2 链式栈
  • 3 队列
    • 3.1 顺序队列
    • 3.2 循环队列
    • 3.3 链式队列
  • 4 数组
    • 4.1 二维数组
    • 4.2 特殊数组的压缩存储

1 知识框架

在这里插入图片描述

2 栈

定义:只允许在一端进行插入或删除得到线性表
栈的数学性质:n个不同元素进栈,出栈的不同排列有在这里插入图片描述

2.1 顺序栈

定义:

typedef struct
{
	int data[MaxSize];
	int top;   // 栈顶指针  初始化top = -1,栈顶元素:S.data[top]
}Stack;

1.进栈

bool Push(Stack &s,int x)    //为什么用&,这里不用&,传的就是形参,存进来的数据不会改变内存中的栈
{
	if(s.top == MaxSize - 1)
		return false;
	s.data[++ s.top] = x;
	return true;
}

2.出栈

bool Pop(Stack &s,int &x)
{
	if(s.top == -1)
		return false;
	x = s.data[top --];
	return true;
}

2.2 链式栈

在这里插入图片描述
定义:

typedef struct Linknode
{
	int data;
	struct Linknode *next;
}*Stack;

3 队列

定义:在表的一端进行插入,在表的另一端进行删除的线性表。

3.1 顺序队列

定义:

typedef struct
{
	int data[MaxSize];
	int front,rear;   //初始化 front = rear = 0;
}Queue;

1.进队

bool Push(Queue &s,int x)
{
	if(s.rear == MaxSize)    //并不是真正的队满,假溢出
		return false;
	s.data[rear ++] = x;
	return true;
}

2.出队

bool Pop(Queue &s,int &x)
{
	if(s.front == s.rear)
		return false;
	x = s.data[front ++];
}

3.2 循环队列

1.初始:Q.front = Q.rear = 0;
2.入队:Q.rear = (Q.rear + 1) % MaxSize;
3.出队:Q.front = (Q.front + 1) % MaxSize;
4.队长:(Q.rear - Q.front + MaxSize) % Maxsize;
5.判空:Q.rear == Q.front;
6.判满:Q.front == (Q.rear + 1) % MaxSize //队列留出一个位置作为队列判满的条件,不然rear == front可以是队空,也可以是队满。
在这里插入图片描述

3.3 链式队列

定义:

typedef struct LinkNode
{
	int data;
	struct LinkNode *next;
}LinkNode;                //队列节点

typedef struct 
{
	LinkNode *front,*rear;
}*LinkQueue;    //无名结构体    使用:  别名 变量名   LinkQueue linkQueue;

4 数组

4.1 二维数组

二维数组在内存中的位置的两种映射方式。
1.先行后列

//位置计算方法  L是每个数组元素所占的存储空间大小  int  4个字节
A[2][3]
ADD(A[i][j]) = ADD(A[0][0])+(i * 4 + j) * L;

2.先列后行

//位置计算方法  L是每个数组元素所占的存储空间大小  int  4个字节
A[2][3]
ADD(A[i][j]) = ADD(A[0][0])+(j * 3 + i) * L;

4.2 特殊数组的压缩存储

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

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

相关文章

phpWord使用模板填充数据:包含表格及嵌套表格(多个表格/循环表格)

参考文档 模板处理 基础使用 安装过程省略,首先加载模板: $templateProcessor new TemplateProcessor(ROOT_PATH . uploads/template/自动生成模板.docx); 完整保存流程 首先,要进行测试,起码能够写一个完整的demo,以下是我测…

实验三---面向对象分析与设计——UML用例图与活动图

一、实验目的: 掌握面向对象分析中用例建模的基本思想,学会识别参与者和用例,掌握UML用例图的绘制方法,学会编写用例说明;了解活动图的作用和组成元素,掌握UML活动图的绘制方法,学会使用活动图来…

秒懂算法 | KMP算法(Java描述)

Knuth-Morris-Pratt 算法(简称 KMP)是由高德纳(Donald Ervin Knuth)和沃恩普拉特在1974年构思,同年詹姆斯H莫里斯也独立地设计出该算法,最终三人于1977年联合发表。该算法较Brute-Force算法有较大改进&…

门电路OD门

漏极开路输出的门电路(OD门) 为了满足输出电平的变换,输出大负载电流,以及实现“线与”功能,将CMOS门电路的输出级做成漏极开路的形式,称为漏极开路输出的门电路,简称OD(Open&#x…

【JVM】1. JVM与Java体系结构

文章目录 1.1. 前言🍉1.2. 参考书目🍉1.3. Java及JVM简介🍉1.4. Java发展的重大事件🍉1.5. 虚拟机与Java虚拟机🍉1.6. JVM的整体结构🍉1.7. Java代码执行流程🍉1.8. JVM的架构模型🍉…

4. QT中的鼠标键盘事件 --- 鼠标拖拽案例

1. 说明 在QT的控件或者窗口当中,如果对于当前鼠标或者键盘的功能需要自己定义,可以重写父类当中对应虚函数,主要包括以下几个: //键盘按键按下 virtual void keyPressEvent(QKeyEvent *event); //键盘按键抬起 virtual void ke…

为什么C++这么复杂还不被淘汰?

C是一门广泛使用的编程语言,主要用于系统和应用程序的开发。尽管C具有一些复杂的语法和概念,但它仍然是编程界的重量级选手,在编程语言排行榜中一直位居前列。为什么C这么复杂还不被淘汰呢? C有以下优势 1、C具有高性能 C是一门编…

unity进阶学习笔记:photonServer测试

photonServer是由photon发布的一个网络框架,其封装了UDP和TCP通信机制让用户可以直接调用API实现网络游戏通信 1 photonServer下载安装 进入Photon官网的SDK选项,选择下载Server。目前Server版本已经更新到v5,这里我为了和教程保持一致下载…

Unittest接口测试生成报告和日志方法

HTML报告 直接把HTMLTestRunner.py放入工程目录即可报告脚本封装 #HTNL格式报告now datetime.datetime.now().strftime(%Y-%m-%d_%H_%M_%S)htmlreport reportpath "/" now r"result.html"print("测试报告生成地址:%s"% htmlre…

Revit干货 | 系统族、内建族、可载入族一次性搞清楚!

对于使用人数较多的revit软件,其中的许多概念与我们常用的CAD完全不同,以至于让许多工程师觉得revit软件有点高深莫测,不可琢磨,从而有了抗拒心理。 Revit软件中的重要概念: “族”是revit软件中的很重要也很基本的概念…

程序的各种段以及堆栈相关问题

C中一般有三种变量: 局部变量全局变量静态变量 C中一般有五个内存段: 代码段 也叫文本段,包含frequently executed code通常是只读的(未了避免程序被错误改写)代码段是不包含程序变量(如局部变量、全局变…

【数据结构】带头双向链表,真正的六边形战士

文章目录 概要整体架构流程小结 概要 *数据结构中的链表在实际开发中应用非常广泛,但写一个链表并不是一件简单的事情。链表有八种结构,对于刚入门的新手来说,往往会先经历单链表的折磨。 而今天我要讲的带头双向链表非常适合新手学习&#…

C++6.类和对象(下)

1.友元函数,一般现在类的最上面。 2.函数的参数中,如果不改变,尽量加上const修饰。 3.对于自定义类型,使用运算符进行操作基本上都要用运算符重载,但是有些运算符重载会默认自动生成。 4.初始化列表,是成…

【wpf】列表类,用相对源时,如何绑定到子项

前言 在之前的一篇文章 :《【wpf】深度解析,Binding是如何寻找数据源的》https://blog.csdn.net/songhuangong123/article/details/126195727#:~:text%E3%80%90wpf%E3%80%91%E6%B7%B1%E5%BA%A6%E8%A7%A3%E6%9E%90%EF%BC%8CBinding%E6%98%AF%E5%A6%82%E4…

读书|林曦:她把自己的生活,过成了无用但丰盈的美学

时代在以加速度的方式变化,让人难以从容。而当我们陷于横向的比较系统,权衡着卷、躺、润时,也有人在探寻另一条纵向的路——向古人学习,以传统美学关照和滋养当下生活。      立夏之际,水墨画家林曦的新作《无用之…

33岁跳槽无路,濒临绝望之际受贵人指点,成功上岸阿里(测试岗)

写在前面 马上过34岁生日了,和大家聊聊最近的情况,半年前还在迷茫该学什么,怎样才能走出现在的困境,半年后已经成功上岸阿里,感谢在这期间帮助我的每一个人 开始 30多岁工作的时候总是有种力不从心的感觉&#xff0…

网络安全工程师需要考什么证吗?

目前网络安全行业,国内都有哪些证书可以考。 一、CISP-PTE (国家注册渗透测试工程师) CISP-PTE即注册信息安全渗透测试工程师,该证书由中国信息安全测评中心颁发,证书是国内唯一认可的渗透测试认证,专业性…

AIOps社区低代码项目火热报名中|中科院开源之夏2023,万元现金等你来拿!

活动介绍 开源之夏是由中科院软件所“开源软件供应链点亮计划”发起并长期支持的一项暑期开源活动,旨在鼓励在校学生积极参与开源软件的开发维护,培养和发掘更多优秀的开发者,促进优秀开源软件社区的蓬勃发展,助力开源软件供应链…

告别Excel,免费大数据分析与可视化工具,让你的论文图表“高大上”

数据分析工具很多,可以分为表格、数据库、BI工具、编程等四大工具。每个大类又有很多的工具,例如表格包括Excel、WPS、Google Sheets、Airtable等。编程工具包括Python和R。 搞科研几年了,笔者一直都是在使用Excel做数据分析和可视化&#xf…

Go语言中sync.Map、sync.Pool和Context的用法

目录 【sync.Map】 实现线程安全的 map 类型 使用 sync.Map 实现并发读写的map 【sync.Pool】 使用 带缓冲channel 实现对象池 使用 sync.Pool 创建临时对象池 【Context 上下文】 Context应用:实现带超时功能的远程调用 Context应用:监控指令…