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语言)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言实现点在多边形内部,C语言中实现
- 下一篇: c语言设备管理系统实训答辩,C语言设计(