迴圈雙鏈表的實現

2021-07-24 07:08:32 字數 3023 閱讀 5610

#include 

using namespace std;

#include

#include

#define ok 1

#define error 0

#define true 1

#define false 0

#include "time.h"

#define maxsize 1000 /* 儲存空間初始分配量 */

typedef int elemtype ;

typedef int status ;

typedef struct nodenode,*linklist;

status initnode(linklist *l)

}status isempty(linklist l)else

}status inserthead(linklist l,int e)

status insertnode(linklist *l,int i ,int e)

if(j>i) //處理i=0的特殊情況

return error;

linklist newlist = (linklist)malloc(sizeof(node));

newlist->data = e;

newlist->prior = p; //當p指向最後乙個位置時,判斷依然是下面,不許要增加

newlist->next = p->next;

p->next->prior = newlist;

p->next = newlist;

}status deletelist(linklist *l ,int i , elemtype *e )

if(ireturn error;

p->prior->next=p->next;

p->next->prior =p->prior;

*e = p->data; //獲取資料

free(p);

}status alwaysinserthead(linklist *l,int n)

}status alwaysinserttail(linklist *l,int n)

}status getvalue(linklist l ,int i ,elemtype * e)

if(p==l||j>i)

*e = p->data;

return ok;

}int findequalvaule(linklist l ,elemtype e)

if(p==l)

}int listlength(linklist l)

return j;

}status clearlist(linklist l)

(l)->next = (l);

(l)->prior = (l);

return ok;

}int main()

linklist pr = node1->prior;

while(pr !=node1)

//插入功能測試完畢

/******開始測試刪除功能**

****/

printf("\n");

int value;

deletelist(&node1,1,&value);

deletelist(&node1,1,&value);

deletelist(&node1,2,&value);

printf("刪除節點的資料值%d\n",value);

p = node1->next; //p指向第乙個節點

while(p!= node1)

pr = node1->prior;

while(pr !=node1)

/****

**測試頭插法功能開始**

****/

printf("\n");

linklist node2;

alwaysinserthead(&node2,10);

linklist h;

h=node2->next;

while(h!= node2)

printf("\n");

linklist h1;

h1 = node2->prior;

while(h1!=node2)

/****

**測試尾插法功能開始**

****/

printf("\n");

linklist node3;

alwaysinserttail(&node3,3);

linklist t;

t=node3->next;

while(t!= node3)

printf("\n");

linklist t1;

t1 = node3->prior;

while(t1!=node3)

/****

**測試得到第i個位置的元素的值**

****/

printf("\n");

int result;

getvalue(node3,3,&result);

printf("%d\n",result);

/******測試查詢與value相等元素的位置******/

printf("\n");

intx = findequalvaule(node1,4);

printf("%d\n",x);

/******計算鍊錶的長度******/

printf("\n");

inty = listlength(node2);

printf("%d\n",y);

/*****清空鍊錶*****/

printf("%p\n",node3);

clearlist(node3);

printf("%p\n",node3->next);

printf("%p\n",node3->prior);

return

0;}

迴圈雙鏈表

迴圈雙鏈表的定義和基本運算 include include typedef int elemtype typedef struct dnode 定義雙鏈表結點型別 dlinklist void createlistf dlinklist l,elemtype a,int n 頭插法建雙鏈表 void...

迴圈雙鏈表的建立

鍊錶有兩種 一種是頭指標式鍊錶 還有一種是頭節點式鍊錶 第一種顧名思義就是head只是個結構體指標 不需要malloc給其分配記憶體 而第二種head是乙個節點,需要malloc給其分配記憶體 以下我個人寫的頭節點式指標的迴圈雙鏈表,但頭節點head不存資料 存資料的還沒試過 include inc...

迴圈雙鏈表應用

問題描述 設非空線性表ha和hb都用帶頭節點的迴圈雙鏈表表示。設計乙個演算法insert ha,hb,i 其功能是 i 0時,將線性表hb插入到線性表ha的最前面 當i 0時,將線性表hb插入到線性表ha中第i個節點的後面 當i大於等於線性表ha的長度時,將線性表hb插入到線性表ha的最後面。請在實...