(近期我在學習資料結構,於是我自己整理了單鏈表、迴圈單鏈表、雙向鍊錶、雙向迴圈鍊錶的相關**,以鞏固這段時間的學習,也希望能夠幫助初學者,希望大家在閱讀以下**時發現問題糾正於我,一起**)
cycdoublelist.h
cycdoublelist.c#ifndef __cycdoublelish_h
#define __cycdoublelish_h
#include#include#include#includetypedef int elemtype;
//定義雙向迴圈鍊錶的結點
typedef struct node
node;
typedef struct cycdoublelist
cycdoublelist, *pcycdoulist;
//初始化鍊錶函式
void initcycdoublelist(pcycdoulist list);
//插入節點函式
void insertcycdoublelist(pcycdoulist list, elemtype val , int pos);
//頭插函式
void insertheadcycdoublelist (pcycdoulist list,elemtype val);
//尾插函式
void inserttailcycdoublelist(pcycdoulist list,elemtype val);
//刪除結點函式
void deletedoucycblelist(pcycdoulist list,int pos);
//刪除頭結點的函式
void deleteheadcycdoublelist(pcycdoulist list);
//刪除尾結點的函式
void deletetailcycdoublelist(pcycdoulist list);
//銷毀鍊錶函式
void destroycycdoublelist(pcycdoulist list);
//順序輸出結點資料函式
void show1(pcycdoulist list);
void show2(pcycdoulist list);
//逆序輸出結點資料函式
void reverseshow(pcycdoulist list);
#endif
測試(main.c)#include"cycdoublelist.h"
//初始化鍊錶函式
void initcycdoublelist(pcycdoulist list)
//(將共用的功能進行函式封裝,有利於減少**的重複出現,提高**的利用率, 使**更加美觀的作用)
// 購買新結點空間函式
static node *buynode( elemtype val, node *prev, node *next)
else
return s;
}//插入結點函式
static void insert(pcycdoulist list, elemtype val, node *p)
void insertcycdoublelist(pcycdoulist list, elemtype val , int pos)
if( ( pos < 0 ) | ( pos > list->count))//判斷pos的值是否有效
node *p = list->head;
if( pos == 0) // 如果在雙向迴圈煉表頭位置插入結點,就相當於在鍊錶的末尾插入節點後
else
insert(list, val, p);//引用插入函式插入新結點
return; }}
//頭插函式
void insertheadcycdoublelist (pcycdoulist list,elemtype val)
//尾插函式
void inserttailcycdoublelist(pcycdoulist list,elemtype val)
//刪除結點函式
void deletedoucycblelist(pcycdoulist list,int pos)
node *p = list->head;
if( pos == 1)//考慮如果刪除的是第乙個結點就得改變頭指標
while( pos > 1)
p->next->prev = p->prev;
p->prev->next = p->next;
free(p);
list->count--;
}//刪除頭結點的函式
void deleteheadcycdoublelist(pcycdoulist list)
//刪除尾結點的函式
void deletetailcycdoublelist(pcycdoulist list)
//順序輸出結點資料函式
void show1(pcycdoulist list)
list->count = tmp;
printf("\n");
}void show2(pcycdoulist list)
printf("%3d\n",p->data);
}//逆序輸出結點資料函式
void reverseshow(pcycdoulist list)
while( list->count != tmp)
printf("%3d",p->data);
printf("\n");
}//銷毀鍊錶函式
void destroycycdoublelist(pcycdoulist list)
}
輸出結果:#include"cycdoublelist.h"
int main()
printf("count1 = %d\n",p->count);
//順序輸出測試
show1(&list);
//刪除測試
for( int i = 5; i > 0; i--)
printf("count1 = %d\n",p->count);
show1(&list);
/* //逆序輸出測試
reverseshow(&list);
//頭插測試
insertheadcycdoublelist (&list, 99);
show(&list);
printf("count2 = %d\n",p->count);
//尾插測試
inserttailcycdoublelist(&list, 88);
show(&list);
reverseshow(&list);
printf("count3 = %d\n",p->count);
*/ return 0;
}
資料結構 雙向迴圈鍊錶
typedef struct node node,pnode pnode init dc list void 雙向迴圈鍊錶的初始化 pnode new node int dat 新建乙個節點 把位址為pnew的節點插入到雙向迴圈鍊錶的尾部 頭節點的前面 bool list add tail pnod...
資料結構 雙向鍊錶,迴圈鍊錶
也許是自己太小看資料結構,練習了幾天還在第二章徘徊,可自己覺得基礎還是要打牢的好 總結一下 第乙個是雙向鍊錶,include include typedef struct node node,linklist void creat linklist l else int insert linklis...
資料結構 雙向非迴圈鍊錶
include include includeusing namespace std typedef struct node node,pnode typedef struct list list,plist plist listinit void 非迴圈鍊錶插入頭部 int insertlist ...