迴圈鍊錶的實現與操作 C語言實現

2021-06-22 08:39:01 字數 3469 閱讀 8277

迴圈鍊錶是另一種形式的鏈式存貯結構。它的特點是表中最後乙個結點的指標域指向頭結點,整個鍊錶形成乙個環。

迴圈鍊錶的操作

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,逆序訪問單鏈表中...