在實現鍊錶類的資料結構時,可採用的方式一般有動態鍊錶和靜態鍊錶的方式。
動態鍊錶的定義:
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...