雙鏈表的基本操作(經過測試的)

2021-05-25 15:22:26 字數 3212 閱讀 2301

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