資料結構與演算法之棧和佇列

2021-07-26 10:30:44 字數 1448 閱讀 4795

棧和佇列以及優先佇列是比陣列和其他資料結構更加抽象的結構。主要通過介面對棧、佇列

和優先順序佇列進行定義,這些介面表明通過它們可以完成的操作,而它們的主要實現機制對

使用者來說是不可見的。

棧每一次只允許訪問乙個資料項--最後插入的資料項,所以棧又叫先進後出

在這裡用陣列定義乙個棧,**如下:

public class stackx

public void push(long j)

public long pop()

public long peek()

public boolean isempty()

public boolean isfull()

}關於棧的常用操作一般用彈棧(pop)操作和入棧(push)操作

彈棧的時候先取出棧頂指標所對應的元素,然後棧頂指標向下移動乙個位置,

當然這裡還有乙個操作就是判斷棧是否為空,如果為空,就彈出錯誤說:棧為空

入棧的時候,棧頂指標先向上移動乙個位置,然後再把元素查到棧頂指標對應的位置,

對了,在插入元素之前,應該有乙個判斷,就是判斷棧是否已經滿了。

棧的效率:由於棧的插入和刪除操作都只進行了一次移動:所以棧的時間複雜度為:o(1)

佇列和棧實際上是差不多的,只不過棧是先進後出,而佇列是先進先出,。

public class queue

public void insert(long j)

quearray[++rear]=j;

nitems++;

}public long remove()

nitems--;

return temp;

}public long peekfront()

public boolean isempty()

public boolean isfull()

public int size()

}佇列的操作也包括插入和刪除,在插入之前,要判斷佇列是否已經滿了,在刪除之前要判斷

佇列是否已經為空,不過上面定義的佇列並不是迴圈佇列。所謂迴圈佇列就是把佇列的頭和尾

連到一塊。

優先順序佇列:

優先順序佇列是比棧和佇列更專用的資料結構,優先順序佇列和佇列的區別是在優先順序佇列中資料

項是按關鍵字的值有序:可能是關鍵字最小的資料項總是在隊頭,也有可能是關鍵字最大的數

據項總是在隊頭,下面的**是關鍵字最小的資料項總是在隊頭:

public class priorityq

public void insert(long item)elseelse

}quearray[j+1]=item;

nitems++;}}

public long remove()

public long peekmin()

public boolean isempty()

public boolean isfull()

資料結構與演算法之棧和佇列

1.棧 package com.thinkofdatastruct.fourunit public class stackdemo 帶引數的構造方法 public stackdemo int maxsize 加入資料 public void push int data pop移除資料 public ...

資料結構與演算法 棧和佇列

棧 是限制在表的一端進行插入和刪除運算的線性表。棧又稱後進先出簡稱lifo表 佇列 也是一種運算受限的線性表。它只允許在標的一端進行插入,而在另一端進行刪除。佇列亦稱先進先出fifo表 1.棧與佇列的區別 1 佇列先進先出,棧先進後出。2 對插入和刪除操作的 限定 棧是限定只能在表的一端進行插入和刪...

資料結構與演算法 棧和佇列

棧 stack 有些地方稱為堆疊,是一種容器,可存入資料元素 訪問元素 刪除元素,它的特點在於只能允許在容器的一端 稱為棧頂端指標,英語 top 進行加入資料 英語 push 和輸出資料 英語 pop 的運算。沒有了位置概念,保證任何時候可以訪問 刪除的元素都是此前最後存入的那個元素,確定了一種預設...