感覺寫鍊錶比較考驗對指標的理解。。。
下圖可以方便對鍊錶中指標進行理解
list* l;
//新建鍊錶指標,沒有指向任何東西
l = (list *)malloc
(sizeof
(list)
)//從堆中分配list大小的記憶體空間,賦給l,l就有了指向的空間。
*l //l指向的結構體,一般不用這種寫法(主要是不方便)
l->data //l指向的結構體中的資料
l->next //l指向的結構體中的指標next,乙個指標型別資料
//c語言的鍊錶中,乙個節點的意思就是乙個結構體。
首先是單鏈表
結構體如下
typedef
struct linklistlist;
方法如下
void
initlist
(list *l)
;//初始化鍊錶(建立頭節點)
void
createlist
(list *l)
;//建立鍊錶,先輸入待輸入資料個數,再輸入資料
list*
findnode
(list *l,
int n)
;//找到第n個節點(從1開始)
void
insertnode
(list* l,
int n,
int data)
;//在第n個節點後插入節點
intlistlength
(list* l)
;//返回鍊錶長度
intdelnode
(list *l,
int n)
;//刪除第n個節點
void
printflist
(list *l)
;//輸出所有節點資料
完整**如下
#include
#include
typedef
struct linklistlist;
void
initlist
(list *l)
}void
createlist
(list *l)
for(
int i =
0; i < len; i++
)printf
("end input!\n");
}list*
findnode
(list *l,
int n)
p = p->next;
}return p;
}void
insertnode
(list* l,
int n,
int data)
intlistlength
(list* l)
return len;
}int
delnode
(list *l,
int n)
list *p = pre->next;
pre->next = p->next;
free
(p);
return1;
}void
printflist
(list *l)
printf
("\n");
}
測試**如下
#include
"mylist.h"
intmain()
基本資料結構 鍊錶
鍊錶 鍊錶與陣列的區別是鍊錶中的元素順序是有各物件中的指標決定的,相鄰元素之間在物理記憶體上不一定相鄰。採用鍊錶可以靈活地表示動態集合。鍊錶有單鏈表和雙鏈表及迴圈鍊錶。書中著重介紹了雙鏈表的概念及操作,雙鏈表l的每乙個元素是乙個物件,每個物件包含乙個關鍵字和兩個指標 next和prev。鍊錶的操作包...
基本資料結構 鍊錶
談到鍊錶之前,先說一下線性表。線性表是最基本 最簡單 也是最常用的一種資料結構。線性表中資料元素之間的關係是一對一的關係,即除了第乙個和最後乙個資料元素之外,其它資料元素都是首尾相接的。線性表有兩種儲存方式,一種是順序儲存結構,另一種是鏈式儲存結構。順序儲存結構就是兩個相鄰的元素在記憶體中也是相鄰的...
python實現基本資料結構 鍊錶
class node object data 資料段 next 指標段 def init self,value,next node self.value value self.next next def repr self 用來定義node的字元輸出 print 為輸出data return str...