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...