JAVA單向鏈表實現

JAVA單向鏈表實現

單向鏈表

鏈表和數組一樣是一種最常用的線性數據結構,兩者各有優缺點。數組我們知道是在內存上的一塊連續的空間構成,所以其元素訪問可以通過下標進行,隨機訪問速度很快,但數組也有其缺點,由于數組的內存是一次性申請的,就像基本數據類型一樣,一次性申請所需的空間,在數據量變動很大的時候就容易導致預先申請的內存不夠或內存浪費。在者就是在存的是有序數列時進行數據插入會比較麻煩,所以鏈表就是為了彌補數組的不足的一種數據結構。相反的,鏈表對于變動很大的數據有很大的適應性,而且其對于數據插入和刪除很方便。而鏈表的缺點就是對于內存的浪費,鏈表除了存儲需要的數據還要存儲額外的指針。鏈表的節點示意圖如下:

?

看到指針你可能會想:“我們這不是java語言嗎?沒有指針啊!”,沒錯!在我對java了解不是很深的時候我也這么想,但是我要說的是java雖然不允許程序員像c/c++那樣使用指針,但java語言本身的實現還是離不開指針的(變量名其實就是指向jvm中一塊內存的指針,我就不詳述)。請看以下節點的代碼:

//節點數據結構
private class Node{
private Object data=null;//數據域
private Node next=null;//下一個節點
private Node(Object data) {
this.data=data;
}
}

這里的節點class我是寫成inner class的形式,后面有完整代碼。還有一點就是這里object類型,這里也可以使用泛型

//鏈表數據結構
public class SingleLinkList {
int size=0;//鏈表長度,可有可無,有的話很容易實現很多鏈表的特殊操作
Node head=null;//頭節點
public SingleLinkList() {
this.size=0;this.head=null;
}
}

有了這兩個類,然后再來實現鏈表的一些基本操作:插入頭節點,刪除頭節點,刪除指定節點,查找指定節點。直接看完整源代碼。

package singleLinkList;
?
public class SingleLinkList {
?
int size=0;//鏈表長度
Node head=null;

public SingleLinkList() {
this.size=0;this.head=null;
}

//節點數據結構
private class Node{
private Object data=null;//數據域
private Node next=null;//下一個節點
private Node(Object data) {
this.data=data;
}
}

//表頭添加元素
public Object addHead(Object data) {
Node newHead=new Node(data);
if(size==0) {
this.head=newHead;
}
else {
newHead.next=this.head;
this.head=newHead;
}
size++;
return data;
}

//刪除表頭元素
public Object deleteHead() {
if(size>0) {
Node node=this.head;
this.head=this.head.next;
size--;
}
return null;
}

//查找指定元素
public Node findData(Object data) {
if(size==0)return null;
Node cur=this.head;

轉載于:https://www.cnblogs.com/Davidhwj/p/10433387.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/388180.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/388180.shtml
英文地址,請注明出處:http://en.pswp.cn/news/388180.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

軟件公司管理基本原則

商業人格:獨立履行責任 獨立堅持原則兩大要素:1)靠原則做事,原則高于一切。2)靠結果做交換,我要什么我清楚兩個標準: 1)我不是孩子,我不需要照顧2)承認邏輯,我履行我的責任社會人心態: 1)用社會…

201771010102 常惠琢《面向對象程序設計(java)》第八周學習總結

1、實驗目的與要求 (1) 掌握接口定義方法; (2) 掌握實現接口類的定義要求; (3) 掌握實現了接口類的使用要求; (4) 掌握程序回調設計模式; (5) 掌握Comparator接口用法; (6) 掌握對象淺層拷貝與深層拷貝方法&#xff1b…

新版 Android 已支持 FIDO2 標準,免密登錄應用或網站

谷歌剛剛宣布了與 FIDO 聯盟達成的最新合作,為 Android 用戶帶來了無需密碼、即可登錄網站或應用的便捷選項。 這項服務基于 FIDO2 標準實現,任何運行 Android 7.0 及后續版本的設備,都可以在升級最新版 Google Play 服務后,通過指…

t-sne原理解釋_T-SNE解釋-數學與直覺

t-sne原理解釋The method of t-distributed Stochastic Neighbor Embedding (t-SNE) is a method for dimensionality reduction, used mainly for visualization of data in 2D and 3D maps. This method can find non-linear connections in the data and therefore it is hi…

oracle操作

imp kfqrlcs/kfqrlcshx fileC:\kfqrlcs.dmp fully //創建臨時表空間 create temporary tablespace kfqrlcs_temp tempfile C:\oracledata\kfqrlcs_temp.dbf size 32m autoextend on next 32m maxsize 8048m extent management local; //tempfile參數必須有 //創建數據表…

