国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當前位置: 首頁 > news >正文

國家水資源監(jiān)控能力建設網(wǎng)站semir是什么牌子衣服

國家水資源監(jiān)控能力建設網(wǎng)站,semir是什么牌子衣服,中山網(wǎng)站定制公司,陳木勝導演拍完怒火重案走的嗎目錄??????? 前言 1、棧 2、隊列 2.1、實現(xiàn)隊列 2.2、循環(huán)隊列 前言 上一篇中我們介紹了數(shù)據(jù)結(jié)構基礎中的《動態(tài)數(shù)組》,本篇我們繼續(xù)來學習兩種基本的數(shù)據(jù)結(jié)構——棧和隊列。 1、棧 特點:棧也是一種線性結(jié)構,相比數(shù)組&#xff…

目錄???????

前言

1、棧

?2、隊列

2.1、實現(xiàn)隊列

2.2、循環(huán)隊列


前言

上一篇中我們介紹了數(shù)據(jù)結(jié)構基礎中的《動態(tài)數(shù)組》,本篇我們繼續(xù)來學習兩種基本的數(shù)據(jù)結(jié)構——棧和隊列。

1、棧

特點:棧也是一種線性結(jié)構,相比數(shù)組,棧對應的操作是數(shù)組的子集,只能從一端添加元素,也只能從同一端取出元素,這一端稱為棧頂。棧是一種后進先出的數(shù)據(jù)結(jié)構,即Last In First Out(LIFO)。

上面說到棧對應的操作是數(shù)組的子集,因此我們就基于上一篇中實現(xiàn)的動態(tài)數(shù)組來快速的實現(xiàn)一個棧。

首先定義一個接口,定義相關功能方法:

然后讓棧來實現(xiàn)接口中的具體功能:

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();}
}

寫一個測試方法:

執(zhí)行結(jié)果如下:

?2、隊列

2.1、實現(xiàn)隊列

隊列也是一種線性結(jié)構,相比數(shù)組,隊列對應的操作也是數(shù)組的子集,隊列只能從一端(隊尾)添加元素,只能從另一端(隊首)取出元素。隊列是一種先進先出的數(shù)據(jù)結(jié)構(先到先得),即:First In First Out(FIFO)。

由于隊列對應的操作同樣是數(shù)組的子集,那么我們讓然也是基于上一篇中實現(xiàn)的動態(tài)數(shù)組來快速的實現(xiàn)一個棧。?

定義一個接口,定義相關功能方法:

然后讓隊列來實現(xiàn)接口中的具體功能:

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();}
}

同樣的寫一個測試類:

?

執(zhí)行結(jié)果如下:

2.2、循環(huán)隊列

初始時front和tail都是指向下標為0的位置,當有元素入隊時,tail指向該元素的下一個位置((tail+1)%capacity),元素出隊時,front向后移動一個位置,因此,循環(huán)隊列有元素出隊時,無需讓所有的元素都移動一個位置,只需讓front的指向移動一次即可,示意圖如下:

?????????

下面我們來通過代碼看一下循環(huán)隊列該怎么實現(xiàn):

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();}
}

同樣的測試程序:

執(zhí)行結(jié)果如下:

好了,關于棧和隊列的內(nèi)容就說這么多吧,咱們下期再會!

祝:工作順利!

http://m.aloenet.com.cn/news/34261.html

相關文章:

  • 黃岡黃頁寧波網(wǎng)絡推廣seo軟件
  • 珠海營銷營網(wǎng)站建設公司培訓機構不退費最有效方式
  • 深圳網(wǎng)站建設 推薦xtdseo百度系app有哪些
  • 做網(wǎng)站算軟件開發(fā)么長尾關鍵詞在線查詢
  • 建設網(wǎng)站開通網(wǎng)線多少錢資源網(wǎng)站優(yōu)化排名優(yōu)化
  • 北京網(wǎng)站推廣|網(wǎng)站制作|網(wǎng)絡推廣|網(wǎng)站建設7個湖北seo網(wǎng)站推廣策略
  • 沈陽微信網(wǎng)站搜索引擎優(yōu)化的要點
  • 三亞網(wǎng)站建設哪家好760關鍵詞排名查詢
  • 做網(wǎng)站用win還是li注冊百度賬號
  • 湖南建設人力資源官方網(wǎng)站萬能軟文模板
  • 廣西做網(wǎng)站口碑營銷方案
  • wordpress去掉導航欄武漢seo關鍵字推廣
  • 中山專業(yè)制作網(wǎng)站武漢網(wǎng)絡推廣自然排名
  • 彭陽門戶網(wǎng)站建設網(wǎng)絡推廣的方式和途徑有哪些
  • 做網(wǎng)站搞個物理服務器引流推廣犯法嗎
  • 網(wǎng)站沒有問題但是一直做不上首頁seo托管
  • 網(wǎng)站程序設計百度鏈接收錄提交入口
  • 學做效果圖的網(wǎng)站有哪些新手電商運營從哪開始學
  • 網(wǎng)站底部樣式智能建站平臺
  • 網(wǎng)站開發(fā)技術項目代碼搜索南寧seo外包要求
  • 做網(wǎng)站業(yè)務員怎么樣為企業(yè)策劃一次網(wǎng)絡營銷活動
  • 怎么做新網(wǎng)站的推廣下載優(yōu)化大師并安裝
  • 正規(guī)網(wǎng)站建設官網(wǎng)上海做網(wǎng)絡口碑優(yōu)化的公司
  • 電商網(wǎng)絡運營浙江搜索引擎優(yōu)化
  • 鄭州企業(yè)網(wǎng)站優(yōu)化哪家便宜2022適合小學生的簡短新聞
  • 山西網(wǎng)站制作公司百度小說官網(wǎng)
  • 照片做視頻ppt模板下載網(wǎng)站好seo關鍵詞排名優(yōu)化價格
  • 做電影網(wǎng)站涉及的侵權問題網(wǎng)盤搜索神器
  • 做釣魚網(wǎng)站要什么工具中企動力做網(wǎng)站推廣靠譜嗎
  • wap網(wǎng)站微信一鍵登錄網(wǎng)絡營銷案例有哪些