資料結構 迴圈鍊錶

2021-08-28 22:19:23 字數 2699 閱讀 7004

(近期我在學習資料結構,於是我自己整理了單鏈表、迴圈單鏈表、雙向鍊錶、雙向迴圈鍊錶的相關**,以鞏固這段時間的學習,也希望能夠幫助初學者,希望大家在閱讀以下**時發現問題糾正於我,一起**)

cyclinklist.h

#ifndef __cyclinklist_h

#define __cyclinklist_h

#include#include#include#includetypedef int elemtype;

//定義結點

typedef struct node

node;

/*//定義帶頭結點的鍊錶

typedef struct linklist

linklist, *plist;

*///定義不帶頭結點的鍊錶

typedef struct linklist

linklist, *plist;

//初始化鍊錶

void initlinklist(plist list);

//插入函式

void insertlinklist(plist list, elemtype val, int pos);

//頭插函式

void insertheadlinklist(plist list, elemtype val);

//尾插函式

void inserttaillinklist(plist list, elemtype val);

//刪除結點函式

void deletelinklist(plist list, int pos);

//刪頭函式

void deleteheadlinklist(plist list);

//刪尾函式

void deletetaillinklist(plist list);

//順序輸出函式

void showlinklist1(plist list);

void showlinklist2(plist list);

#endif

cyclinklist.c

#include"cyclinklist.h"

//不帶頭結點的迴圈鍊錶

//初始化鍊錶

void initlinklist(plist list)

static node *buynode(elemtype val, node *next)

p->next = next;

return p;

}//插入函式

void insertlinklist(plist list, elemtype val, int pos)

if(list->head == null)//考慮鍊錶中沒有結點時的插入

node *p = list->head;

int tmpos = pos == 0 ? list->count : pos;//如果時頭插就相當於尾插後前移頭指標

while( tmpos > 1)//將指標移到pos(tmpos)結點的位置

node *s = buynode(val, p->next); //給新結點申請新空間

p->next = s;

if(pos == 0) //如果pos為0就代表是頭插,所以要改變頭指標的位置

list->count++; //增加結點個數

}//頭插函式

void insertheadlinklist(plist list, elemtype val)

//尾插函式

void inserttaillinklist(plist list, elemtype val)

//刪除結點函式

void deletelinklist(plist list, int pos)

if(list->count == 1) //只有乙個結點時的刪除

node *p = list->head;

if( pos == 1)

list->head = list->head->next;

} else

} node *q = p->next;

p->next = q->next;

free(q);

list->count--; }

//刪頭函式

void deleteheadlinklist(plist list)

//刪尾函式

void deletetaillinklist(plist list)

//順序輸出函式

void showlinklist1(plist list)

printf("%3d\n",p->data);

}void showlinklist2(plist list)

printf("\n");

}

測試**(main.c):

#include "cyclinklist.h"

int main()

showlinklist1(&list);

for( int j = 3; j > 0; j--)

showlinklist2(&list);

return 0;

}

輸出結果:

資料結構 迴圈鍊錶

迴圈鍊錶的結點 typedef struct circularnodecircularnode 迴圈鍊錶結構 typedef struct circularlinklistcircularlinklist 在迴圈鍊錶的指定位置插入元素 void insertcircularlinklist circ...

資料結構 迴圈鍊錶

start reading 在知道熟悉單鏈表的操作後,我們知道鍊錶有乙個資料域存放具體的資料,有乙個next域存放後繼的位址,如果我們將尾結點的next域指向之前的任意乙個節點,那麼就形成了乙個環。下面我們就來說說迴圈鍊錶 如圖就是乙個迴圈鍊錶 在對迴圈鍊錶進行操作時要注意尾結點的後繼不是null,...

資料結構 迴圈鍊錶

目錄 迴圈鍊錶 迴圈鍊錶與單鏈表的區別和聯絡 迴圈鍊錶的訪問順序 迴圈佇列的常用操作 排序 合併合併並保留序列 反轉 判空後續操作待補充 實現 迴圈鍊錶和單鏈表最大區別就是最後乙個節點指向頭節點。遍歷時節點迭代指標 p!頭節點 l就行了。迴圈鍊錶也算是繼承自單鏈表,起到模擬環的效果。解決單鏈表無法首...