雙向鍊錶(C實現)

2021-07-07 08:53:11 字數 1549 閱讀 2189

list.h

#ifndef _list_h

#define _list_h

typedef struct _node

node;

typedef struct

list;

list *initlist();

int insertnode(list *l,void *data,int size);

int deletenode(list *l,int n);

void printlist(list *l,int page,int perpage,void(*printnode)(void *));

void clearlist(list *l);

void destroylist(list **l);

#endif

list.c
#include "list.h"

#include #include #include list *initlist()

//有效資料的尾部插入

int insertnode(list *l,void *data,int size)

memcpy(n->data,data,size);

n->next=l->last;

n->piror=l->last->piror;

l->last->piror->next=n;

l->last->piror=n;

l->length++;

return 1;

}int deletenode(list *l,int n)

//end while--p points to the node to be deleted

p->piror->next=p->next;//把刪除的結點從鍊錶中斷開

p->next->piror=p->piror;//重新建立兩個連線即可

free(p->data);

free(p);

l->length--;

return 1;

}//實現分頁列印

//傳遞過來的函式指標告訴我們怎麼列印資料

void printlist(list *l,int page,int perpage,void(*printnode)(void *))

for(;i<=end&&p->next!=null;i++) }

void clearlist(list *l)

}void destroylist(list **l)

main.c
#include #include "list.h"

double d[5]=;

//結點資料是無型別的,應用層這邊知道是什麼型別的,所以傳遞乙個函式指標

void printdata(void *data)

void main()

vc6執行效果圖

雙向鍊錶(c 實現)

雙向鍊錶與單鏈表有許多的相似之處,但是也有不同之處。雙向鍊錶與單鏈表主要的不同在於 雙向鍊錶可以從兩個方向進行遍歷,但是單鏈表只能從頭節點遍歷到尾節點,不能從尾節點遍歷到頭節點,對於鍊錶中一些插入和刪除等操作,雙向鍊錶較單鏈表更為簡單些。所以,雙向鍊錶有其存在的特殊意義。下面是通過c 來實現雙向鍊錶...

雙向鍊錶 C 實現

雙向鍊錶在類中的實現 include include includeusing namespace std typedef int datatype struct node node pnext node ppre int data class list list const list l else...

C 實現雙向鍊錶

struct dlistnode 節點的建立 class dlist dlist const dlist l head null tail null else dlist operator const dlist l 傳統寫法 tail next null return this dlist ope...