日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

#include#includetypedef int ElemType;

typedef struct node{

ElemType data;

struct node *next;

struct node *prior;

}dlink;

//建立雙鏈表

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

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

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

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

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

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

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,如果寫成這樣,輸出結果是錯誤的

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個結點的值)

int getelem(dlink *head,int i){

dlink *p,*s;

int j;

int e;

p=head->next;j=1;

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

while(p!=NULL&&jnext;

j=j+1;

}

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

e=p->data;

return e;

}

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

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

dlink *p,*s;

int j;

p=head->next;j=1;

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

while(p!=NULL&&jnext;

j=j+1;

}

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

s=p->next;

s->next->prior=p;

p->next=s->next;

free(s);

return head;

}

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

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個結點之前插入一個值為x的結點)

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;

}

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

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("請輸入數字輸入個數:");

scanf("%d",&n);

//創建雙鏈表

head = credlink(n);

//遍歷雙鏈表

showlink(head);

//獲取表長

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

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

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

取節點

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

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

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

//deletei(head,i);

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

//showlink(head);

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

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

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

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

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

// insertx(head,x,i);

// showlink(head);

invertshow(head);

}

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

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

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

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

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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。