日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

c语言双链表是什么意思,双链表的表示和实现(C语言)

發(fā)布時間:2025/4/5 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言双链表是什么意思,双链表的表示和实现(C语言) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

#include#includetypedef int ElemType;

typedef struct node{

ElemType data;

struct node *next;

struct node *prior;

}dlink;

//建立雙鏈表

dlink * credlink(int n){//返回的指針是指向結(jié)構(gòu)體類型的

dlink *head,*p,*s;int i;

p=head=(dlink * )malloc(sizeof(dlink));

for(i=1;i<=n;i++){

s=(dlink * )malloc(sizeof(dlink));

printf("請輸入數(shù)字!");

scanf("%d",&s->data);

s->prior=p;

p->next=s;

p=s;

}

p->next=head->prior=NULL;

return head;

}

//遍歷雙鏈表,和單鏈表相同

dlink *showlink(dlink *head){

dlink *p;

p=head->next;//p=head

while(p!=NULL){//p->next!=NULL,如果寫成這樣,輸出結(jié)果是錯誤的

printf("%d ",p->data);

p=p->next;

}

printf("\n");

}

//求表長操作

int getlen(dlink *head){

dlink *p;

int len=0;

p=head->next;

while(p!=NULL){

len+=1;

p=p->next;

}

return len;

}

//取元素操作(取出雙鏈表head中第i個結(jié)點的值)

int getelem(dlink *head,int i){

dlink *p,*s;

int j;

int e;

p=head->next;j=1;

if(i<1)return 0;//判斷i結(jié)點的合法性

while(p!=NULL&&jnext;

j=j+1;

}

if(p==NULL)return 0;//結(jié)點i超過表長

e=p->data;

return e;

}

//刪除節(jié)點(刪除雙鏈表中第i個節(jié)點)

dlink *deletei(dlink *head,int i){

dlink *p,*s;

int j;

p=head->next;j=1;

if(i<1)return 0;//判斷i結(jié)點的合法性

while(p!=NULL&&jnext;

j=j+1;

}

if(p->next==NULL)return 0;//結(jié)點i超過表長

s=p->next;

s->next->prior=p;

p->next=s->next;

free(s);

return head;

}

//定位操作(返回雙鏈表中第1個為值為x的結(jié)點的位置)

int locate(dlink *head,ElemType x){

dlink *p;

int i;

i=1;

p=head->next;

while(p!=NULL&&p->data!=x){

p=p->next;

i=i+1;

}

if(p==NULL)return 0;

return i;

//return p;

}

//插入操作(在雙鏈表中第i個結(jié)點之前插入一個值為x的結(jié)點)

int insertx(dlink *head,ElemType x,int i){

dlink *p,*s;

int j=1;

p=head->next;

s=(dlink * )malloc(sizeof(dlink));

if(i<1)return 0;//插入失敗

while(p!=NULL&&jnext;

j=j+1;

}

if(p==NULL)return 0;//插入失敗,插入位置超出表長

s->data=x;

s->next=p->next;

s->prior=p;

p->next->prior=s;

p->next=s;

return 1;

}

//輸出操作(從反方向輸出雙鏈表中各個結(jié)點的值)

dlink *invertshow(dlink *head){

dlink *p,*s;

int j=1;

p=head;

while(p->next!=NULL){

p=p->next;

}

while(p!=head){

printf("%d ",p->data);

p=p->prior;

}

}

int main(){

dlink *head;

int n,i,x;

head = NULL;

printf("請輸入數(shù)字輸入個數(shù):");

scanf("%d",&n);

//創(chuàng)建雙鏈表

head = credlink(n);

//遍歷雙鏈表

showlink(head);

//獲取表長

//printf("該雙鏈表表長為:%d",getlen(head));

//printf("請輸入取出第i個結(jié)點\n");

//scanf("%d",&i);

取節(jié)點

//printf("所取元素為:%d",getelem(head,i));

//printf("請輸入要刪除的結(jié)點i\n");

//scanf("%d",&i);

//deletei(head,i);

//printf("刪除后剩余鏈表為:\n");

//showlink(head);

//printf("請輸入你想找到位置的x的值");

//scanf("%d",&x);

//printf("該位置為:%d",locate(head,x));

// printf("請輸入插入數(shù)值x以及插入位置i");

// scanf("%d%d",&x,&i);

// insertx(head,x,i);

// showlink(head);

invertshow(head);

}

github下載地址:https://github.com/cantaloupeJinJin/datastructure.git

注意:一個函數(shù)可以返回一個整型值、字符值等,也可以返回指針型的數(shù)據(jù),即地址。這種返回指針值得函數(shù),一般定義形式為:

類型名 *a(int i,int j)

a是函數(shù)名,調(diào)用它以后能得到一個指向整型數(shù)據(jù)得指針(地址)。x,y是函數(shù)a 得形參,為整型。請注意*a兩側(cè)沒有括號,在a 得兩側(cè)分別為*運算符和()運算符。而()的優(yōu)先級高于*,因此a先與()結(jié)合。顯然這是函數(shù)形式。這個函數(shù)前面有一個*,表示此函數(shù)是指針型函數(shù)(函數(shù)值是指針)。最前面的int表示返回的指針指向整型變量。

《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的c语言双链表是什么意思,双链表的表示和实现(C语言)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。