1. 程式人生 > >資料結構之單鏈表的增刪改查(java版)

資料結構之單鏈表的增刪改查(java版)

talk is cheap,show you zhe code;

/*
 * 單鏈表的遍歷是從第0個節點開始  沿著next鏈,一次訪問每個節點並且每個節點只能訪問一次
 * 當頭結點head為空時  此連結串列為空連結串列
 * 
 * 插入操作
 * 1空表插入  判斷是否為空  插入的節點為該鏈的頭結點
 * 2頭插入
 *  Node<T> p = new Node<x,null>;//建立值為x的p結點
 *  p.next= head;                //p.next指向頭結點
 *  head=p;
 *  
 * 3
 */
public class
Node<T> { public T data; public Node<T> next; public Node (T data,Node<T> next){ this.data=data; this.next=next; } public Node(){ this(null,null); } public String toString(){ if(data==null) return null; return
data.toString(); } }
package dataStructure.linkList;



/*
 * 頭結點 單鏈表的儲存結構中總是帶著頭結點的,忽略其資料域
 */
public class SingleList<T> {
    public Node<T> head;

    public SingleList() {
        this.head = new Node<T>();                        //呼叫Node的無參構造方法
    }

    public SingleList
(T[] values) { this(); // 建立空單鏈表只有頭結點 Node<T> rear = this.head; for (int i = 0; i < values.length; i++) { rear.next = new Node<T>(values[i], null); //為當前結點的next賦值,並將下一結點指向空 即尾插入 rear = rear.next; // 挪到下一結點 } } public boolean isEmpty() { // 頭結點 單鏈表的儲存結構中總是帶著頭結點的,忽略其資料域 // 頭結點為之後為空 則連結串列為空 return this.head.next == null; } public T get(int i) { Node<T> p = this.head.next; for (int j = 0; p != null && j < i; j++) { p = p.next; // 獲得後一個結點 } return (i >= 0 && p != null) ? p.data : null; } public void set(int i) { } public int size() { int size=0; Node<T> p = this.head.next; if(this.head.next==null){ //判斷第一個結點是否為空 return 0; } do{ p=p.next; size++; }while(p!=null); return size; } /* * @param the loaction of insert * * @param value * 此處採取了容錯措施 若i<0則插入最前 若i>size則插入在尾部 */ public void insert(int i, T x) { if (x == null) { throw new NullPointerException("x==null"); } Node<T> front = this.head; for (int j = 0; front.next != null && j < i; j++) { front = front.next; // 遍歷到插入處 } front.next = new Node<>(x, front.next); } public void insert(T x){ insert(Integer.MAX_VALUE,x); } public void remove(int i) { Node<T> front = this.head; for (int j = 0; front.next != null && j < i; j++) { front = front.next; // 遍歷到i-1處 } if (front.next != null && i >= 0) { front.next = front.next.next; } } public String toString() { String str = this.getClass().getName() + "("; for (Node<T> p = this.head.next; p != null; p = p.next) { str += p.data.toString(); if (p.next != null) { str += ","; } } str += ")"; return str; } public static void main(String[] args) { SingleList<String> testhead = new SingleList<String>(); System.out.println(testhead.head); System.out.println(testhead.head.data); Integer[] valuesnumber = { 1, 5, 3, 5, 6, 86, 89, 4, 5, 35, 7 }; String[] values = { "A", "B", "C", "D" }; SingleList<String> test = new SingleList<String>(values); System.out.println(test.toString()+test.size()); System.out.println("索引為1 的結點值" + test.get(1).toString()); test.insert(-1, "insertlocation"); System.out.println(test.toString()); test.remove(2); test.insert("fd"); System.out.println(test.toString()); SingleList<Integer> test2 = new SingleList<Integer>(valuesnumber); System.out.println(test2.toString()); } }

相關推薦

資料結構單鏈刪改java

talk is cheap,show you zhe code; /* * 單鏈表的遍歷是從第0個節點開始 沿著next鏈,一次訪問每個節點並且每個節點只能訪問一次 * 當頭結點head為空時 此連結串列為空連結串列 * * 插入操作 * 1空

單鏈是否有環Java

題目:判斷一個帶頭結點的單鏈表L是否有環 解題思路: 咋看之下,這題還真不好解,於是又一些投機取巧的人,在訪問單鏈表中元素的時候,用一個比較大的數N控制訪問元素的個數,他們認為如果在訪問到第N個元素之

單鏈就地逆置Java

題目:有一個線性表(a1,a2,a3,...,an),採用帶頭節點的單鏈表L儲存,設計一個演算法將其就地逆置,線性表變為(an,...a3,a2,a1)。所謂“就地”指輔助儲存空間為O(1)。

資料結構單鏈插入刪除操作

#include<iostream> using namespace std; typedef struct LNode { int data; struct LNode *next; }LNode; void createListR(LNode *C, int a[], int n

C#資料結構單鏈(LinkList)例項詳解

本文例項講述了C#資料結構之單鏈表(LinkList)實現方法。分享給大家供大家參考,具體如下: 這裡我們來看下“單鏈表(LinkList)”。在上一篇《C#資料結構之順序表(SeqList)例項詳解》的最後,我們指出了:順序表要求開闢一組連續的記憶體空間,而且插入/刪除元素時,為了保證元素的順序

演算法與資料結構單鏈

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

資料結構單鏈

從今天起開始資料結構系列的分享,今天分享的是單鏈表。單鏈表大概是大概是每個資料結構 初學者的必經之路,下面結合一個小小的工程深入學習單鏈表的使用–簡易客戶管理系統。 ps:如果還不清楚單鏈表是什麼的小夥伴自行百度,在此不在贅述 專案結構 如

初識資料結構單鏈——Java語言

import java.util.Scanner; public class LinkList{ ListNode H = new ListNode(0); /** *尾插法建立連結串列 */ public void creatLinkList(){ ListNode f

資料結構單鏈

//判斷單鏈表是否有環:思路:設定兩個"指標",一個走一步,一個走兩步,若存在環,則一定會存在有相交的位置點 public boolean isLoop(Linklist LNode){ Node p=head.next; Node q=h

關於資料結構單鏈的C++實現

1、連結串列List的基本單元是節點Node,因此想要操作方便,就必須為每一步打好基礎,Node的基本結構如下: class Node { public: int data; Node *next; Node(int da=0,Node *p=NULL) { t

mongoose建立資料結構,實現基本刪改功能

首先建議建立如下目錄結構的一個express專案目錄結構 --server --bin//這個檔案目錄是放置express專案啟動項檔案 --models//放置對應資料的結構 --public//前端頁面以及靜態資源 --routes//後端業務邏輯 --util//公

演算法學習資料結構單鏈反轉,兩兩反轉

  連結串列反轉,就是將連結串列從1->2->3->4->5這種形式反轉成5->4->3->2->1這種形式,目前能想到的有兩種實現方式,對於什麼是連結串列,連結串列的一些性質就不多說了,直接說兩種實現方式,實現方式如下:   1,用頭節點插入法新建連結串列。反

資料結構單鏈反轉

    前些天在CSDN上看到一篇老外公司招程式設計師的報道,說想招到會寫程式的人真是很難,許多來應聘的人連單鏈表反轉也寫不出來,我就想自己試一下。就像很多演算法一樣,單鏈表反轉思路挺簡單,但是要寫出沒有明顯漏洞的程式碼還是需要一段時間的。     單鏈表反轉的基本思路有兩

資料結構單鏈C++實現

很早前就想用C++來實現那些常用的資料結構。 今天就算是個開端把。還是那句話,看的再多不如自己動手寫一遍。 按照自己的思路寫。首先你得熟悉那種結構的特點,然後才能談實現。  連結串列是一種很常用的資料結構。支援在任意地方對資料進行增刪改查。 但是不支援隨機訪問。所以複雜度

資料結構單鏈的幾個簡單演算法題

        單鏈表作為最基本的資料結構,在程式設計中有著非常重要的運用。最近自己閒下來,正在整理資料結構和演算法的一些程式題,現將自己的程式碼貼出來與大家分享。如有不對之處,請大家指正。(好吧 ,這麼簡單的題目應該不會有錯,都測試過了。況且說的好像很多人看我部落格一樣。

hibernate對單刪改CRUD

增刪改查: save update delete get/load(查詢單個記錄) import java.util.Date; import org.hibernate.Session; import org.hibernate.Session

資料庫和刪改新手向

資料庫的增刪改查: 使用的是mysql資料庫,完成資料庫的建立,刪除,修改,查詢; 登入介面   1.資料庫的建立,create database db_name;          回車,此時我們建立了一個名為db_name的資料庫,這

使用CoreData進行資料刪改附Demo

       本文主要介紹簡單CoreData的使用,從建立工程到進行資料的增刪改查,關於CoreData中的名詞解釋什麼的不做過多介紹。        首先,建立一個CoreData工程,在建立工程的選項處勾選Use CoreData,建立成功後,會在AppDelegat

DML、DQL與單刪改20190215下午

正向 port sun tin bin schema safe word ping MariaDB [db1]> select * from student;+----+------+-----+--------+-------+| id | name | age |

Java專案案例---登入註冊和刪改jsp+servlet

登入註冊和增刪改查(jsp+servlet) (一)功能介紹 1.使用者輸入正確的密碼進行登入 2.新使用者可以進行註冊 3.登入後顯示學生的資訊表 4.可以新增學生 5.可以修改學生已有資訊 6.可以刪除已有學生 7.可以顯示登入的使用者學號(每個頁面都可以通過呼叫session顯示) 8