演算法與資料結構實驗報告

2021-03-04 02:32:27 字數 4048 閱讀 6161

學生實驗報告冊

課程名稱:演算法與資料結構

實驗專案名稱: 順序表實驗學時: 2

同組學生姓名實驗地點: 工科樓a205

實驗日期: 2023年10月16日實驗成績

批改教師批改時間

實驗1 順序表

一、實驗目的和要求

掌握順序表的定位、插入、刪除等操作。

二、實驗儀器和裝置

turbo c 2.0

三、實驗內容與過程(含程式清單及流程圖)

1、必做題

(1) 編寫程式建立乙個順序表,並逐個輸出順序表中所有資料元素的值。編寫主函式測試結果。

(2) 編寫順序表定位操作子函式,在順序表中查詢是否存在資料元素x。如果存在,返回順序表中和x值相等的第1個資料元素的序號(序號從0開始編號);如果不存在,返回-1。編寫主函式測試結果。

(3) 在遞增有序的順序表中插入乙個新結點x,保持順序表的有序性。

解題思路:首先查詢插入的位置,再移位,最後進行插入操作;從第乙個元素開始找到第乙個大於該新結點值x的元素位置i即為插入位置;然後將從表尾開始依次將元素後移乙個位置直至元素i;最後將新結點x插入到i位置。

(4) 刪除順序表中所有等於x的資料元素。

2、選做題

(5) 已知兩個順序表a和b按元素值遞增有序排列,要求寫一演算法實現將a和b歸併成乙個按元素值遞減有序排列的順序表(允許表中含有值相同的元素)。

程式清單:

1、#define maxsize 100

typedef structsequenlist;

main()

,7};

printf("\nthe list is:");

for(i=0;i<=l.last;i++) printf("%2d",l.data[i]);

}2、#define maxsize 100

typedef structsequenlist;

main()

,7};

printf("\nthe list is:");

for(i=0;i<=l.last;i++)

printf("%2d",l.data[i]);

printf("\nplease input the number :");

scanf("%d",&x);

for(i=0;i<=l.last;i++)

if(l.data[i]==x)

printf("%d",s);

}3、#define maxsize 100

typedef structsequenlist;

main()

,5};

printf("\nthe list is:");

for(i=0;i<=l.last;i++)

printf("%2d",l.data[i]);

printf("\ninput the insert number:");

scanf("%d",&x);

for(i=1;i<=l.last;i++)

if(l.data[i-1]>x) break;

for(j=l.last;j>=i-1;j--)

l.data[j+1]=l.data[j];

l.data[i-1]=x;

l.last++;

printf("the list after insertion is:\n");

for(j=0;j<=l.last;j++)

printf("%3d",l.data[j]);

}4、#define maxsize 100

typedef structsequenlist;

main(),9};

printf("\n the list is:");

for(i=0;i<=l.last;i++) printf("%3d",l.data[i]);

printf("\nplease input a number x:");

scanf("%d",&x);

for(i=1;i<=l.last+1;i++)

if(l.data[i-1]==x)

if(k==1)

else printf("not found!\n");

}四、實驗結果與分析(程式執行結果及其分析)

1、輸出結果:the list is: 2 5 6 8 2 8 4 3

2、輸出結果:the list is: 2 5 6 7 9 8 4 3

please input the number:8

5the list is: 2 5 6 7 9 8 4 3

please input the number:1

13、輸出結果:the list is: 1 3 5 6 7 9

input the insert number:8

the list after insertion is:

1 3 5 6 7 8 9

4、輸出結果:the list is: 1 3 5 7 2 4 6 8 2 9

please input a number x:5

the list after deletion is:

1 3 7 2 4 6 8 2 9

the list is: 1 3 5 7 2 4 6 8 2 9

please input a number x:11

not found!

五、實驗體會(遇到問題及解決辦法,程式設計後的心得體會)

