迴圈鍊錶是另一種形式的鏈式存貯結構。它的特點是表中最後乙個結點的指標域指向頭結點,整個鍊錶形成乙個環。
迴圈鍊錶的操作
1,迴圈鍊錶的新操作
2, 獲取當前游標指向的資料元素
3, 將游標重置指向鍊錶中的第乙個資料元素
4,將游標移動指向到鍊錶中的下乙個資料元素
5,直接指定刪除鍊錶中的某個資料元素
circlelistnode* circlelist_deletenode(circlelist* list, circlelistnode* node);
circlelistnode* circlelist_reset(circlelist* list);
circlelistnode* circlelist_current(circlelist* list);
circlelistnode* circlelist_next(circlelist* list);
標頭檔案:
#ifndef _circle_h_
#define _circle_h_
//採用資料封裝的方式,防止在主函式修改其中的屬性值(有點點像物件導向中的私有屬性)
typedef void circlelist;
typedef struct 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
原始檔:
// 迴圈鍊錶.cpp : 定義控制台應用程式的入口點。
//#include "stdafx.h"
#include #include #include "circlelist.h"
typedef struct //定義頭結點
tcirclelist;
struct value //定義資料結構體型別
;int _tmain(int argc, _tchar* argv)
while( circlelist_length(list) > 0 )
circlelist_destroy(list);
system("pause");
return 0;
}//建立
circlelist * circlelist_create()
return list;
}//銷毀
void circlelist_destroy(circlelist * list)
//清空
void circlelist_clear(circlelist* list)
}//獲得長度
int circlelist_length(circlelist* list)
return len;
}//插入
int circlelist_insert(circlelist* list, circlelistnode* node, int pos)
node->next = current->next;
current->next = node;
if(slist->len == 0)
++(slist->len);
if( current == (circlelistnode*)slist )
ret = 1;
} return ret;
} //獲得結點
circlelistnode* circlelist_get(circlelist* list, int pos)
resnode = current->next;
} return resnode;
}//刪除
circlelistnode* circlelist_delete(circlelist* list, int pos)
resnode = current->next;
current->next = resnode->next;
if(first == resnode)
if(slist->slider == resnode)
if(slist->len == 0)
}slist->len--;
return resnode;
}//根據結點來刪除
circlelistnode* circlelist_deletenode(circlelist* list, circlelistnode* node)
current = current->next;
} if(null != resnode)
}return resnode;
}//將游標重置回第乙個元素
circlelistnode* circlelist_reset(circlelist* list)
return ret;
}//獲得當前游標下的結點
circlelistnode* circlelist_current(circlelist* list)
return ret;
}//將游標移到下乙個結點並獲得當前移動前的結點
circlelistnode* circlelist_next(circlelist* list)
return ret;
}
執行結果:
152
34刪除了:1
刪除了:5
刪除了:2
刪除了:3
刪除了:4
請按任意鍵繼續. . .
如有錯誤,望不吝指出。
鍊錶的實現與操作 C語言實現
鍊錶的基本概念 表頭結點 鍊錶中的第乙個結點 包含指向第乙個資料元素的指標以及 鍊錶自身的一些資訊 資料結點 鍊錶中代表資料元素的結點 包含指向下乙個資料元素的指 針和資料元素的資訊 尾結點 鍊錶中的最後乙個資料結點 其下一元素指標為空 表示無 後繼 標頭檔案 ifndef linklist h d...
c語言實現迴圈鍊錶
迴圈鍊錶的建立其實並不複雜,只需要在建立單鏈表時定義乙個節點 本文章中為s 參與迴圈找到尾節點然後讓其指向頭節點的下乙個 因為第乙個節點時沒有值的 在之後的遍歷中則需要使用do while迴圈因為跳躍了第乙個節點在我們遍歷時新的第乙個節點是有值的,之後的插入刪除查詢操作,則是在原文的基礎上刪除了迴圈...
雙向鍊錶的實現與操作 C語言實現
雙向鍊錶也叫雙鏈表,是鍊錶的一種,它的每個資料結點中都有兩個指標,分別指向直接後繼和直接前驅。所以,從雙向鍊錶中的任意乙個結點開始,都可以很方便地訪問它的前驅結點和後繼結點。單鏈表的侷限 1,單鏈表的結點都只有乙個指向下乙個結點的指標 2,單鏈表的資料元素無法直接訪問其前驅元素 3,逆序訪問單鏈表中...