學生實驗報告冊
課程名稱:演算法與資料結構
實驗專案名稱: 順序表實驗學時: 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題...