LinkedList集合 實現棧和隊列


LinkedList集合的底層是鏈表結構實現的,所以可以模擬棧(先進后出)和隊列(先進先出)。

方法:

    addFirst()    //添加元素到列表的起始位置

    addLast()    //添加元素到列表的結束位置

    removeFirst()  //移除列表起始位置的元素

    removeLast()  //移除列表結束位置的元素

    getFirst()    //獲取列表起始位置的元素

    getLast()    //獲取列表結束位置的元素

User類

 1 package queue;
 2 
 3 public class User {
 4 
 5     private int id;
 6     private String account;
 7     private String password;
 8     private String name;
 9 
10     public int getId() {
11         return id;
12     }
13 
14     public void setId(int id) {
15         this.id = id;
16     }
17 
18     public String getAccount() {
19         return account;
20     }
21 
22     public void setAccount(String account) {
23         this.account = account;
24     }
25 
26     public String getPassword() {
27         return password;
28     }
29 
30     public void setPassword(String password) {
31         this.password = password;
32     }
33 
34     public String getName() {
35         return name;
36     }
37 
38     public void setName(String name) {
39         this.name = name;
40     }
41 
42     public User() {
43         super();
44     }
45 
46     public User(int id, String account, String password, String name) {
47         super();
48         this.id = id;
49         this.account = account;
50         this.password = password;
51         this.name = name;
52     }
53 
54     @Override
55     public String toString() {
56         return "User [id=" + id + ", account=" + account + ", password=" + password + ", name=" + name + "]";
57     }
58 
59 }

構造隊列的方法類

 1 package queue;
 2 
 3 import java.util.LinkedList;
 4 
 5 /**
 6  * LinkedList模擬隊列,先進先出
 7  * 
 8  * @author WJY
 9  *
10  */
11 public class Queue<T> {
12 
13     private LinkedList<T> linkedList = new LinkedList<T>();
14 
15     /**
16      * 進隊
17      * 
18      * @param t
19      *            進隊的元素
20      */
21     public void enQueue(T t) {
22         linkedList.addLast(t);
23     }
24 
25     /**
26      * 出隊
27      * 
28      * @return 出隊的元素
29      */
30     public T deQueue() {
31         return linkedList.removeFirst();
32     }
33 
34     /**
35      * 銷毀隊列
36      */
37     public void destroyQueue() {
38         linkedList.clear();
39     }
40 
41     /**
42      * 查看隊首元素
43      * 
44      * @return 隊首的元素
45      */
46     public T queueFirst() {
47         return linkedList.getFirst();
48     }
49 
50     /**
51      * 查看隊尾元素
52      * 
53      * @return 隊尾的元素
54      */
55     public T queueLast() {
56         return linkedList.getLast();
57     }
58 
59     /**
60      * 查看隊列長度
61      * 
62      * @return 隊列的長度
63      */
64     public int queueLength() {
65         return linkedList.size();
66     }
67 
68     /**
69      * 判斷隊列是否為空
70      * 
71      * @return 隊列為空 true 隊列不為空 false
72      */
73     public boolean isEmpty() {
74         return linkedList.isEmpty();
75     }
76 
77     /**
78      * 打印隊列
79      */
80     public String toString() {
81         return linkedList.toString();
82     }
83 
84 }

