本文目錄一覽:
java多線程添加學生 用鏈式結構怎麼寫
Java隊列的鏈式存儲結構及實現:
類似於使用鏈式結構保存線性表,也可以採用鏈式結構來保存隊列的元素,採用鏈式存儲結構的隊列也被稱為鏈隊列。
對於鏈隊列而言,由於程序需要從rear端添加元素,然後從front端刪除元素,因此考慮對鏈隊列增加front、rear兩個引用變數,使他們分別指向鏈隊列的頭、尾兩個節點。
1、插入隊列
對於鏈隊列而言,插入操作的實現非常簡單,只要創建一個新節點,讓原rear節點的next指向新節點,在讓rear指向新節點即可。
2、移除隊列
對於鏈隊列而言,刪除操作的實現也是非常的簡單,只要將原front節點指向原front節點的next節點,當然不要忘記釋放原front節點的引用。
JAVA集合中的隊列:
從JDK
1.5開始,java的集合框架提供了一個Queue介面,該介面代表了一個隊列。實現該介面或者實現繼承了該介面的類可以當做隊列來使用。Queue里包含了 6
個方法,用於代表隊列
所包含的3個標誌性方法,如下所示:
(1)插入:在rear端插入元素。
(2)移除:在front端刪除元素。
(3)訪問:在front端訪問元素。
JDK提供的工具類非常強大,它分別代表線性表、隊列、棧三種數據結構提供了兩種實現:順序結構和鏈式結構。雖然LinkedList工具類的功能非常強大,既可以作為線性表來使用、又可以作為隊列來使用,還可作為棧來使用,但對大部分程序而言,使用Arraylist和ArrayDeque時性能可能比LinkedList更好。
java用鏈表實現棧
public Object setEle(Object element)
{
Object oldElement = this.element;
this.element = element;
return oldElement;
}
是啥意思,給值還return??把這函數刪了
public Linked()
{
nextNode = null;
element = null;
}
改成
public Linked(Object element)
{
this.element = element;
nextNode = null;
}
我要用java實現一個棧,基本操作就是出棧入棧。請問如何實現效率比較高。
//這是JDK提供的棧
import java.util.Stack;
public class UsingStack {
public static void main(String[] args) {
//構造棧對象,使用類型限制,只能存儲Integer數據
StackInteger s = new StackInteger();
//1、2、3依次入棧
s.push(1);
s.push(2);
s.push(3);
//3、2、1依次出棧
System.out.println(s.pop());
System.out.println(s.pop());
System.out.println(s.pop());
}
}
//這是我寫的順序結構的棧
import java.util.EmptyStackException;
import java.util.Vector;
public class UsingStack{
public static void main(String[] args){
//構造棧對象,使用類型限制,只能存儲Integer數據
MyStackInteger s = new MyStackInteger();
//1、2、3依次入棧
s.push(1);
s.push(2);
s.push(3);
//3、2、1依次出棧
System.out.println(s.pop());
System.out.println(s.pop());
System.out.println(s.pop());
}
}
/**
* 棧類
* @author developer_05
* @param T
*/
class MyStackT extends VectorT{
/**
* 構造方法
*/
public MyStack(){
}
/**
* 入棧方法
* @param item 待入棧的元素
* @return 返回入棧的元素
*/
public T push(T item) {
addElement(item);
return item;
}
/**
* 出棧方法(同步處理)
* @return 返回出棧元素
*/
public synchronized T pop() {
T obj;
int len = size();
if (len == 0)
throw new EmptyStackException();
obj = elementAt(len – 1);
removeElementAt(len – 1);
return obj;
}
/**
* 判斷棧是否為空的方法
* @return 返回true(棧空)或false(棧非空)
*/
public boolean empty() {
return size() == 0;
}
private static final long serialVersionUID = 1L;
}
java語言中用LinkList實現堆棧
棧和隊列是兩種特殊的線性表,它們的邏輯結構和線性表相同,只是其運算規則較線性表有更多的限制,故又稱它們為運算受限的線性表。
LinkedList數據結構是一種雙向的鏈式結構,每一個對象除了數據本身外,還有兩個引用,分別指向前一個元素和後一個元素,和數組的順序存儲結構(如:ArrayList)相比,插入和刪除比較方便,但速度會慢一些。
棧的定義
棧(Stack)是限制僅在表的一端進行插入和刪除運算的線性表。
(1)通常稱插入、刪除的這一端為棧頂(Top),另一端稱為棧底(Bottom)。
(2)當表中沒有元素時稱為空棧。
(3)棧為後進先出(Last In First Out)的線性表,簡稱為LIFO表。
棧的修改是按後進先出的原則進行。每次刪除(退棧)的總是當前棧中”最新”的元素,即最後插入(進棧)的元素,而最先插入的是被放在棧的底部,要到最後才能刪除。
實現代碼:
package com.weisou.dataStruct;
import java.util.LinkedList;
@SuppressWarnings(“unchecked”)
public class MyStack {
LinkedList linkList = new LinkedListObject();
public void push(Object object) {
linkList.addFirst(object);
}
public boolean isEmpty() {
return linkList.isEmpty();
}
public void clear() {
linkList.clear();
}
// 移除並返回此列表的第一個元素
public Object pop() {
if (!linkList.isEmpty())
return linkList.removeFirst();
return “棧內無元素”;
}
public int getSize() {
return linkList.size();
}
public static void main(String[] args) {
MyStack myStack = new MyStack();
myStack.push(2);
myStack.push(3);
myStack.push(4);
System.out.println(myStack.pop());
System.out.println(myStack.pop());
}
}
隊列定義
隊列(Queue)是只允許在一端進行插入,而在另一端進行刪除的運算受限的線性表
(1)允許刪除的一端稱為隊頭(Front)。
(2)允許插入的一端稱為隊尾(Rear)。
(3)當隊列中沒有元素時稱為空隊列。
(4)隊列亦稱作先進先出(First In First Out)的線性表,簡稱為FIFO表。
實現代碼:
package com.weisou.dataStruct;
import java.util.LinkedList;
/**
*
* @author gf
* @date 2009-11-13
*/
public class MyQueue {
LinkedList linkedList = new LinkedList();
//隊尾插
public void put(Object o){
linkedList.addLast(o);
//隊頭取 取完並刪除
public Object get(){
if(!linkedList.isEmpty())
return linkedList.removeFirst();
else
return “”;
}
public boolean isEmpty(){
return linkedList.isEmpty();
}
public int size(){
return linkedList.size();
}
public void clear(){
linkedList.clear();
}
/**
* @param args
*/
public static void main(String[] args) {
MyQueue myQueue= new MyQueue();
myQueue.put(1);
myQueue.put(2);
myQueue.put(3);
System.out.println(myQueue.get());
}
}
原創文章,作者:AGGH,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/131292.html