如果說你經常在linux中,或者在kernel下面做事的話,一定會碰到鍊錶的操作。
如果你沒有真正了解單鏈表,還是把基礎打好吧。
如下程式綜合了鍊錶的常用方面,請你下自己寫出每個函式,debug並執行,直到執行正確;然後對照參考程式,
比較程式的差異,有時候,可能你測試不全面,會有這樣那樣的錯誤,多思考,這樣,你才記憶深刻。
#include #includetypedef
struct
node
node;
//鍊錶輸出
void output(node *head)
printf(
"\r\n
");
} //
鍊錶建立
node*creat()
head->pstnext =null;
p =head;
while
(cycle)
s->ndate =date;
p->pstnext =s;
p =s;
} else
} p->pstnext =null;
return
(head);
} //
單鏈表測長
void length(node *head)
printf(
"%d\r\n
", j);
} //
鍊錶按值查詢
void research_date(node *head, int
date)
if(null ==p)
else
if(date == p->ndate)
return
; }
//按序號查詢
void research_number(node *head, int
num)
if(p ==null)
else
if(i == 0
)
else
if(i ==num)
} //
在指定元素之前插入新結點
void insert_1(node *head, int i, int
newdate)
if(null == pre || j > i-1
)
else
new->ndate =newdate;
new->pstnext = pre->pstnext;
pre->pstnext =new;
} }
//在指定元素之後插入新結點
void insert_2(node *head, int i, int
newdate)
if( j ==i)
new->ndate =newdate;
new->pstnext = pre->pstnext;
pre->pstnext =new;
}else
} //刪除指定結點
void delete_1(node *head, int
i3)
if(null ==p)
else
} //指定刪除單鏈表中某個資料,並統計刪除此資料的個數
int delete_2(node *head, int
delete_date)
else
} return
count;
} //
鍊錶逆置,一定要掌握好,詳解見圖
void reverse_list(node *head)
q = head->pstnext->pstnext;
head->pstnext->pstnext =null;
while(null !=q)
} //
單鏈表的連線
void connect_list(node *head, node *head_new)
p->pstnext = head_new->pstnext;
} //
單鏈表銷毀
void destroy_list(node*head)
} main()
單鏈表操作
include include typedef struct node tag node 建立不帶頭結點的單鏈表 node createnode else p q scanf d n 函式體結束,q指標變數被釋放,不能通過head引數帶回到呼叫函式 要把head帶回到呼叫函式,要把它定義為指向指標的...
單鏈表操作
include stdio.h include malloc.h include define n 10 代表要處理的元素個數 可以誰使用者的意思修改 define ok 1 define overflow 0 typedef int elemtype typedef int status type...
單鏈表操作
這一次補上鍊表的注釋,是空閒的時候敲出來的,如果有錯,希望幫忙糾正 部分給出了詳細說明,這裡只選取了基本操作,因為更複雜的鍊錶操作太繁瑣,這裡就不寫了 如果有什麼不懂的地方,可以隨時詢問 include using namespace std typedef int elemtype struct ...