資料結構之單鏈表的增刪改查(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