// note:your choice is c++ ide
#include
#include
#include
using namespace std;
typedef struct nodedlink,*dlist;
//初始化鍊錶3種方法
dlink *initlink(dlink *sq)
dlink *s=sq;
s=(dlink *)malloc(sizeof(dlink));
s->prior=s->next=null;
return s;
void initlink(dlink *&sq)
sq=(dlink *)malloc(sizeof(dlink));
sq->prior=sq->next=null;
void initlink(dlink **sq)
(*sq)=(dlink *)malloc(sizeof(dlink));
(*sq)->prior=(*sq)->next=null;
//建立鍊錶
void create(dlink *sq)
int a;
dlink *p,*q;
p=sq;
int circle=1;
while (circle)
printf("please input data:");
scanf("%d",&a);
if(a!=0)
q=(dlink *)malloc(sizeof(dlink));
q->data=a;
q->next=q->prior=null;
p->next=q;
q->prior=p;
p=q;
else
circle=0;
//求鍊錶長度
int getlen(dlist sq)
int i=0;
dlink *p;
p=sq->next;
while(p!=null)
i++;
p=p->next;
return i;
//插入元素
void inslink(dlist sq,int x,int i)
int j=1;
dlink *p,*q;
p=sq;
q=(dlink *)malloc(sizeof(dlink));
q->data=x;
q->prior=q->next=null;
if(i<1 || i>getlen(sq)+1)
printf("插入位置錯誤.");
exit(0);
while(jp=p->next;
j++;
if(p->next!=null)
q->next=p->next;
q->prior=p;
p->next->prior=q;
p->next=q;
else
q->next=null;
p->next=q;
q->prior=p;
//刪除元素
int dellink(dlist sq,int i)
dlink *q,*p;
p=sq;
q=sq->next;
int j=getlen(sq);
int m=1;
int x=0;
if(i<1 || i>(j+1))
printf("刪除的位置非法");
exit(0);
while(mp=p->next;
q=q->next;
m++;
x=q->data;
if(q->next!=null)
p->next=q->next;
p=q->next->prior;
free(q);
else
p->next=q->next;
free(q);
return x;
//定位元素(還沒有實現查到很多資料)
int local(dlist sq,int x)
dlink *p;
int i=1;
p=sq->next;
while(p!=null && p->data!=x)
p=p->next;
i++;
if(i<1 || i>getlen(sq))
printf("沒有找到這個元素");
exit(0);
else
return i;
//顯示鍊錶資料
void display(dlist sq)
dlink *p;
p=sq->next;
int i=getlen(sq);
if(i<1)
exit(0);
while(p!=null)
int j=p->data;
printf("%d ",j);
p=p->next;
int main()
int i=0,j=0;
dlink *p;
initlink(&p);
create(p);
i=getlen(p);
printf("%d/n",i);
display(p);
int a;
printf("請輸入要插入的位置:");
scanf("%d",&a);
int b;
printf("請輸入要插入的值:");
scanf("%d",&b);
inslink(p,b,a);
display(p);
int c;
printf("請輸入刪除元素的位置");
scanf("%d",&c);
int d=dellink(p,c);
printf("刪除的元素值=%d/n",d);
display(p);
int f,e;
printf("請輸入你想查詢的元素");
scanf("%d",&f);
e=local(p,f);
printf("該元素的位置是%d /n",e);
j=getlen(p);
printf("/n%d/n",j);
display(p);
return 0;
雙鏈表的基本操作
雙鏈表在最末端的插入和刪除要特別對待。include using namespace std typedef int elemtype 定義雙鏈表節點型別 typedef struct node dnode,dlinklist dlinklist dlinklistcreate p next nul...
雙鏈表的基本操作
雙向鍊錶也叫雙鏈表,是鍊錶的一種,它的每個資料結點中都有兩個指標,分別指向直接後繼和直接前驅。所以,從雙向鍊錶中的任意乙個結點開始,都可以很方便地訪問它的前驅結點和後繼結點。一般我們都構造雙向迴圈鍊錶。雙鏈表的基本操作有以下 dlistnode buydlistnode datatype x 申請記...
雙鏈表的基本操作
1 include 2 include 3 typedef int elemtype 4 typedef struct dnodednode,dlinklist 8 雙向煉表頭插法 9 dlinklist dlist head insert dlinklist dl 1028 s prior dl ...