Java資料結構之 鏈式棧 迴圈佇列

2021-08-19 19:22:19 字數 2279 閱讀 7682

一. 鏈式棧

之前已經用陣列實現了棧,用鏈棧也遵循先進後出的特點即可。

用鍊錶實現入棧和出棧可以考慮頭插法入棧和尾插法入棧。但不採用尾插法,因為這樣每入棧或出棧一次,都要對棧進行一次遍歷,增加了程式的複雜性。因此採用頭插法,得到的鏈棧棧底元素為鍊錶末尾元素,棧頂元素是頭結點後的元素。

class linkstack

public entry(int val)

} public linkstack()

}

1. 入棧

public void push(int val)
2. 出棧

public boolean pop()

return false;

}

3. 得到棧頂元素

public int gettop()

return -1;

}

4.列印棧內元素

public void show()

system.out.println();

}

測試一下

二. 迴圈佇列

佇列是一種先進先出的線性資料結構,即在隊頭進行刪除,在隊尾進行插入。隊頭用front表示,隊尾用rear表示。

實現順序隊考慮用陣列,但由於陣列的長度有限,可能會出現如圖假溢位的情況

迴圈佇列

因此,我們構造的迴圈佇列應該如下圖

接下來看一下關於佇列的基本操作

class queuelink

public queuelink(int size)

}

1. 判斷隊空

front = rear,隊列為空

public boolean isempty()
2.判斷隊滿

front = (rear + 1)%allsize

public boolean isfull()

return false;

}

3.入隊

public void push(int val)

this.elem[this.rear] = val;

this.rear = (this.rear + 1) % allsize;//不能rear++,rear一直在0~allsize-1的範圍內

this.usedsize++;//佇列長度加一

}

4. 出隊

public void pop()

this.elem[front] = -1;//給出隊的位置標誌-1,表示這個元素已出隊

this.front = (this.front + 1)%allsize;//front後移一位

this.usedsize--;//佇列長度減一

}

5.得到隊頭

public int gettop()

return this.elem[front];//把front位置的元素return出去

}

三. 用兩個棧實現乙個佇列

public class testdemo8 

s1.push(val);

} public void popque()

while(s1.top > 1)

s1.top = 0;

while(s2.top>0)

}public int getfront()

return s1.elem[0];

} public void show()

system.out.println();

} public static void main(string args)

}

資料結構之鏈式棧

好久不見,前面我們學過了資料結構的順序棧。今天我們來學習下鏈式棧的實現,鏈式棧的話,還是要利用前面我們實現的鏈式鍊錶,不知道鏈式鍊錶的,出門左轉,前面就有介紹。第七個例子,鏈式棧的實現 注 把我們先前實現的鏈式鍊錶的標頭檔案和實現檔案包含進來 標頭檔案 ifndef linkstack h defi...

資料結構 棧之鏈式儲存

跟鍊錶結構一樣,只是多了條限制 只能從煉表頭插入和刪除。原始碼 include include include include 棧的鏈式儲存 typedef struct data typedef struct stack 初始化空棧 void initstack stack s 判斷是否為空棧 i...

資料結構 鏈式棧

編譯錯誤 passing const linkstack as this argument discards qualifiers fpermissive 解決方法 c 中const 引用的是物件時只能訪問該物件的const 函式,因為其他函式有可能會修改該物件的成員,編譯器為了避免該類事情發生,會...