java數據結構隊列
『壹』 java數據結構之何為隊列
java是一門面向對象的語言,但是也要用到數據結構的,比如讓你求個迷宮出口
『貳』 高手請幫忙用java版的數據結構,設置3個隊列,實現入隊出隊。
import java.util.ArrayList;
/**
*
* @author 獄韜
*/
public class SnakeBody {
private int size=0; //隊列的長度
private int cursor=-1; //指針
private ArrayList<int[]> list=null; //存儲器
public SnakeBody() {
list=new ArrayList<int[]>(); //存儲器
}
//返回底部的數據
public int[] getLast(){
return list.get(list.size()-1);
}
//返回頂部的數據
public int[] getFirst(){
return list.get(0);
}
//壓入數據
public void put(int[] arry){
list.add(arry);
}
//刪除底部數據
public void removeLast(){
list.remove(list.size()-1);
}
//重置
public void reSet(){
list=new ArrayList<int[]>(); //存儲器
}
//刪除頂部數據
public void removeFirst(){
list.remove(0);
}
//返回數據長度
public int size(){
return list.size();
}
public static void main(String[] args) {
SnakeBody data = new SnakeBody();
for(int i=0;i<10;i++){
data.put(new int[]{0,i});
}
System.out.println(data.getFirst()[0]+"-------"+data.getFirst()[1]);
System.out.println(data.getLast()[0]+"-------"+data.getLast()[1]);
data.removeLast();
System.out.println(data.getFirst()[0]+"-------"+data.getFirst()[1]);
System.out.println(data.getLast()[0]+"-------"+data.getLast()[1]);
}
}
『叄』 java常用的幾種數據結構,堆棧,隊列,數組,鏈
下面給你簡單介紹:堆棧,隊列,數組,鏈表
堆棧
採用該結構的集合,對元素的存取有如下的特點:
先進後出(即,存進去的元素,要在後它後面的元素依次取出後,才能取出該元素)。例如,子彈壓進彈夾,先壓進去的子彈在下面,後壓進去的子彈在上面,當開槍時,先彈出上面的子彈,然後才能彈出下面的子彈。
棧的入口、出口的都是棧的頂端位置
壓棧:就是存元素。即,把元素存儲到棧的頂端位置,棧中已有元素依次向棧底方向移動一個位置。
彈棧:就是取元素。即,把棧的頂端位置元素取出,棧中已有元素依次向棧頂方向移動一個位置。
隊列
採用該結構的集合,對元素的存取有如下的特點:
先進先出(即,存進去的元素,要在後它前面的元素依次取出後,才能取出該元素)。例如,安檢。排成一列,每個人依次檢查,只有前面的人全部檢查完畢後,才能排到當前的人進行檢查。隊列的入口、出口各佔一側。
數組
採用該結構的集合,對元素的存取有如下的特點:
查找快:通過索引,可以快速訪問指定位置的元素
增刪慢:
指定索引位置增加元素:需要創建一個新數組,將指定新元素存儲在指定索引位置,再把原數組元素根據索引,復制到新數組對應索引的位置。
鏈表
採用該結構的集合,對元素的存取有如下的特點:
多個節點之間,通過地址進行連接。例如,多個人手拉手,每個人使用自己的右手拉住下個人的左手,依次類推,這樣多個人就連在一起了。
節點:兩個部分:數據域(存儲的數值),指針域(存儲地址)
查找慢:想查找某個元素,需要通過連接的節點,依次向後查找指定元素
增刪快:
增加元素:操作如左圖,只需要修改連接下個元素的地址即可。
刪除元素:操作如右圖,只需要修改連接下個元素的地址即可。
『肆』 java中的「queue類」是什麼,有什麼作用
java中的queue類是隊列數據結構管理類。在它里邊的元素可以按照添加它們的相同順序被移除。
隊列通常(但並非一定)以 FIFO(先進先出)的方式排序各個元素。不過優先順序隊列和 LIFO 隊列(或堆棧)例外,前者根據提供的比較器或元素的自然順序對元素進行排序,後者按 LIFO(後進先出)的方式對元素進行排序。無論使用哪種排序方式,隊列的頭都是調用remove()或poll()所移除的元素。在 FIFO 隊列中,所有的新元素都插入隊列的末尾。其他種類的隊列可能使用不同的元素放置規則。每個Queue實現必須指定其順序屬性。
offer 添加一個元素並返回true 如果隊列已滿,則返回false
poll 移除並返問隊列頭部的元素 如果隊列為空,則返回null
peek 返回隊列頭部的元素 如果隊列為空,則返回null
put 添加一個元素 如果隊列滿,則阻塞
take 移除並返回隊列頭部的元素 如果隊列為空,則阻塞
element 返回隊列頭部的元素 如果隊列為空,則拋出一個NoSuchElementException異常
add 增加一個元索 如果隊列已滿,則拋出一個IIIegaISlabEepeplian異常
remove 移除並返回隊列頭部的元素 如果隊列為空,則拋出一個
NoSuchElementException異常
注意:poll和peek方法出錯進返回null。因此,向隊列中插入null值是不合法的。
還有帶超時的offer和poll方法重載,例如,下面的調用:
boolean success = q.offer(x,100,TimeUnit.MILLISECONDS);
嘗試在100毫秒內向隊列尾部插入一個元素。如果成功,立即返回true;否則,當到達超時進,返回false。同樣地,調用:
Object head = q.poll(100, TimeUnit.MILLISECONDS);
如果在100毫秒內成功地移除了隊列頭元素,則立即返回頭元素;否則在到達超時時,返回null。
阻塞操作有put和take。put方法在隊列滿時阻塞,take方法在隊列空時阻塞。
Queue介面與List、Set同一級別,都是繼承了Collection介面。LinkedList實現了Queue接 口。Queue介面窄化了對LinkedList的方法的訪問許可權(即在方法中的參數類型如果是Queue時,就完全只能訪問Queue介面所定義的方法 了,而不能直接訪問 LinkedList的非Queue的方法),以使得只有恰當的方法才可以使用。BlockingQueue 繼承了Queue介面。
『伍』 java 新手 數據結構中 數組 ,棧 ,隊列, 鏈表, 樹 ,圖 , 堆, 散列表 他們之間存在那種關系啊
他們都是一種存儲數據的方式而已,打個比方,你坐地鐵1號線上班和2號線上班,都能上班只是路線不一樣,他們都是存儲數據的格式,每種數據結構有自己的特點,使用哪種數據格式需要根據具體的需求來選,比如你現在需要有序的存儲一組數據而且還要經常的查詢數據,那麼數組就是最合適的,他有角標可以很容易進行排序和查詢!如果有序但是經常增刪數據,那麼鏈表就是最合適的,他的增刪很快,但是查詢差。每種數據結構有各自的適用條件,根據需求來選擇具體的數據結構,時間久了不需要記憶你都會用了
『陸』 數據結構:關於Java實現的一個隊列,對其中的擴容步驟有疑問答題的都是我爹
這確實有點奇葩,要麼修改resize方法,在進行復制的時候,先判斷一下front和rear的值,如果front不為0,說明進行過出隊列操作,再判斷rear與front的值:
if(front<rear){//fromfronttorear這樣就可以去除多餘的空位置,讓front從0開始}
if(front>rear){
//先復制後半段到新的數組,然後復制前半段到新數組的後面,這就保證0位置的就是隊列的頭
}
這樣的話,就可以理解為什麼resize之後將front置為0,。
不知道這樣的解釋對不對,我看完上面的代碼覺得就是這樣的。
『柒』 在Java數據結構中的布線問題,用隊列和棧都可以找到解,但是隊列可以找到最優解,棧不一定能,分析其原因
因為隊列實際上進行的是廣度優先,求得的是最短距離,也就是最優解
如果用棧得到的一般都不能保證是最短距離,自然也不一定是最優解了
『捌』 簡述隊列和棧的不同,以及在java語言中如何實現這兩個數據結構
隊列形似一水管左右都互通,所以先進入的數據從另一頭先出來。棧形似一個水杯,先進去的肯定被壓在最下面。後進去的肯定在最上面。所以先進去肯定後最後出來。後進去的肯定最先出來。理解這個。你去看相關的代碼沒問題!
『玖』 java版數據結構如何創建一個循環隊列
public class CircleQueue<T> {
private int maxSize;
private int head;//頭部出 始終指向即將被取出的下標
private int tail;//尾部進 始終指向即將賦值的下標
private int size;
//tail和head在隊列為空或為滿的時候重合,用size是否為0來區分
private Object[] array;
public CircleQueue(int maxSize){
this.maxSize=maxSize;
array=new Object[this.maxSize];
}
public synchronized boolean put(T t){
if(size<maxSize){
array[tail]=t;
tail=(tail+1)%maxSize;
size++;
return true;
}else{
return false;
}
}
public synchronized T take(){
if(size>0){
T t=(T) array[head];
head=(head+1)%maxSize;
size--;
return t;
}else{
return null;
}
}
public int size(){
return size;
}
}
『拾』 java 數據結構 隊列的基本應用 合並,復制,檢查是否相同
樓主,你先把Queue 的方法實現,我們才知道怎麼搞!題目的意思估計就是說要通過這幾個方法來實現下面的功能,但你這幾個方法的什麼信息都沒給,實在沒辦法解答!