C語言動態鍊錶資料結構

2022-05-04 18:15:10 字數 2182 閱讀 2364

鍊錶的操作增刪改查

typedef int

data;

struct

snode

;snode* g_head=null;//

全域性變數

//從頭部新增

void

addhead(data nnum)

//從尾部新增

void

addtail(data nnum)

snode* p =g_phead;

snode* p1 =null;

while

(p)

//跳出迴圈時,p1記錄的時最後乙個節點,讓最後乙個節點的pnext指向新建立的節點

p =p1;

p->pnext =pnew;

//另一種寫法

//while(p->pnext != null)

//迴圈遍歷,當下乙個節點為空說明到尾部了

//p=p->pnext;

//p->pnext = pnew;}//

找到,返回找節點位置;失敗返回-1

intfindnodeindex(data nnum)

p = p->pnext;

++i;

}return -1;}

//刪除成功返回-1;失敗返回0

intdeletenode(data nnum)

//頭節點沒有前乙個節點,要特殊處理

if (p->data ==nnum)

while

(p)

p1= p;//

記錄前節點

p = p->pnext;

}return -1;}

//修改指定節點的值

void

modifynode(data oldnum,data newnum)

p = p->pnext;

}}//

列印所有節點

void

printall()

while(p)//}//

成功返回0;失敗返回-1

intfindnode(data nnum)

p=p->pnext;

}return -1;}

//在某個節點之後插入新節點;成功返回0;失敗返回-1

intinsertnode(data npos,data nnum)

while

(p)

p = p->pnext;

}return -1;}

void

deleteall()

g_phead =null;

}int

main()

//刪除節點

i = deletenode(3);//

頭部刪除要特殊處理

if (i == 1

)

else

printall();

puts(

"尾部新增");

addtail(4);

printall();

//修改節點

modifynode(-88,0

); puts(

"插入節點3");

//插入節點

i = list.insertnode(4,3

); list.printall();

puts(

"清空鍊錶");

deleteall();

printall();

return0;

}

1.頭部插入

2.尾部插入

3.在指定節點位置後面插入新節點

例如:在節點2後面插入新節點4

中間插入新節點4,讓節點2的pnext賦值給新節點4的pnext,然後讓新節點4的位址賦值給節點2的pnext

4.刪除節點

注意:如果刪除的是頭節點,要特殊處理,因為頭節點沒有前面的節點,所以頭節點的pnext賦值給g_head;

C語言動態資料結構 鍊錶

動態資料結構聊邊的變數不是通過型別識別符號定義,而是程式執行時如果需要在想系統申請。變數所占用的記憶體單元不一定是連續存放的。整體所佔的統建隨元素的個數變化而變化,從而減少了空間的浪費。鍊錶的用途 1 用來代替陣列元素個數不定的陣列 2 在資料庫管理程式中用來對磁碟檔案的儲存操作。用 的形式,簡單介...

動態資料結構 靜態鍊錶(C語言)

我們在程式裡大多使用的是靜態資料結構,比如說整型 浮點型 陣列,它們的特點是由系統分配,固定大小的儲存空間。在之後程式執行時,它的空間位置以及容量都不會再改變。但當我們不確定乙個東西的儲存空間時應該如何處理?這時我們就需要用到動態資料結構。首先鍊錶需要有乙個頭指標變數 即head head存放了乙個...

資料結構 動態鍊錶

鍊錶 儲存資料元素的資訊的域稱為資料域 data域 存的就是該節點要存的元素 這兩個部分組成起來的資料稱之為節點 node node data next 單鏈表 只包含乙個指標域的節點組合起來的,叫做單鏈表,只知道下乙個節點位址 雙鏈表 對於乙個節點而言,需要兩個位址,要知道上乙個節點的位址和下乙個...