strust2自定義攔截器

1.創建一個攔截器類,繼承MethodFilterInterceptor類,實現doIntercept方法 package com.yqg.bos.web.interceptor;import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor; import com.y…

Android Studio如何減小APK體積

最近在用AndroidStudio開發一個小計算器,代碼加起來還不到200行。但是遇到一個問題,導出的APK文件大小竟然達到了1034K。這不科學,于是就自己動手精簡APK。下面我們大家一起學習怎么縮小一個APK的大小,以hello world為例。 新建工…

js合并同類數組里面的對象_通過同類群組保留估算客戶生命周期價值

js合并同類數組里面的對象This is Part I of the two-part series dedicated to estimating customer lifetime value. In this post, I will describe how to estimate LTV, on a conceptual level, in order to explain what we’re going to be doing in Part II with the P…

C#解析HTML

第一種方法:用正則表達式來分析 [csharp] view plaincopy 轉自網上的一個實例:所有的href都抽取出來: using System; using System.Net; using System.Text; using System.Text.RegularExpressions; namespace HttpGet { c…

幫助開發人員學習

在瀏覽器中使用真實環境學習新技術 https://www.katacoda.com/ 轉載于:https://www.cnblogs.com/zuxing/p/9829143.html

【轉】SASS用法指南

SASS用法指南 阮一峰的,偏sass用法教程sass入門 偏實戰的基礎用法

com編程創建快捷方式中文_如何以編程方式為博客創建wordcloud?

com編程創建快捷方式中文Recently, I was in need of an image for our blog and wanted it to have some wow effect or at least a better fit than anything typical we’ve been using. Pondering over ideas for a while, word cloud flashed in my mind. 💡Us…

ETL技術入門之ETL初認識

ETL技術入門之ETL初認識 分類: etl2014-07-10 23:11 3021人閱讀 評論(2) 收藏 舉報數據倉庫商業價值etlbi目錄(?)[-] ETL是什么先說下背景知識下面給下ETL的詳細解釋定義現在來看下kettle的transformation文件一個最簡單的E過程例子windows環境 上圖左邊的是打開表…

ActiveSupport::Concern 和 gem 'name_of_person'(300?) 的內部運行機制分析

理解ActiveRecord::Concern: 參考:include和extend的區別: https://www.cnblogs.com/chentianwei/p/9408963.html 傳統的模塊看起來像: module Mdef self.included(base)# base(一個類)擴展了一個模塊"ClassMethods", b…

Python 3.8.0a2 發布,面向對象編程語言

百度智能云 云生態狂歡季 熱門云產品1折起>>> Python 3.8.0a2 發布了,這是 3.8 系列計劃中 4 個 alpha 版本的第 2 個。 alpha 版本旨在更加易于測試新功能和 bug 修復狀態,以及發布流程。在 alpha 階段會添加新功能,直到 beta 階…

基于plotly數據可視化_如何使用Plotly進行數據可視化

基于plotly數據可視化The amount of data in the world is growing every second. From sending a text to clicking a link, you are creating data points for companies to use. Insights that can be drawn from this collection of data can be extremely valuable. Every…

關于Oracle實時數據庫的優化思路

關于實時數據庫的優化思路 背景 大概168個換熱站機組,每套機組將近400個點,整體有6萬多個點需要進行實時更新。數據庫里其中有一個監控參數表(yxjk_jkcs),每一個點位屬性都在里面存放,其中有一個字段CS_VALUE 是存放被更新的實時…

【轉】使用 lsof 查找打開的文件

在 UNIX 環境中,文件無處不在,這便產生了一句格言:“任何事物都是文件”。通過文件不僅僅可以訪問常規數據,通常還可以訪問網絡連接和硬件。在有些情況下,當您使用 ls 請求目錄清單時,將出現相應的條目。在…

ESLint簡介

ESLint簡介 ESLint是一個用來識別 ECMAScript 并且按照規則給出報告的代碼檢測工具,使用它可以避免低級錯誤和統一代碼的風格。如果每次在代碼提交之前都進行一次eslint代碼檢查,就不會因為某個字段未定義為undefined或null這樣的錯誤而導致服務崩潰&…

數據科學與大數據是什么意思_什么是數據科學?

數據科學與大數據是什么意思Data Science is an interdisciplinary field that uses a combination of code, statistical analysis, and algorithms to gain insights from structured and unstructured data.數據科學是一個跨學科領域,它結合使用代碼,…