測試隊列類

 1 package queue;
 2 
 3 import list.User;
 4 
 5 public class Test {
 6 
 7     public static void main(String[] args) {
 8 
 9         User user1 = new User(1, "賬號1", "密碼1", "姓名1");
10         User user2 = new User(2, "賬號2", "密碼2", "姓名2");
11         User user3 = new User(3, "賬號3", "密碼3", "姓名3");
12         User user4 = new User(4, "賬號4", "密碼4", "姓名4");
13         User user5 = new User(5, "賬號5", "密碼5", "姓名5");
14 
15         Queue<User> queue = new Queue<User>();
16 
17         queue.enQueue(user1);
18         queue.enQueue(user2);
19         queue.enQueue(user3);
20         queue.enQueue(user4);
21         queue.enQueue(user5);// 進隊
22 
23         System.out.println("隊首元素:" + queue.queueFirst());
24         System.out.println("隊尾元素:" + queue.queueLast());
25         System.out.println("隊列長度:" + queue.queueLength());
26         System.out.println("隊列是否為空:" + queue.isEmpty());
27         System.out.println(queue.toString());// 打印隊列
28 
29         queue.deQueue();
30         queue.deQueue();
31         queue.deQueue();// 出隊
32 
33         System.out.println("隊首元素:" + queue.queueFirst());
34         System.out.println("隊尾元素:" + queue.queueLast());
35         System.out.println("隊列長度:" + queue.queueLength());
36         System.out.println("隊列是否為空:" + queue.isEmpty());
37         System.out.println(queue.toString());// 打印隊列
38 
39         queue.destroyQueue();// 銷毀隊列
40 
41         System.out.println("隊列長度:" + queue.queueLength());
42         System.out.println("隊列是否為空:" + queue.isEmpty());
43         System.out.println(queue.toString());// 打印隊列
44 
45     }
46 
47 }

測試結果:

隊首元素:User [id=1, account=賬號1, password=密碼1, name=姓名1]
隊尾元素:User [id=5, account=賬號5, password=密碼5, name=姓名5]
隊列長度:5
隊列是否為空:false
[User [id=1, account=賬號1, password=密碼1, name=姓名1], User [id=2, account=賬號2, password=密碼2, name=姓名2], User [id=3, account=賬號3, password=密碼3, name=姓名3], User [id=4, account=賬號4, password=密碼4, name=姓名4], User [id=5, account=賬號5, password=密碼5, name=姓名5]]
隊首元素:User [id=4, account=賬號4, password=密碼4, name=姓名4]
隊尾元素:User [id=5, account=賬號5, password=密碼5, name=姓名5]
隊列長度:2
隊列是否為空:false
[User [id=4, account=賬號4, password=密碼4, name=姓名4], User [id=5, account=賬號5, password=密碼5, name=姓名5]]
隊列長度:0
隊列是否為空:true
[]

 

 

User類

 1 package stack;
 2 
 3 public class User {
 4 
 5     private int id;
 6     private String account;
 7     private String password;
 8     private String name;
 9 
10     public int getId() {
11         return id;
12     }
13 
14     public void setId(int id) {
15         this.id = id;
16     }
17 
18     public String getAccount() {
19         return account;
20     }
21 
22     public void setAccount(String account) {
23         this.account = account;
24     }
25 
26     public String getPassword() {
27         return password;
28     }
29 
30     public void setPassword(String password) {
31         this.password = password;
32     }
33 
34     public String getName() {
35         return name;
36     }
37 
38     public void setName(String name) {
39         this.name = name;
40     }
41 
42     public User() {
43         super();
44     }
45 
46     public User(int id, String account, String password, String name) {
47         super();
48         this.id = id;
49         this.account = account;
50         this.password = password;
51         this.name = name;
52     }
53 
54     @Override
55     public String toString() {
56         return "User [id=" + id + ", account=" + account + ", password=" + password + ", name=" + name + "]";
57     }
58 
59 }

