1.迴圈單鏈表和單鏈表的區別在於鍊錶中最後乙個結點的指標不是指向null,而是指向頭結點,這樣鍊錶結點就形成了乙個環。迴圈單鏈表是乙個環,所以在鍊錶中任意位置插入或者刪除結點時都是等價的,不需要根據所操作結點是否是尾結點分類討論,因此簡化了**。
2.下面是迴圈單鏈表的具體操作詳細**,由c語言實現。
#include
#include
#define elemtype int
typedef
struct linknodelinknode;
linknode *phead =
null
;//單向鍊錶的頭指標
linknode *pend =
null
;//單向鍊錶的尾指標
//建立單向鍊錶節點
void
createnode
(linknode *pnode)
pnode->pnext =
null;}
//建立單向鍊錶(帶頭節點),可以理解為建立乙個空表,建立的鍊錶中只包含乙個頭結點
void
createlinklist()
//新增結點,結點後面依次按順序新增,注意與後面的插入結點區分開
void
addnode()
//輸出單向鍊錶
void
showlinklist()
}else
}//單向鍊錶中查詢某個結點
linknode*
findnode
(elemtype e, linknode *
*pplast)
//e為查詢條件,第二個引數主要是指向所查詢節點的前乙個結點,方便後面的插入函式的編寫,該引數用到了指標的指標。if(
null
!= pplast)
ptemp = ptemp->pnext;}}
return
null;}
//修改單向鍊錶某一結點的值
void
modifynode
(elemtype e)
}//單向鍊錶特定位置插入結點
void
insertnode
(elemtype e,
int ntype)
//e為插入點對應的值,ntype表示插入的方式,我們規定ntype=0為前插,ntype=1為後插
else
//後插
printf
("插入結點成功!\n");
}}//刪除單向鍊錶某一結點
void
deletenode
(elemtype e)
else}}
//刪除整個單向鍊錶
void
clearlinklist()
phead->pnext = phead;
pend->pnext = phead;
printf
("清空鍊錶成功!\n");
}}intmain()
case2:
case3:
case4:
case5:
case6:
case7:
case8:
default
:printf
("error");
}}return0;
}
C語言迴圈單鏈表實現約瑟夫(JosephUS)問題
主要思路是 建立頭結點 賦值 建立中間節點 賦值 建立尾結點 賦值。本次採用的迴圈鍊錶中的數字都是順序賦值。node create josephus int n p head p data 1 p next null for i 2 i n i new node node malloc sizeof...
單鏈表實現 C語言
單鏈表分為帶頭結點和不帶頭結點。頭結點是和普通結點一樣,有資料域,指標域。資料域存放鍊錶結點的個數,指標域存放指向鍊錶的指標。不帶頭結點是指煉表有乙個單純的指標,指向鍊錶,不儲存資料。pragma once ifndef linklist h 防止標頭檔案重複引用 define linklist h...
C語言單鏈表實現
今天分享一下單鏈表 有空頭 的一些操作!主要呢就是增 刪 列印!單鏈表可以比喻成一趟火車,有空頭的單鏈表就像是乙個火車頭拉著一節有一節的車廂。乙個車廂中有資料域和指標域,指標域用來連線,每節車廂肯定要有東西連著,不然就沒有方向了。如圖 所以連線的時候只要將指標域指向下乙個節點就是連線上了,然後刪除呢...