circlelist .h
#ifndef _mycirclelist_h_
#define _mycirclelist_h_
#include
#include
#include
typedef
void circlelist;
typedef
struct _tag_circlelistnode
circlelistnode;
circlelist*
circlelist_create()
;void
circlelist_destroy
(circlelist* list)
;void
circlelist_clear
(circlelist* list)
;int
circlelist_length
(circlelist* list)
;int
circlelist_insert
(circlelist* list, circlelistnode* node,
int pos)
;circlelistnode*
circlelist_get
(circlelist* list,
int pos)
;circlelistnode*
circlelist_delete
(circlelist* list,
int pos)
;//直接指定刪除鍊錶中的某個資料元素
circlelistnode*
circlelist_deletenode
(circlelist* list, circlelistnode* node)
;//將游標重置指向鍊錶中的第乙個元素
circlelistnode*
circlelist_reset
(circlelist* list)
;//獲取當前游標指向的資料元素
circlelistnode*
circlelist_current
(circlelist* list)
;circlelistnode*
circlelist_next
(circlelist* list)
;#endif
// !_mycirclelist_h_
標頭檔案中定義鍊錶結點
typedef
struct _tag_circlelistnode
circlelistnode;
circlelist.c
#include
"circlelist.h"
typedef
struct _tag_circlelist
tcirclelist;
circlelist*
circlelist_create()
ret-
>length =0;
ret-
>header.next =
null
; ret-
>slider =
null
;return ret;
}void
circlelist_destroy
(circlelist* list)
return;}
void
circlelist_clear
(circlelist* list)
slist-
>length =0;
slist-
>header.next =
null
; slist-
>slider =
null
;return;}
intcirclelist_length
(circlelist* list)
ret = slist-
>length;
return ret;
}int
circlelist_insert
(circlelist* list, circlelistnode* node,
int pos)
circlelistnode* current =
(circlelistnode*
)slist;
for(i =0;
(i < pos)
&&(current-
>next !=
null
); i++
) node-
>next = current-
>next;
//1 current-
>next = node;
//2//若第一次插入節點
if(slist-
>length ==0)
slist-
>length++
;//如果是頭插法
if(current ==
(circlelistnode*
)slist)
return0;
}circlelistnode*
circlelist_get
(circlelist* list,
int pos)
circlelistnode* current =
(circlelistnode*
)slist;
for(i =
0; i < pos; i++
) ret = current-
>next;
return ret;
}circlelistnode*
circlelist_delete
(circlelist* list,
int pos)
//若刪除第乙個元素
if(current ==
(circlelistnode*
)slist)
ret = current-
>next;
current-
>next = ret-
>next;
slist-
>length--;if
(last !=
null
)//若刪除元素為游標所指元素
if(slist-
>slider == ret)
//若刪除元素後鍊錶長度為0
if(slist-
>length ==0)
}return ret;
}//直接指定刪除鍊錶中的某個資料元素
circlelistnode*
circlelist_deletenode
(circlelist* list, circlelistnode* node)
current = current-
>next;}if
(ret!=
null)}
return ret;
}//將游標重置指向鍊錶中的第乙個元素,並返回
circlelistnode*
circlelist_reset
(circlelist* list)
return ret;
}//獲取當前游標指向的資料元素
circlelistnode*
circlelist_current
(circlelist* list)
return ret;
}circlelistnode*
circlelist_next
(circlelist* list)
return ret;
}
迴圈鍊錶一是要把尾部結點的next指向頭結點
二是多了乙個游標來尋找當前結點。
C語言實現資料結構中的迴圈鍊錶
c語言實現資料結構中的迴圈鍊錶 include include typedef struct node 定義鍊錶中結點的結構 node,linklist 錯誤資訊輸出函式 void error char message 建立迴圈鍊錶 linklist createlist int n head co...
資料結構學習筆記 迴圈鍊錶(C語言實現)
迴圈鍊錶的概念主要就是讓單鏈表的尾節點的指標不為空並且指向頭節點。像這樣的迴圈鍊錶和普通單鏈表除了判斷條件幾乎沒有任何區別,判斷條件就是從p next是否為空改為p next是否等於頭節點,如果等於頭節點則迴圈結束。include include typedef int eletype typede...
資料結構C語言實現 線性鍊錶
declaration.h ifndef declaration h included define declaration h included define true 1 define false 0 define ok 1 define error 0 define infeasible 1 ...