鍊錶的操作增刪改查
typedef int1.頭部插入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;
}
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 單鏈表 只包含乙個指標域的節點組合起來的,叫做單鏈表,只知道下乙個節點位址 雙鏈表 對於乙個節點而言,需要兩個位址,要知道上乙個節點的位址和下乙個...