java中LinkedList集合類實現棧和佇列

  棧和佇列是兩種特殊的線性表,它們的邏輯結構和線性表相同,只是其運算規則較線性表有更多的限制,故又稱它們為運算受限的線性表。

linkedlist數據結構是一種雙向的鏈式結構,每一個對象除了數據本身外,還有兩個引用,分別指向前一個元素和後一個元素,和數組的順序存儲結構(如:arraylist)相比,插入和刪除比較方便,但速度會慢一些。

棧的定義
   棧(stack)是限制僅在表的一端進行插入和刪除運算的線性表。
(1)通常稱插入、刪除的這一端為棧頂(top),另一端稱為棧底(bottom)。
(2)當表中沒有元素時稱為空棧。
(3)棧為後進先出(last in first out)的線性表,簡稱為lifo表。
   棧的修改是按後進先出的原則進行。每次刪除(退棧)的總是當前棧中"最新"的元素,即最後插入(進棧)的元素,而最先插入的是被放在棧的底部,要到最後才能刪除。

實現代碼:
package com.gc.list;
import java.util.*;
public class mystack {

 private linkedlist ll=new linkedlist();
 
 public void push(object o){
ll.addfirst(o);
 }
 public object pop(){
return ll.removefirst();
 }
 
 public object peek(){
return ll.getfirst();
 }
 
 public boolean empty(){
return ll.isempty();
 }
 
 public static void main(string[] args){
mystack ms=new mystack();
ms.push("zhangsan");
ms.push("lisi");
ms.push("wangwu");

system.out.println(ms.pop());
system.out.println(ms.peek());
system.out.println(ms.pop());
system.out.println(ms.empty());
 }
}


佇列定義
   佇列(queue)是只允許在一端進行插入,而在另一端進行刪除的運算受限的線性表

(1)允許刪除的一端稱為隊頭(front)。
(2)允許插入的一端稱為隊尾(rear)。
(3)當佇列中沒有元素時稱為空佇列。
(4)佇列亦稱作先進先出(first in first out)的線性表,簡稱為fifo表。

實現代碼:
package com.gc.list;
import java.util.*;
public class myqueue {

 private linkedlist ll=new linkedlist();
 public void put(object o){
ll.addlast(o);
 }
 //使用removefirst()方法,返回佇列中第一個數據,然後將它從佇列中刪除
 public object get(){
return ll.removefirst();
 }
 
 public boolean empty(){
return ll.isempty();
 }
 
 public static void main(string[] args){
myqueue mq=new myqueue();
mq.put("zhangsan");
mq.put("lisi");
mq.put("wangwu");

system.out.println(mq.get());
system.out.println(mq.get());
system.out.println(mq.get());
system.out.println(mq.empty());

 }
}