大一 C語言 實驗課3 鍊錶

2021-08-19 09:59:59 字數 4093 閱讀 4978

《程式設計基礎》上機實驗報告

學號:201420224912 

姓名:許培鑫

班級:計算機149

日期:2015-5-

26指導教師:

成筠成績:__________

(1)有兩個鍊錶,其結點包括學號、成績。要求合併兩個鍊錶並按學號公升序排列。

1、實驗內容:

#include#include#define len sizeof(struct student)

struct student;

struct student *head ;

struct student *head1;

struct student *create()

else

p2=p1;

p1=(struct student *)malloc(sizeof(len));

printf("請輸入學生的學號和成績,當學生學號為0時結束輸入:");

scanf("%d %d",&(p1->studid),&(p1->score));

}p2->next=null;

return head;

} struct student *create1()

else

p2=p1;

p1=(struct student *)malloc(sizeof(len));

printf("請輸入學生的學號和成績,當學生學號為0時結束輸入:");

scanf("%d %d",&(p1->studid),&(p1->score));

}p2->next=null;

return head1;

}void print(struct student *h)

else

}}main()

p->next=p1;

printf("合併後的鍊錶是\n");

print(head);

p1=head;

while(p1->next!=null)

for(p=head;p!=null;p=p->next)

for(p1=p->next;p1!=null;p1=p1->next)

} printf("排序後是\n");

print(head);

}

1、執行結果:

(2)鍊錶的結點包括學號、姓名。從鍵盤輸入乙個學號,如果該學號與鍊錶中某一結點的學號相同,則刪去該結點。

2、實驗內容:

#include#include#define len sizeof(struct student)

struct student;

struct student *head ;

struct student *create()

else

p2=p1;

p1=(struct student *)malloc(sizeof(len));

printf("請輸入學生的學號和姓名,當學生學號為0時結束輸入:");

scanf("%d %s",&(p1->studid),(p1->name));

}p2->next=null;

return head;

} struct student *delete(struct student * head,int num)

//遍歷節點,判斷當前節點是不是需要刪除的節點及是否為尾節點

//如果找到相應節點,或者已經遍歷到尾節點就跳出迴圈

while(p1->studid!=num&&p1->next!=null)

//判斷是否找到相應節點

if(p1->studid==num)

else

printf("學號為%d 的節點已刪除.\n",num);

}else

return head;

}void print(struct student *h)

else

}}main()

2、執行結果:

(3)有a、b兩個鍊錶,其結點包括學號、姓名。要求從a鍊錶中刪去與b鍊錶中有相同學號的結點。

3、實驗內容:

#include#include#define len sizeof(struct student)

struct student;

struct student *head ;

struct student *head1;

struct student *create()

else

p2=p1;

p1=(struct student *)malloc(sizeof(len));

printf("請輸入學生的學號和姓名,當學生學號為0時結束輸入:");

scanf("%d %s",&(p1->studid),(p1->name));

}p2->next=null;

return head;

} struct student *create1()

else

p2=p1;

p1=(struct student *)malloc(sizeof(len));

printf("請輸入學生的學號和姓名,當學生學號為0時結束輸入:");

scanf("%d %s",&(p1->studid),p1->name);

}p2->next=null;

return head1;

}struct student *delete(struct student * head,int num)

while(p1->studid!=num&&p1->next!=null)

if(p1->studid==num)

else

}return head; }

void print(struct student *h)

else

}}main()

if(i!=-1)

} printf("處理後的鍊錶的\n");

print(head);

3、實驗結果:

(4)將乙個鍊錶按逆序排列,即鏈頭作鏈尾,鏈尾作鏈頭。

4、實驗內容

#include#include#define len sizeof(struct student)

struct student;

struct student *head ;

struct student *create()

else

p2=p1;

p1=(struct student *)malloc(sizeof(len));

printf("請輸入學生的學號和姓名,當學生學號為0時結束輸入:");

scanf("%d %s",&(p1->studid),(p1->name));

}p2->next=null;

return head;

}struct student *reverse(struct student *p)

hea=p2;

return hea;

}void print(struct student *h)

else

}}main()

4、執行結果

鍊錶 C語言實現(一)

由於cherry不太擅長c,故本系列文章中難免會有紕漏,但cherry會盡力把演算法的思路寫清楚啦!typedef 作用 給型別起別名 typedef struct listnode ptrtonode typedef ptrtonode position 起別名為 position typedef...

鍊錶的C語言實現(一

一 為什麼用動態記憶體分配 但我們未學習鍊錶的時候,如果要儲存數量比較多的同型別或同結構的資料的時候,總是使用乙個陣列。比如說我們要儲存乙個班級學生的某科分數,總是定義乙個float型 存在0.5分 陣列 float score 30 但是,在使用陣列的時候,總有乙個問題困擾著我們 陣列應該有多大?...

鍊錶的C語言實現

編輯 c巨集例項 以下 摘自linux核心2.6.21.5原始碼 部分 展示了鍊錶的另一種實現思路,未採用ansi c標準,採用gnu c標準,遵從gpl版權許可。struct list head define list head init name define list head name st...