構造棧的方法類

 1 package stack;
 2 
 3 import java.util.LinkedList;
 4 
 5 /**
 6  * LinkedList模擬棧,先進后出
 7  * 
 8  * @author WJY
 9  *
10  */
11 public class Stack<T> {
12 
13     private LinkedList<T> linkedList = new LinkedList<T>();
14 
15     /**
16      * 進棧
17      * 
18      * @param t
19      *            進棧的元素
20      */
21     public void push(T t) {
22         linkedList.addFirst(t);
23     }
24 
25     /**
26      * 出棧
27      * 
28      * @return 出棧的元素
29      */
30     public T pop() {
31         return linkedList.removeFirst();
32     }
33 
34     /**
35      * 銷毀棧
36      */
37     public void destroyStack() {
38         linkedList.clear();
39     }
40 
41     /**
42      * 查看棧頂元素
43      * 
44      * @return 棧頂的元素
45      */
46     public T stackFirst() {
47         return linkedList.getFirst();
48     }
49 
50     /**
51      * 查看棧底元素
52      * 
53      * @return 棧底的元素
54      */
55     public T stackLast() {
56         return linkedList.getLast();
57     }
58 
59     /**
60      * 查看棧長度
61      * 
62      * @return 棧的長度
63      */
64     public int stackLength() {
65         return linkedList.size();
66     }
67 
68     /**
69      * 判斷棧是否為空
70      * 
71      * @return 棧為空 true 棧不為空 false
72      */
73     public boolean isEmpty() {
74         return linkedList.isEmpty();
75     }
76 
77     /**
78      * 打印棧
79      */
80     public String toString() {
81         return linkedList.toString();
82     }
83 
84 }

測試棧類

 1 package stack;
 2 
 3 import list.User;
 4 
 5 public class Test {
 6 
 7     public static void main(String[] args) {
 8 
 9         User user1 = new User(1, "賬號1", "密碼1", "姓名1");
10         User user2 = new User(2, "賬號2", "密碼2", "姓名2");
11         User user3 = new User(3, "賬號3", "密碼3", "姓名3");
12         User user4 = new User(4, "賬號4", "密碼4", "姓名4");
13         User user5 = new User(5, "賬號5", "密碼5", "姓名5");
14 
15         Stack<User> stack = new Stack<User>();
16 
17         stack.push(user1);
18         stack.push(user2);
19         stack.push(user3);
20         stack.push(user4);
21         stack.push(user5);// 進棧
22 
23         System.out.println("棧頂元素:" + stack.stackFirst());
24         System.out.println("棧底元素:" + stack.stackLast());
25         System.out.println("棧長度:" + stack.stackLength());
26         System.out.println("棧是否為空:" + stack.isEmpty());
27         System.out.println(stack.toString());// 打印棧
28 
29         stack.pop();
30         stack.pop();
31         stack.pop();// 出棧
32 
33         System.out.println("棧頂元素:" + stack.stackFirst());
34         System.out.println("棧底元素:" + stack.stackLast());
35         System.out.println("棧長度:" + stack.stackLength());
36         System.out.println("棧是否為空:" + stack.isEmpty());
37         System.out.println(stack.toString());// 打印棧
38 
39         stack.destroyStack();// 銷毀棧
40 
41         System.out.println("棧長度:" + stack.stackLength());
42         System.out.println("棧是否為空:" + stack.isEmpty());
43         System.out.println(stack.toString());// 打印棧
44 
45     }
46 
47 }

測試結果:

棧頂元素:User [id=5, account=賬號5, password=密碼5, name=姓名5]
棧底元素:User [id=1, account=賬號1, password=密碼1, name=姓名1]
棧長度:5
棧是否為空:false
[User [id=5, account=賬號5, password=密碼5, name=姓名5], User [id=4, account=賬號4, password=密碼4, name=姓名4], User [id=3, account=賬號3, password=密碼3, name=姓名3], User [id=2, account=賬號2, password=密碼2, name=姓名2], User [id=1, account=賬號1, password=密碼1, name=姓名1]]
棧頂元素:User [id=2, account=賬號2, password=密碼2, name=姓名2]
棧底元素:User [id=1, account=賬號1, password=密碼1, name=姓名1]
棧長度:2
棧是否為空:false
[User [id=2, account=賬號2, password=密碼2, name=姓名2], User [id=1, account=賬號1, password=密碼1, name=姓名1]]
棧長度:0
棧是否為空:true
[]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM