雙向迴圈鍊錶的基本操作

2021-08-20 00:00:53 字數 3826 閱讀 3763

dlink.h

#pragma once 

#include typedef int dlinktype;

typedef struct dlinknode dlinknode;

dlinknode* buynode(dlinktype value);

void destroynode(dlinknode** posnode);//刪除節點

void printdlink(dlinknode*head);//列印鍊錶

void initdlinklist(dlinknode** head);//初始化

dlinknode* pushbackdlinklist(dlinknode*phead, dlinktype value);//尾插

void* popbackdlinlist(dlinknode** head);//尾刪

void pushfrontdlinklist(dlinknode** head, dlinktype value);//頭插

void popfrontdlinklist(dlinknode* head);//頭刪

dlinknode* finddlinklist(dlinknode* head, dlinktype to_find);//查詢

void insertdlinklist(dlinknode** head, dlinknode* pos, dlinktype value);//在某個節點前插入元素

void insertafterdlinklist(dlinknode** head, dlinknode* pos, dlinktype value);//在某個節點後插入元素

void dlinklisterase(dlinknode** head);//鍊錶的刪除

void dlinklistremove(dlinknode** head, dlinktype value);//刪除值為value的乙個元素

void dlinklistremoveall(dlinknode** head, dlinktype value); //刪除整個鍊錶中值為value的元素

size_t dlinklistsize(dlinknode* head);//求鍊錶大小

int dlinklistempty(dlinknode* head);//判空

dlink.c

#define _crt_secure_no_warnings 1

#include#include#include#include#include#include"dlink.h"

void destroynode(dlinknode*posnode)

void printdlink(dlinknode* head)

printf("%d =>\n",curnode->data);

}void initdlinklist(dlinknode** head)

*head = null;

}dlinknode* buynode(dlinktype value)

return new_node;

}dlinknode* pushbackdlinklist(dlinknode**head, dlinktype value)

dlinknode*curnode = (*head);

while (curnode->_next != (*head))

curnode->_next = insertnode;

insertnode->_next = (*head);

insertnode->_prev = curnode;

(*head)->_prev = insertnode;

return insertnode;

}void* popbackdlinlist(dlinknode** head)

destroynode(curnode);

prevnode->_next = (*head);

(*head)->_prev = prevnode;

}void pushfrontdlinklist(dlinknode** head, dlinktype value)

void popfrontdlinklist(dlinknode** head)

dlinknode* finddlinklist(dlinknode* head, dlinktype to_find)

curnode = curnode->_next; }}

void insertdlinklist(dlinknode** head, dlinknode* pos, dlinktype value)

dlinknode*curnode = (*head);

dlinknode*prevnode = null;

dlinknode*insertnode = buynode(value);

while (curnode->_next != (*head))

prevnode->_next = insertnode;

insertnode->_prev = prevnode;

insertnode->_next = curnode;

curnode->_prev = insertnode;

return; }}

void insertafterdlinklist(dlinknode** head, dlinknode* pos, dlinktype value)

dlinknode*insertnode = buynode(value);

while (curnode->_next != (*head))

insertnode->_next = curnode->_next;

curnode->_next->_prev = insertnode;

curnode->_next = insertnode;

insertnode->_prev = curnode;

return; }}

void dlinklisterase(dlinknode** head)

void dlinklistremove(dlinknode** head, dlinktype value)

tailnode = curnode->_next;

prevnode->_next = tailnode;

tailnode->_prev = prevnode;

return; }}

void dlinklistremoveall(dlinknode** head, dlinktype value)

tailnode = curnode->_next;

prevnode->_next = tailnode;

tailnode->_prev = prevnode;

curnode = curnode->_next;//不加的話會死迴圈 }}

size_t dlinklistsize(dlinknode* head)

printf("count=%d\n", count);

return count;

}int dlinklistempty(dlinknode* head)

test.c

#define _crt_secure_no_warnings 1

#include#include#include#include"dlink.h"

int main()

雙向迴圈鍊錶基本操作

include include include typedef struct node linklist void clear 清屏 linklist init doublelinklist 初始化雙向迴圈鍊錶 void creat doublelinklist linklist 建立雙向迴圈鍊錶 ...

雙向迴圈鍊錶的基本操作

實現鍊錶的增刪查,清空,銷毀 pragma once typedef int datatype 鍊錶的節點結構 typedef struct dlinklist dlinklist,dlnode 鍊錶的初始化 void dllinklistinit dlnode l 建立乙個新的節點 dlnode ...

鍊錶的基本操作 單鏈表 雙向鍊錶 迴圈鍊錶

本週第一次講座,學長給我們簡單的概述了資料結構和演算法,然後對鍊錶的一些操作進行了講解,下來之後,我把原來書上的一些 鍊錶的基本操作與鍊錶的逆置,排序等操作結合起來,整理出來 鍊錶是由結點構成的,關鍵是定義結點 c語言程式設計上兩大特例 鍊錶節點的定義 遞迴函式的定義。這兩個違反了先定義再使用。3....