07 |「栈和队列」简析

前言

前言:研究一个数据结构的时候,首先讲的是增删改查。

一、简介

1. 结构

栈和队列都属于数据结构中的线性结构,有前驱和后继的概念。

2. 特点

栈是后进先出

队列是先进先出

3. 存储

任何数据结构都是用来存放数据的,不同的数据结构对数据的存取有着不同的要求。

只要涉及到存储数据,一般都是设计数据结构。

数据结构的设计,底层都是基于数组或链表。

二、栈

1. 类比举例

栈可以类比生活中的放/取盘子的过程。

放盘子的过程:先洗完的盘子放在最下面,然后其他的盘子依次往上放,最后洗完的那个盘子一定是放在最上面。

取盘子的过程:取的时候是从上往下依次拿取。

对于放盘子相当于存数据即入栈操作,取盘子相当于取数据即出栈操作

2. 操作

栈只能在一端进行存数据,另一端是封闭的。

存数据的一端叫做栈顶,存放数据的过程叫做入栈,封闭的一端叫做栈底。

进行数据操作的时候,只有栈顶元素是对外可见的,其他元素对外是不可见的,故只能操作栈顶的数据。

在这里插入图片描述
在这里插入图片描述

3. 实现

所有的数据结构都可以通过组和链表来实现。
通过数组实现的栈叫顺序栈,链表实现的栈叫链式栈

1)顺序栈(常用)

a. 核心

按照栈的要求,在数组中存取数据。

b. 要素

创建一个数组。

栈顶指针(top),实时指向栈顶元素。当 top=-1,表示空栈。

在这里插入图片描述

c. 入栈

元素 x 入栈,a[++ top] = x,如下图所示。

在这里插入图片描述

// 入栈代码
void push(int element){
   //首先需要判断栈是否已满
   if(top == size-1) {
       throw new StackOverflowError();
   }
   else {
       a[++top] = element;
   }
}
d. 出栈

元素 2 出栈,top --,如下图所示。

在这里插入图片描述
在这里插入图片描述

// 出栈代码
int pop(){
	//首先需要判断栈是否为空栈
	if(top == -1){
	    throw new EmptyStackException();
	}
	return a[top--];  // 返回要删除的元素
}

2)链式栈


三、队列

1. 类比举例

队列可以类比汽车依次过隧道的例子。先到的车辆先出隧道,后到的车辆后出隧道。

在这里插入图片描述

2. 操作

队列在一端存数据,另一端取数据。

存数据的一端叫做队尾,取数据的一端叫做队头。

存数据的操作叫做入队,取数据的操作叫做出队。

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一个写代码的修车工

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

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

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

打赏作者

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

抵扣说明:

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

余额充值