#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的最後面。請在實...