資料結構學習之 帶有頭節點的迴圈鍊錶

2021-09-22 05:56:56 字數 3417 閱讀 1806

#pragma once

#include //帶頭節點的迴圈鍊錶

//迴圈鍊錶尾節點的next指向頭節點

//clist為一條鍊錶,cnode *乙個節點的位址

typedef struct cnode

cnode,*clist; //clist = cnode *

//初始化

void initlist(clist plist);

//頭插法

bool insert_head(clist plist, int val);

//尾插法

bool insert_tail(clist plist, int val);

//在pos下標插入資料val

bool insert_pos(clist plist, int pos, int val);

//查詢,找到返回節點位址,沒有找到返回null

cnode *search(clist plist, int key);

//刪除第乙個key對應的節點

bool delete(clist plist, int key);

//刪除第乙個資料節點,並通過rtval獲得刪除的值

bool delete_head(clist plist, int *rtval);

//刪除最後乙個資料節點,並通過rtval獲得刪除的值

bool delete_tail(clist plist, int *rtval);

//獲取長度,統計資料節點的個數

int getlength(clist plist);

//判空

bool isempty(clist plist);

//清除所有資料

void clear(clist plist);

//銷毀所有節點

void destory(clist plist);

//列印

void show(clist plist);

#include #include "clist.h"

#include #include //帶頭節點的迴圈鍊錶

//迴圈鍊錶尾節點的next指向頭節點

//clist為一條鍊錶,cnode *乙個節點的位址

/*typedef struct cnode

node,*list; //clist = cnode *

*///初始化

void initlist(clist plist)

plist->next = plist; //迴圈鍊錶:指向頭節點

}static cnode *buynode(int val)

//頭插法

bool insert_head(clist plist, int val)

//尾插法

bool insert_tail(clist plist, int val)

cnode *q;

for(q = plist; q->next != null; q = q->next)

;//將q插入到p的後面

q->next = p->next;

p->next = q;

return true;

}//在pos下標插入資料val

bool insert_pos(clist plist, int pos, int val)

cnode *p = plist;

for( int i = 0; i < pos; i++)

cnode *q = buynode(val);

q->next = p->next;

p->next = q;

return true;

}//查詢,找到返回節點位址,沒有找到返回null

cnode *search(clist plist, int key)

}return null;

}//查詢前趨

static cnode *searchpri(clist plist, int key)

}return null;

}//刪除第乙個key對應的節點

bool delete(clist plist, int key)

cnode *q = p->next; //q為要刪除的節點

p->next = q->next;

free(q);

return true;

}//刪除第乙個資料節點,並通過rtval獲得刪除的值

bool delete_head(clist plist, int *rtval)

if(rtval != null)

cnode *p = plist->next;

plist->next = p->next;

free(p);

return true;

}//刪除最後乙個資料節點,並通過rtval獲得刪除的值

bool delete_tail(clist plist, int *rtval)

cnode *p;

for(p = plist; p->next->next != plist; p = p->next)

;free(p->next);

p->next = plist;

return true;

}//獲取長度,統計資料節點的個數

int getlength(clist plist)

/*cnode *p;

p = plist->next; //當前節點

while(p != plist)

*/return count;

}//判空

bool isempty(clist plist)

return false;

}//清除所有資料

void clear(clist plist)

//銷毀所有節點

void destory(clist plist)

}//列印

void show(clist plist)

printf("\n");

}

#include #include "clist.h"

int main()

show(&list);

insert_pos(&list,0,18);

insert_pos(&list,11,20);

show(&list);

delete(&list,18);

show(&list);

// delete_head(&list,1);

show(&list);

// delete_tail(&list,20);

show(&list);

clear(&list);

return 0;

}

資料結構學習之 佇列(帶有頭節點的單鏈表實現)

pragma once include 利用帶有頭節點的單鏈表實現佇列,隊頭為第乙個資料節點 typedef struct node node 資料節點 typedef struct hnode hnode,plqueue 頭節點 void initqueue plqueue pl 入隊 bool ...

資料結構學習之路之迴圈佇列

佇列是一種先進先出的線性表,他只允許在表的一端進行插入元素,在另一端刪除元素。typedef struct sqqueuesqqueue 空隊 q.front q.rear 入隊 q.base rear x 出隊 x q.base front 存在的問題 設陣列的大小為m front 0 rear ...

資料結構學習之 堆疊

堆疊 順序儲存 define maxsize 10 typedef int elemtype struct stack 1.判斷堆疊是否為空 int emptyst struct stack s 2.判斷堆疊是否已滿的函式 int fullst struct stack s 3.元素入棧 void ...