不要求邏輯上相鄰的元素在物理儲存上相鄰,使用指標來表示元素之間的邏輯關係。
優點:
對線性表進行插入刪除操作時不需要移動大量的元素,只需要修改對應元素的指標域即可,方便省時;不需要為整個線性鍊錶提前分配足夠的儲存空間;
當節點不再使用時,可以將儲存空間進行及時的**。
template class listnode //預設建構函式listnode(listnode(const type &item, listnode*next1 = nullptr))
//帶引數的建構函式
type data; //節點資料域
listnode*next; //節點指標域
指示鍊錶的第乙個結點的指標稱為頭指標head,最後乙個結點沒有後繼結點,指標域為空null或^,對於僅含有表頭元素的鍊錶為空表。
鍊錶有三種型別,單鏈表、迴圈鍊錶與雙向鍊錶三種。
抽象鍊錶類的定義如下:
template class ablinklist :public ablist設定函式listnode*getnext(listnode&n)
type get(int i); //獲得第i元素
bool set(type x, int i); //設定i處元素
listnode*find(int i); //獲得i處元素位置
listnode*find1(type value); //獲得元素value位置
void makeempty();
virtual bool insert(type value, int i) = 0;
virtual bool remove(int i) = 0;
virtual bool remove1(type value) =0;
protected:
listnode*head;
};
//節點元素設定函式取值函式template bool ablinklist::set(type x, int i)
//獲得第i元素值函式清空鍊錶函式template type ablinklist::get(int i)
//清空鍊錶函式搜尋資料元素值為value的結點templatevoid ablinklist::makeempty()
length = 0;
}
//獲得元素value位置定位函式templatelistnode*ablinklist::find1(type value)
//獲得i處元素位置用c語言描述:templatelistnode*ablinklist::find(int i)
return p;
}
插入操作:在值為a的結點前面插入值為x的結點,若煉表為空,則x為其頭結點,若表中無a元素,在將x插入鍊錶末尾。
//將元素x對應為鏈**式刪除操作:在頭指標為head的鍊錶中將值為a的結點刪除node *getlistnode(int x)
//資料域x,指標域空
return(s);
}node *insertlist(node *head,int a,int x)
if (head->data==a)
q=head;//其它情況,進行查詢
while (q->next!=null && q->next->data!=a)
q=q->next;
s->next=q->next; //插入
q->next=s;
return(head); //返回頭指標
}
q=head; //其它情況,進行查詢
while (q->next!=null && q->next->data!=a)
q=q->next;
if (q->next!=null);//找到,刪除
return(head); //返回頭指標
}
資料結構 線性表鏈式儲存 鍊錶 單鏈表
定義 單鏈表是一種鏈式訪問的資料結構,用一組位址任意的儲存單元存放線性表中的資料元素。鍊錶中的資料是以節點來表示的,每個結點的構成 元素 資料元素的映象 指標 指示後繼元素儲存位置 元素就是儲存資料的儲存單元,指標就是連線每個結點的位址資料。鍊錶特點 根據線性表的長度動態的申請儲存空間,以解決順序儲...
資料結構 線性表鏈式儲存
對於線性鍊錶,有兩種表示方法,一種是包含頭節點的情況,如下圖 一種是不包含頭節點的情況,如下圖 本文中對線性鍊錶的表示,利用的是帶頭節點的定義方式。使用c 實現了線性鍊錶建立,初始化,刪除,插入,清空,遍歷,有序鍊錶合併等操作。煉表頭 頭指標 頭結點 煉表頭 指的是線性表第乙個元素所在結點 頭指標 ...
資料結構 線性表(鏈式儲存)
1 順序表 需要一片連續的記憶體空間,成員可以隨機訪問,訪問效率高 插入刪除資料存在資料搬移的現象,效率低 儲存密度高 鍊錶的特點 不需要連續的記憶體空間,不能隨機訪問元素,訪問效率低 插入刪除資料不存在資料搬移的現象,效率高 儲存密度比較低 2 無頭鍊錶 第乙個節點為資料節點,加入刪除第乙個節點,...