一、思路:針對線性表的鏈式儲存,其實我們最主要的是要考慮如何將鍊錶節點和業務節點如何合在一起,意思就是我們的鍊錶的api函式,操作的是鍊錶節點,而我們如何將業務節點和鍊錶節點相繫結,這樣的話,這樣的話我們操作鍊錶節點,其實就是操作的業務節點。
二.通用鍊錶:鍊錶操作還是只操作鍊錶節點,但是鍊錶節點存在業務節點的開始,那麼鍊錶節點和業務節點的位址就是相通的,這樣可以將業務節點偽裝成鍊錶節點。如圖所示:
三.對於通用鍊錶模型的刪除和插入資料,模型圖
標頭檔案定義為:
#ifndef __seqlist__h
#define __seqlist__h
#include#include#includetypedef struct _list_node
list_node;
typedef struct _seqlist
seqlist;
seqlist* seqlist_create(int cap);
int seqlist_length(seqlist *seq);
list_node * seqlist_get(seqlist *seq,int n);
int seqlist_insert(seqlist *seq,list_node *node,int n);
list_node *seqlist_delete(seqlist *seq,int n);
#endif
#include#include#include#include "seqlist.h"
seqlist* seqlist_create()
tmp->length = 0;
tmp->header.pnext = null;
return tmp;
}int seqlist_capacity(seqlist *seq)
return seq->capacity;
}int seqlist_length(seqlist *seq)
return seq->length;
}list_node * seqlist_get(seqlist *seq,int n)
if(seq->length <=0)
if(n > seq->length -1)
list_node * pcurrent = null;
pcurrent = (list_node *)seq;
for(i =0;i <= n;i++)
return pcurrent;
}int seqlist_insert(seqlist *seq,list_node *node,int n)
list_node * pcurrent = (list_node *)seq;
for(i = 0; i < n;i++)
if(n == seq->length) //對於尾部插入也有個特殊處理
seq->length++;
node->pnext = pcurrent->pnext;
pcurrent->pnext = node;
return ret;
}list_node *seqlist_delete(seqlist *seq,int n)
list_node * pcurrent = (list_node *)seq;
for(i = 0;i < n;i++)
if(n == seq->length -1) //對於尾部刪除有個特殊處理
list_node *tmp = pcurrent->pnext;
pcurrent->pnext = pcurrent->pnext->pnext;
seq->length--;
return tmp;
}
總結:
1.鍊錶通用模型關鍵點在於:將鍊錶節點和業務節點想繫結,通過c語言的指標強制型別轉換來實現的;
2.鍊錶的刪除和插入,主要關鍵在於定義乙個輔助指標,通過這個輔助指標來實現相關的業務邏輯,這也是比較關鍵的
第二節 線性表 順序表 鍊錶 逐個擊破
一.線性表 1.前言 線性表,全名為線性儲存結構。使用線性表儲存資料的方式可以這樣理解,即 把所有 一對一邏輯關係的 資料用一根線兒串 起來,再儲存到物理空間中 這根線有兩種串聯形式,如下圖,即順序儲存 集中存放 和鏈式儲存 分散存放 圖 3a 是多數人想到的儲存方式,而圖 3b 卻少有人想到。我們...
第二週第二節課 線性表的鏈式儲存結構
what 線性表的鏈式儲存結構稱為鍊錶。其中每個儲存結點不僅包含元素本身的資訊 稱為資料域 而且包含表示元素之間的邏輯關係的資訊,在c c 語言中採用指標來實現,稱為指標域。單鏈表 在每個結點中除包含有資料以外只設定乙個指標域,用於指向其後繼結點。雙鏈表 在每個結點中除包含有資料以外設定兩個指標域,...
資料結構 線性表 C語言
include include define maxsize 20 define elemtype int typedef struct sqlist 順序表型別 void createlist sqlist l,elemtype a,int n 由a中的n個元素建立順序表 l length k 設...