(近期我在學習資料結構,於是我自己整理了單鏈表、迴圈單鏈表、雙向鍊錶、雙向迴圈鍊錶的相關**,以鞏固這段時間的學習,也希望能夠幫助初學者,希望大家在閱讀以下**時發現問題糾正於我,一起**)
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就行了。迴圈鍊錶也算是繼承自單鏈表,起到模擬環的效果。解決單鏈表無法首...