資料結構學習筆記Day2-單鏈表(用java實現)
阿新 • • 發佈:2018-12-19
一、首先說一下線性表
1. 什麼是線性表,線性表的邏輯特性?
1)有一個頭(表頭),有一個尾(表尾) 2)表頭與表尾之間的元素有且只有一個前驅元素,有且只有一個後繼元素
2.線性表有兩種儲存方式?
順序表和連結串列
3.順序表和連結串列的區別?
1)順序表是一邊連續的儲存空間 連結串列是一片雜湊的儲存空間 2)順序表只要知道表頭就可以快速查詢到其他任何位置的元素。 因為順序表是連續排列的,比如我們知道了1號元素的位置,要想查6號元素的位置,只需將1號元素的位置加5個距離就能立刻知道6號元素的位置。而連結串列則不行,在連結串列中,想要知道某個元素的位置,必須通過該元素的上一個元素的指標去查。 3)連結串列利於資料的插入和刪除操作,而順序表則不利於插入和刪除操作。 在順序表中我們若刪除一個元素,則需將該元素後面的所有元依此前移一位,而連結串列只需將插入位置的前一位元素的指標指向自己,將自己的指標指向插入位置的後一位元素即可。 4)因為連結串列中會有一部分空間用來儲存指標,所以空間利用率會比順序表稍差一些。
二、用java實現簡單的連結串列(單鏈表的插入,刪除操作)
1.首先,連結串列中的節點是一個單獨的物件,我們因該將其抽離出來。
一個節點包括兩個屬性:資料(用於存放資料),和指標(指向下一個節點),所以建立節點類如下:
package myStudy.dataStructure.day2; /** * * @description 節點類 * @author shenrenfeng * @date 2018年11月4日 上午11:14:07 * */ public class Node { private int data;// 節點資料 private Node next;// 節點指標,指向下一個節點 public Node(int data) { this.data = data; this.next = null; } public int getData() { return data; } public void setData(int data) { this.data = data; } public Node getNext() { return next; } public void setNext(Node next) { this.next = next; } }
2、建立單鏈表類
單鏈表至少包括一個屬性:頭節點
package myStudy.dataStructure.day2; /** * * @description 單鏈表 * @author shenrenfeng * @date 2018年11月4日 上午11:16:23 * */ public class SinglyLinkedList { private Node firstNode;// 頭節點 /** * 插入節點(在頭節點之後插入) * @param data */ public void insert(int data) { Node node = new Node(data); if(firstNode == null) { firstNode = node; } else { node.setNext(firstNode.getNext()); firstNode.setNext(node); } } /** * 刪除節點(刪除頭節點) * @return 返回被刪除的頭節點 */ public Node delete() { Node deletedNode = firstNode; firstNode = firstNode.getNext(); return deletedNode; } /** * 展示連結串列資料 */ public void showList() { Node currentNode = firstNode; while(currentNode != null) { System.out.print(currentNode.getData()); System.out.print(" "); currentNode = currentNode.getNext(); } } public Node getFirstNode() { return firstNode; } public void setFirstNode(Node firstNode) { this.firstNode = firstNode; } }
3、進行測試
package myStudy.dataStructure.day2;
/**
*
* @description 測試單鏈表
* @author shenrenfeng
* @date 2018年11月4日 上午11:39:50
*
*/
public class Test {
public static void main(String[] args) {
SinglyLinkedList list = new SinglyLinkedList();
list.insert(9);
list.insert(2);
list.insert(4);
list.insert(8);
list.insert(5);
list.showList();
System.out.println();
list.delete();
list.delete();
list.delete();
list.showList();
}
}
測試結果: 結果說明: 因為一個插入的作為頭節點,所以9在最前面,而後面每次是從頭節點之後插入的,類似倒序,所以插入順序雖然為9 2 4 5 8 輸出結果卻為9 5 8 4 2 刪除是直接將頭節點刪除