遇到問題:讀取資料元素時,誤將==寫成=,導致錯誤。實驗過程中,順序表的賦值沒有弄懂,以致輸出多個0或者少輸出。格式運算子也要正確控制,否則系統會停止工作。

實驗體會:通過實驗掌握了順序表的基本操作,如初始化、插入、讀取元素、刪除等等。並了解到線性表順序儲存結構的特點,即邏輯關係上相鄰的兩個元素在物理位置上也相鄰,然而從另一方面來看,在做插入和刪除時需要移動大量元素。

本次實驗基本完成了實驗要求的目的,順序表的初始化,定義,插入,查詢等,更好的了解了順序表基本操作的演算法,以及更直觀的了解了資料結構在c語言環境下的體現。

實驗專案名稱: 單鏈表實驗學時: 2

同組學生姓名實驗地點: 工科樓a205

實驗日期: 2023年10月23日實驗成績

批改教師批改時間

實驗2 單鏈表

一、實驗目的和要求

1、實驗目的

掌握單鏈表的定位、插入、刪除等操作。

2、實驗要求

(1)注意鍊錶的空間是動態分配的,某結點不用之後要及時進行物理刪除,以便釋放其記憶體空間。

(2)鍊錶不能實現直接定位,一定注意指標的儲存,防止丟失。

二、實驗儀器和裝置

turbo c 2.0

三、實驗內容與過程(含程式清單及流程圖)

1、必做題

(1) 編寫程式建立乙個單鏈表,並逐個輸出單鏈表中所有資料元素。

(2) 在遞增有序的單鏈表中插入乙個新結點x,保持單鏈表的有序性。

解題思路:首先查詢插入的位置然後進行插入操作;從第乙個結點開始找到第乙個大於該新結點值的結點即為插入位置;然後在找到的此結點之前插入新結點;注意保留插入位置之前結點的指標才能完成插入操作。

(3) 編寫實現帶頭結點單鏈表就地逆置的子函式,並編寫主函式測試結果。

2、選做題

已知指標la和lb分別指向兩個無頭結點單鏈表的首元結點。要求編一演算法實現,從表la中刪除自第i個元素起共len個元素後,將它們插入到表lb中第j個元素之前。

程式清單:

1、#include

typedef int datattype;

typedef struct nodelinklist;

main(){

char ch;linklist *head,*s,*r,*p;

head=malloc(sizeof(linklist));

r=head;

scanf("%c",&ch);

while(ch!='$'){

s=malloc(sizeof(linklist));

s->data=ch;

r->next=s;

資料結構與演算法實驗報告

實驗名稱 線性表的應用指導教師 余文春 實驗日期 2014年月日實驗地點 北503 成績 實驗目的 1 掌握線性表及其順序儲存與鏈式儲存結構的概念。2 掌握兩種儲存方式的基本運算 實現方法和技術。3 靈活應用線性表進行程式設計,解決實際問題。實驗內容 約瑟夫 joseph 問題的一種描述是 編號為1...

資料結構與演算法專題實驗報告

資料結構 建立乙個具有n n 1 個頂點的無向圖的鄰接矩陣,並對其按照 深度優先搜尋 和 廣度優先搜尋 方法進行遍歷。1.編寫c程式予以實現。2.程式要求能輸入圖的頂點數 邊數以及邊的關係,並自動生成鄰接矩陣。3.結果輸出鄰接矩陣和遍歷的路徑。4.熟悉無向圖的兩種遍歷演算法。考慮用乙個n維陣列來存放...

資料結構與演算法專題實驗報告

目錄附錄a 報告格式 1 第一部分題目 3 第1題約瑟夫環 3 1 題目 3 2 目標 3 3 設計思想 3 4 演算法描述 4 5 程式流程圖 5 6 源程式 5 第2題大數階乘 9 1 題目 9 2 目標 9 3 設計思想 9 4 演算法描述 10 5 程式流程圖 11 6 源程式 11 第3題...