鏈式線性表是資料結構裡很簡單但也是很常見的資料結構,相比順序儲存的線性表,可以更快的實現新增和刪除操作,但讀取速度比順序結構會慢。鏈式線性表的關鍵在於,每個資料儲存為節點形式。不僅僅儲存有資料,還有乙個引用「next」指向下乙個節點。鏈式結構還可以再擴充套件為雙向鍊錶、迴圈鍊錶等等。基本原理一樣,只是增加了引用。下面就是最簡單的鏈式線性表的實現的源**,會有潛在的bug,不然人人都可以寫底層資料結構啦!但是不影響我們理解這種資料結構:
package mywork.c20150605;
import mywork.c20150605.linklist.node;
/* * a ****** demo for linklist
* hanchun 2015.6.5
*/public class linklistdemo
public node(t data, node next) }
node header;
node tail;
int size; //記錄纖線性表長度
public linklistdemo()
public linklistdemo(node element)
//返回線性表大小
public int getsize()
//判斷線性表是否為空
public boolean isempty()
return false; }
//返回索引處節點
public node getnodebyindex(int index)
node current = header;
for(int i = 0; i < size && current != null; current = current.next, i++)
} return null; }
public int locate(t element)
} return -1; }
/* * 之所以要強調頭尾節點處的情況,是因為:頭尾節點直接影響
* 後面對鏈式線性表的操作,如果是在中間插入,對頭尾引用是
* 沒有影響的。
*/public void addatheader(t element)
size++; }
//在表尾插入元素
public void add(t element)else
size++; }
//在指定位置插入節點
public void insert(t element, int index)
if(header == null)elseelse
} size++; }
/* * 刪除指定位置節點,該方法有待完善,比如刪除的線性表是空的,很明顯
* 這段**會丟擲nullpointexception
*/public void delete(int index)
if(index == 0)else
size--; }
public string tostring()
stringbuilder sb = new stringbuilder("[");
for(node current = header; current != null ; current = current.next)
int len = sb.length();
}}
乙個簡單的Matrix實現
我們直接來看 吧 matrix.h pragma once include using namespace std 矩陣類 class matrix 下面是實現和測試的 matrix.cpp include matrix.h include include matrix matrix void ma...
實現乙個簡單的 shared ptr
智慧型指標的作用有如同指標,但會記錄有多少個 shared ptrs 共同指向乙個物件。這便是所謂的引用計數。一旦最後乙個這樣的指標被銷毀,也就是一旦某個物件的引用計數變為 0,這個物件會被自動刪除。shared ptr 的實現機制其實就是在拷貝構造時使用同乙份引用計數。同乙個 shared ptr...
實現乙個簡單的LinkedList
今天把jdk1.8的linkedlist原始碼看了一下,發現使用的資料結構就是雙向鍊錶。自己也動手實現了乙個簡易版本的雙向鍊錶 package com.natsuki.lesson2 author date 2018 12 29 description 自己根據雙向鍊錶定義乙個簡易linkedlis...