迴圈鍊錶的結束條件為p == list.phead
#include
//鍊錶結點
typedef
struct listnode
listnode;
//煉表頭
typedef
struct list
list;
//初始化
void
init
(list &list)
//銷毀鍊錶
void
destroy
(list &list)
while
(p != list.phead)
;//判斷條件:若當前結點等於頭結點,說明鍊錶走了一圈,結束了。
} list.length =0;
list.phead =
null;}
intmod
(list &list,
int index)
//獲得索引處的結點
listnode *
getnode
(list &list,
int index)
}return p;
}//插入鍊錶結點
void
insert
(list &list,
int index,
int value)
else
listnode *p = new listnode;
p->val = value;
if(index != list.length)
else
}else
else
} list.length++;}
//刪除鍊錶結點
void
remove
(list &list,
int index)
else
delete p;
list.length--;}
}//getlength
intgetlength
(list &list)
//get
intget
(list &list,
int index)
return n;
}//set
void
set(list &list,
int index,
int value)
}//find
intfind
(list &list,
int value)
pos++
; p = p->pnext;
}while
(list.phead != p);}
// 當找不到時,p走到鍊錶尾部,此時對應的pos是 list.length
if(pos == list.length)
return pos;
}//findnode
listnode *
findnode
(list &list,
int value)
p = p->pnext;
}while
(list.phead != p);}
if(got !=1)
return p;
}int
prev
(list &list,
int index)
intnext
(list &list,
int index)
//prevnode
listnode *
prevnode
(list &list, listnode *pcrt)
listnode *pprev = list.phead,
*p =
null
;int got =0;
if(null
!= pprev)
pprev = p;
}while
(pprev != list.phead);}
if(got !=1)
return pprev;
}//nextnode
listnode *
nextnode
(listnode *p)
//print
void
output
(list &list)
while
(list.phead != p);}
printf
("\n");
}
迴圈單鏈表的實現以及相關操作
如果有不足之處我會加以改正,都是個人理解難免有錯誤的地方請諒解。由之前的單鏈表 雙鏈表在到迴圈鍊錶三個鍊錶之間有很多重複和相似的地方。大體的邏輯關係是一致的,不同地方在於首位和每個節點之間的關係 單鏈表 每個節點之間依靠指標鏈結 方向為頭 尾 頭節點和尾節點 next均為null雙鏈表 每個節點之間...
單鏈表及其基本操作
資料結構在 優化以及設計過程的地位不可忽視,資料結構裡包含很多內容,後續會一 一附上。此騙部落格主要談單鏈表,主要從其定義及建立,再完成乙個簡單的歸併練習進行描述 在鍊錶儲存中,每個節點不僅包含所存元素的資訊,還包含元素之間邏輯關係的資訊。這麼說有點抽象,我們可以這麼理解 單鏈表中前驅結點包含後繼結...
單鏈表相關操作
這是自己寫的最長的一次 了 在機房敲了一天。以前一直用list來水鍊錶的題 這次終於體會到痛苦了 include include include include include include using namespace std typedef struct node 單鏈表 s,list vo...