当前位置: 首页 > news >正文

网站服务器租用价格 贴吧网络空间的竞争归根结底是

网站服务器租用价格 贴吧,网络空间的竞争归根结底是,世界购物网站排名,一家专门做房产特卖的网站目录​​​​​​​ 前言 1、栈 2、队列 2.1、实现队列 2.2、循环队列 前言 上一篇中我们介绍了数据结构基础中的《动态数组》,本篇我们继续来学习两种基本的数据结构——栈和队列。 1、栈 特点:栈也是一种线性结构,相比数组&#xff…

目录​​​​​​​

前言

1、栈

 2、队列

2.1、实现队列

2.2、循环队列


前言

上一篇中我们介绍了数据结构基础中的《动态数组》,本篇我们继续来学习两种基本的数据结构——栈和队列。

1、栈

特点:栈也是一种线性结构,相比数组,栈对应的操作是数组的子集,只能从一端添加元素,也只能从同一端取出元素,这一端称为栈顶。栈是一种后进先出的数据结构,即Last In First Out(LIFO)。

上面说到栈对应的操作是数组的子集,因此我们就基于上一篇中实现的动态数组来快速的实现一个栈。

首先定义一个接口,定义相关功能方法:

然后让栈来实现接口中的具体功能:

import arr.Array;public class ArrayStack<E> implements Stack<E> {Array<E> array;public ArrayStack(int capacity) {array = new Array<>(capacity);}public ArrayStack() {array = new Array<>();}public int getCapacity() {return array.getCapacity();}@Overridepublic int getSize() {return array.getSize();}@Overridepublic boolean isEmpty() {return array.isEmpty();}@Overridepublic void push(E e) {array.addLast(e);}@Overridepublic E pop() {return array.removeLast();}@Overridepublic E peek() {return array.getLast();}@Overridepublic String toString() {StringBuilder res = new StringBuilder();res.append("Stack").append("[");for (int i = 0; i < array.getSize(); i++) {res.append(array.get(i));if (i != array.getSize() - 1) {res.append(",");}}res.append("] Top");return res.toString();}
}

写一个测试方法:

执行结果如下:

 2、队列

2.1、实现队列

队列也是一种线性结构,相比数组,队列对应的操作也是数组的子集,队列只能从一端(队尾)添加元素,只能从另一端(队首)取出元素。队列是一种先进先出的数据结构(先到先得),即:First In First Out(FIFO)。

由于队列对应的操作同样是数组的子集,那么我们让然也是基于上一篇中实现的动态数组来快速的实现一个栈。 

定义一个接口,定义相关功能方法:

然后让队列来实现接口中的具体功能:

import arr.Array;public class ArrayQueue<E> implements Queue<E> {private Array<E> array;public ArrayQueue(int capacity) {array = new Array<>(capacity);}public ArrayQueue(){array = new Array<>();}public int getCapacity(){return array.getCapacity();}@Overridepublic int getSize() {return array.getSize();}@Overridepublic boolean isEmpty() {return array.isEmpty();}@Overridepublic void enqueue(E e) {array.addLast(e);}@Overridepublic E dequeue() {return array.removeFirst();}@Overridepublic E getFront() {return array.getFirst();}@Overridepublic String toString() {StringBuilder res = new StringBuilder();res.append("Queue:").append("Front [");for (int i = 0; i < array.getSize(); i++) {res.append(array.get(i));if (i != array.getSize() - 1) {res.append(",");}}res.append("] tail");return res.toString();}
}

同样的写一个测试类:

 

执行结果如下:

2.2、循环队列

初始时front和tail都是指向下标为0的位置,当有元素入队时,tail指向该元素的下一个位置((tail+1)%capacity),元素出队时,front向后移动一个位置,因此,循环队列有元素出队时,无需让所有的元素都移动一个位置,只需让front的指向移动一次即可,示意图如下:

  ​​​​​​​

下面我们来通过代码看一下循环队列该怎么实现:

public class LoopQueue<E> implements Queue<E> {private E[] data;private int front, tail;private int size;public LoopQueue(int capacity) {data = (E[]) new Object[capacity + 1];front = 0;tail = 0;size = 0;}public LoopQueue() {this(10);}public int getCapacity() {return data.length - 1;}@Overridepublic int getSize() {return size;}@Overridepublic boolean isEmpty() {return front == tail;}@Overridepublic void enqueue(E e) {if ((tail + 1) % data.length == front) {resize(getCapacity() * 2);}data[tail] = e;tail = (tail + 1) % data.length;size++;}private void resize(int newCapacity) {E[] newdata = (E[]) new Object[newCapacity + 1];for (int i = 0; i < size; i++) {newdata[i] = data[(i + front) % data.length];}data = newdata;front = 0;tail = size;}@Overridepublic E dequeue() {if (isEmpty()) {throw new IllegalArgumentException("队列为空");}E ret = data[front];data[front] = null;front = (front + 1) % data.length;size--;if (size == getCapacity() / 4 && getCapacity() / 2 != 0) {resize(getCapacity() / 2);}return null;}@Overridepublic E getFront() {if (isEmpty()) {throw new IllegalArgumentException("队列为空");}return data[front];}@Overridepublic String toString() {StringBuilder res = new StringBuilder();res.append(String.format("Queue: size=%d,capacity=%d\n", size, getCapacity())).append("front [");for (int i = front; i != tail; i = (i + 1) % data.length) {res.append(data[i]);if ((i+1)%data.length != tail) {res.append(",");}}res.append("] tail");return res.toString();}
}

同样的测试程序:

执行结果如下:

好了,关于栈和队列的内容就说这么多吧,咱们下期再会!

祝:工作顺利!

http://www.yayakq.cn/news/477505/

相关文章:

  • 响应式网站的制作大沥南庄网站建设
  • 浙江省住房建设厅网站首页网络安全厂家排名
  • 电子商务网站开发过程wordpress注册侧边栏
  • 人流什么时间做 新闻源网站推广网站平台
  • 网站色彩搭配原则可以做推广的网站
  • 贵阳网站建设 赶集郑州自助建站软件
  • 网站基建建设五大搜索引擎 三大门户网站
  • 百度蜘蛛对视频网站的抓取wordpress账户打通
  • 中国风网站模板航发网上商城
  • 电影网站推荐哪个网站好wordpress获取网址
  • 网站建设 自己的服务器最新新闻事件摘抄
  • 外卖网站开发方案点击seo软件
  • 快刷网站网站形式
  • asp网站制作设计教程如何制作网站
  • 怎样弄免费网站上海建立公司网站
  • 电商网站 案例网页制作代码html制作一个网页
  • 制作网站找云优化有没有专做自驾游的网站
  • 免费网站在线收看衡量网站质量的标准
  • wordpress建站是什么志愿服务网站开发
  • kesioncms企业网站蓝色模板p2p理财网站开发流程图
  • 济南优化网站的哪家好网站添加背影音乐怎么做
  • 哈尔滨企业网站seo网络编程软件
  • 成都市城乡建设厅官方网站聊城做网站的公司信息
  • 访问网站速度很慢行政部建设公司网站
  • asp.net搭建网站自己怎么建设收费电影网站
  • 2002年网站建设公司商城网站建设制作
  • 国内做的比较好的数据网站wordpress自带搜索
  • s001网站建设wordpress显示运行时间
  • 网站开发新技术探索米拓cms
  • 黑龙江省建设网站首页一个网站的二级目录在另一台服务器上_怎么做