一、線性表概述
線性表是最簡單的一種的資料結構,由若干相同特徵的資料元素組成的有限序列
沒有前驅元素的的結點稱為線性表的頭結點,沒有後繼元素的結點稱為線性表的尾結點
線性表按照儲存元素的結構,可以分為順序表和煉表
二、順序表
2.1基本實現
順序表是在計算機記憶體中以陣列形式存在的線性表結構,即記憶體中用一組位址連續的儲存單元,依次儲存線性表中的元素,使得線性表中的相鄰的資料元素儲存在相鄰的物理記憶體位址中。
public class orderlistelse {
twnode newnode = new twnode(t, last, null);
last.next = newnode;
last = newnode;
n++;
* 獲取具體位置處資料域的值
* @param index
* @return
public t get(int i) {
if(i<0 || i>n) {
system.out.println("檢索位置非法...");
twnode pre = head;
for(int index=0;indexpre = pre.next;
return (t) pre.next.item;
* 移除鍊錶元素
* @param t
public t remove(int i) {
if(isempty()) {
return null;
if(i<0 || i>n) {
system.out.println("檢索位置非法...");
twnode pre = head;
for(int index=0;indexpre = pre.next;
//i位置處的結點
twnode currnode = pre.next;
//i位置的下乙個結點
twnode currnext = currnode.next;
pre.next = currnext;
currnext.pre = pre;
n--;
if(isempty()) {
last = null;
return (t) currnode.item;
* 返回鍊錶中首次出現該元素的位置
* @param t
* @return
public int indexof(t t) {
twnode pre = head;
for(int index=0;indexpre = pre.next;
if(t.equals(pre.item)) {
return index;
return -1;
* 獲取雙向鍊錶第乙個元素
* @return
public t getfirst() {
if(isempty()) {
return null;
return (t) head.next.item;
* 獲取雙向鍊錶第二個元素
* @return
public t getlast() {
if(isempty()) {
return null;
return (t) last.item;
@override
public iteratoriterator() {
return null;
public class myiterator implements iterator{
twnode node;
public myiterator() {
node = head;
@override
public boolean hasnext() {
return node.next != null;
@override
public t next() {
return (t) node.next.item;
3.4迴圈鍊錶
迴圈鍊錶,顧名思義,及鍊錶要成環,在單向鍊錶中,尾結點的指標域為null,不指向任何結點,當鍊表要成環時,讓尾結點的指標域指向頭結點即可。
迴圈鍊錶的構造:
public class node{
//結點元素
public t item;
//指向下乙個結點
public node next;
public node(t item,node next) {
this.item = item;
this.next = next;
public static void main(string args) {
node node1 = new node(1, null);
node node2 = new node(2, null);
node node3 = new node(3, null);
node node4 = new node(4, null);
node node5 = new node(5, null);
node1.next = node2;
node2.next = node3;
node3.next = node4;
node4.next = node5;
node5.next = node1;
3.5線性表時間複雜度
鍊錶和順序表的時間複雜度比較:
鍊錶的元素查詢,都需要從鍊錶頭部開始,往後遍歷,直到找到目標元素位置,時間複雜度為o(n),順序表的元素查詢,由於陣列元素索引的存在,直接獲取索引處元素的值即可,時間複雜度為o(1)
鍊錶的插入,每次都需要找到i位置前面處的元素,進行結點的新增和鍊錶的連線操作,時間複雜度為o(n),順序表的插入,每次都需要找到i位置,並將原i處和其後面的元素向後移動,時間複雜度為o(n)
鍊錶的刪除,每次都需要找到i位置處的元素,進行鍊錶刪除的連線操作,時間複雜度為o(n),順序表的插入,每次都需要找到i位置,並將原i處後面的元素向前移動,時間複雜度為o(n)
優缺點:
資料結構 三 線性表
零個或多個資料元素的有限序列 在較複雜的線性表中,乙個資料元素可以由諾幹個資料項組成 結構 define listsize 100 線性表的最大長度 typedef int datatype typedef struct seqlist datatype是資料元素型別,可以根據需要定義,可以使用se...
資料結構 線性表(順序表 鍊錶)
線性表 1 線性表是一種邏輯結構,表示一種一對一的邏輯關係,除首節點和尾節點,每個結點只有乙個前驅結點和乙個後繼結點 2 兩種實現的物理結構 順序儲存,鏈式儲存 順序表 1 定義 用一組位址連續的儲存單元,一次儲存線性表中的元素,使得邏輯位置相鄰的元素物理位置也相鄰。2 特點 順序表元素的位序從1開...
資料結構(三)線性表 順序儲存結構
線性表 1 不同應用,操作不同。2 對於複雜的操作,可以用這些資料的組合來操作。3 介面不同。順序儲存結構及實現 連續儲存單元依次儲存 可通過位置儲存元素 可以隨機訪問 無需額外空間 必須預留空間 各函式只是引數型別不一樣,其功能在本質上完全相同。若能寫一段通用 適用於各種資料型別,則 的可重用性大...