鍊錶的學習筆記

2021-10-03 23:21:51 字數 2008 閱讀 9505

在實現鍊錶類的資料結構時,可採用的方式一般有動態鍊錶和靜態鍊錶的方式。

動態鍊錶的定義:

typedef

struct linknode

lnode,

*linklist ;

通過定義可以看出,動態鍊錶的物理儲存結構不是連續的,由單獨的結點串聯起來組成,使用時,可定義帶頭結點與不帶頭結點的動態鍊錶,一般在使用時會引入乙個指向鍊錶結點的指標,通過這個指針對鍊錶進行操作。

下面是對鍊錶的一部分操作:

linklist create_link()

void

insert

(linklist &l,

int i,

int e)

if(p||cntreturn error;

newnode-

>next=p-

>next;

p->next=newnode;

}int

length

(linklist &l)

return i;

}int

locate

(linklist &l,

int e)if(

!p)return error;

}

迴圈鍊錶

在定義時只需使鍊錶的尾結點的指標域指向鍊錶的頭結點,即可構成迴圈量表,可以在鍊錶的任意位置迴圈,只是迴圈條件需要改變。

雙向鍊錶

對結點加入指向它的前驅的指標,可便於在某結點前插入新的結點。

定義方法:

typedef

struct linknode

lnode,

*linklist;

靜態鍊錶實際上是利用結構體陣列來實現鍊錶的思想,結構體陣列由資料域以及用於儲存相對位置的成員組成。

定義:

typedef

struct slinklist

slinklist[maxsize]

,componend;

靜態鍊錶較特殊的一點是還存在一條將空閒位置連線起來的鍊錶,一般將其稱之為備用鍊錶,備用鍊錶的作用是**陣列中未使用或之前使用過(目前未使用)的儲存空間,留待後期使用。備用鍊錶的頭結點一般為下標為零的結點,且備用鍊錶的頭結點通常不儲存資料元素,資料鏈表的頭結點一般使用下表為1的結點,可以置空,方便對其後繼元素進行刪除、插入新元素等操作。

#include

#include

#define maxsize 10

using

namespace std;

typedef

int elemtype;

typedef

struct slinklist

componend,slinklist[maxsize]

;//建立備用表

void

create_list

(slinklist &l)

l[i-1]

.cur=0;

//將備用鍊錶的最後乙個結點指向頭結點

}nt malloc_list

(slinklist &l)

return i;

//返回的i作為可用節點的下標

}void

display_list

(slinklist &l)

printf

("elem[%d]=%d"

,j,l[i]

.data)

;//列印資料鏈表最後乙個元素

}int

search_elem

(slinklist &l,elemtype x)

i=l[i]

.cur;}if

(x==l[i]

.data)

return0;

}

最好使用靜態鍊錶的表頭代替上述操作中從i=2開始向後進行操作的**,表頭可以隨刪除插入等操作做出改變,可以令演算法更為靈活。

學習筆記 鍊錶 鍊錶入門

重新學習程式語言日記,2011年12月29日 09 17分 定義乙個結構體 struct linkhead,p1,p2 首先定義了乙個結構體,結構體包括指標域,資料域。這個結構體就是你鍊錶裡面的節點。每個節點都包括了資料域,指標域。有了這麼乙個結構體。肯定就需要初始化這個結構體了。寫個函式來初始化鍊...

鍊錶學習筆記 順序鍊錶

順序鍊錶的主要思想就是使用乙個整型陣列來儲存資料的指標。在建立記憶體的時候如圖,用後面的陣列來儲存指標。大量使用 給void重新起個名字 封裝使用的資料j 讓其對使用者是透明的 typedef void seqlist typedef void seqlistnode seqlist seqlist...

鍊錶學習筆記 雙向鍊錶

這次 寫的是迴圈鍊錶,用的是節點連線。雙向鍊錶相比與一般鍊錶要注意的地方就是 頭部插入和尾部插入 不要進行空指標操作。非鍊錶尾部的處理 if next null node pre current 如果是在頭部插如 則沒有 前節點 if i 0 tlist lenght return 0 dlinkl...