棧鏈式存儲java實現(棧鏈式存儲java實現什麼)

本文目錄一覽:

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-hant/n/131292.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
AGGH的頭像AGGH
上一篇 2024-10-03 23:44
下一篇 2024-10-03 23:44

相關推薦

  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • Java 8 Group By 會影響排序嗎?

    是的,Java 8中的Group By會對排序產生影響。本文將從多個方面探討Group By對排序的影響。 一、Group By的概述 Group By是SQL中的一種常見操作,它…

    編程 2025-04-29

發表回復

登錄後才能評論