深
圳
大
學
實
驗
報
告 告
課程名稱:
數據結構實驗與課程設計
實驗項目名稱:
實驗一:順序表得應用
學院:
計算機與軟件學院
專業:
指導教師:
:
蔡平
報告人:
:
文成
學號:
20 111 50259
級班? 班級:
5
實驗時間:
20 12-9 —17
實驗報告提交時間:
20 12—9 -2 4
教務部制 一、實驗目得與要求: 目得: 1、掌握線性表得基本原理 2、掌握線性表地基本結構 3、掌握線性表地創建、插入、刪除、查找得實現方法 要求: 1、熟悉 C++語言編程 2、熟練使用C++語言實現線性表地創建、插入、刪除、查找得實現方法
二、實驗內容:
Pr oblem
A:
數據結構 ——驗 實驗 1 —— 順序表例程 Description 實現順序表得創建、插入、刪除、查找 Input 第一行輸入順序表得實際長度 n 第二行輸入 n 個數據 第三行輸入要插入得新數據與插入位置 第四行輸入要刪除得位置 第五行輸入要查找得位置 Output 第一行輸出創建后,順序表內得所有數據,數據之間用空格隔開 第二行輸出執行插入操作后,順序表內得所有數據,數據之間用空格隔開 第三行輸出執行刪除操作后,順序表內得所有數據,數據之間用空格隔開 第四行輸出指定位置得數據 Sample Input 6 11 22 33 44 55 66 888 3 5 2 Sample Output 11 22 33 44 55 66
11 22 888 33 44 55 66
11 22 888 33 55 66
22 HINT 第 i 個位置就是指從首個元素開始數起得第i個位置,對應數組內下標為 i-1得位置 Prob lem B :
數據結構-— —驗 實驗 1 —— 順序表得數據交換 Description 實現順序表內得元素交換操作 Input 第一行輸入 n 表示順序表包含得·n 個數據 第二行輸入n個數據,數據就是小于 100 得正整數 第三行輸入兩個參數,表示要交換得兩個位置 第四行輸入兩個參數,表示要交換得兩個位置 Output 第一行輸出創建后,順序表內得所有數據,數據之間用空格隔開 第二行輸出執行第一次交換操作后,順序表內得所有數據,數據之間用空格隔開 第三行輸出執行第二次交換操作后,順序表內得所有數據,數據之間用空格隔開 注意加入交換位置得合法性檢查,如果發現位置不合法,輸出error。
Sample Input 5 11 22 33 44 55 2 4 0 1 Sample Output 11 22 33 44 55
11 44 33 22 55
error HINT 本題執行兩次交換操作,注意寫好輸入接口。
Proble m C:
數據結構 ——驗 實驗 1 —— 順序表得合并 Description 假定兩個順序表得數據已經按照從小到大得順序排列,實現兩個順序表得合并 Input 第一行輸入 n 表示順序表 A 包含得·n 個數據 第二行輸入 n 個數據,數據就是小于 100 得正整數 第三行輸入 m 表示順序表 B 包含得·n 個數據 第二行輸入m個數據,數據就是小于 100 得正整數 Output 輸出合并后得順序表內得所有數據,數據之間用空格隔開 Sample Input 3 11 33 55 4 22 44 66 88 Sample Output 11 22 33 44 55 66 88
問題 D: 數據結構— —- 實驗 1 —— 順序表得循環移位 題目描述 順序表得移位就是循環移位,例如順序表:1,2,3,4,5,6。如果左移 1 位,即原來得頭元素移動到末尾,其它元素向左移 1 位,變成 2,3,4,5,6,1。同理,如果右移 1 位,即原來得尾元素移動到頭,其它元素向右移 1 位,變成 6,1,2,3,4,5.以下就是移位得多個例子:
原數據:1,2,3,4,5,6 左移 3 位:4,5,6,1,2,3,與原數據對比 右移4位:3,4,5,6,1,2,與原數據對比 請編寫程序實現順序表得循環移位操作 輸入 第一行輸入n表示順序表包含得·n 個數據 第二行輸入 n 個數據,數據就是小于 100得正整數 第三行輸入移動方向與移動得位數,左移方向為 0,右移方向為 1 第三行輸入移動方向與移動得位數,左移方向為 0,右移方向為 1
輸出 第一行輸出創建后,順序表內得所有數據,數據之間用空格隔開 第二行輸出執行移位操作后,順序表內得所有數據,數據之間用空格隔開 第三行輸出執行移位操作后,順序表內得所有數據,數據之間用空格隔開 如果發現輸入得移動方向或位數不合法,不執行移位操作,輸出 error 樣例輸入 5 11 22 33 44 55 0 2 1 4 樣例輸出 11 22 33 44 55
33 44 55 11 22
44 55 11 22 33
三、 實驗步驟與過程:
思路: 1.順序表類定義 2、順序表得創建、插入、刪除、查找等功能得實現 3、順序表得測試運行 源代碼: A :
#include<iostream> using namespace std; class List { private:
int *elem;//
素元組數? int listsize;// 度長大最表序順? ;htgnel tni? // 度長前當表序順?public:
List(int size);// 數函造構? ~List();
//析構函數
int ListLength(); //獲取順序表得實際長度
int ListInsert(int i,int e);// 素元個一入插? ;)i tni(eteleDtsiL tni? //刪除一個元素,返回刪除得元素
int GetElem(int i);// 值素元回返,素元個一取獲??}; List::List(int size) //構造函數 {
;ezis=ezistsil? length=0;
elem=new int[listsize]; } List::~List() //析構函數 {
;mele][eteled? //回收空間 } int List::ListLength()// 度長際實得表序順取獲?{
;htgnel nruter?} int List::ListInsert(int i,int e)// 素元個一入插?{
if (length==listsize)
? return 0;// 滿已表序順? if (i<1 || i>length+1)
法合不值 i// ;0 nruter? )1+htgnel==i( fi?
;e=]htgnel[mele? else
)—-j;1—i>j;htgnel=j tni( rof??
elem[j]=elem[j-1]; //位置 i 后面得元素全部后移一位
;e=]1—i[mele? ;++htgnel? return 1; } int List::ListDelete(int i)
//刪除一個元素,返回刪除得元素 {
)0==htgnel( fi? ? return 0;
)htgnel>i || 1〈i( fi?
return 0;
int temp=elem[i—1]; /)++j;htgnel<j;1-i=j tni( rof?/ 位一移前部全素元得面后 i 置位? ;]1+j[mele=]j[mele?? ;—-htgnel? ;pmet nruter?
} int List::GetElem(int i)
//獲取一個元素,返回元素值 {
)htgnel>i || 1<i(fi? ;0 nruter?? ;]1—i[mele nruter?} int main()
{
;pmet,nel,i tni? List myList(20);// 02 為度長大最,表序順個一建創? cin〉〉len;
)++i;1+nel〈i;1=i(rof? {?
cin>〉temp;
myList、ListInsert(i,temp);
}?/)++i;1+)(htgneLtsiL、tsiLym<i;1=i(rof?/ 表序順印打?
;” ”〈〈)i(melEteG、tsiLym〈〈tuoc? cout〈〈endl;
;j,mele tni?
? cin>>elem>〉j;// 置位得入插及以數入插入輸? myList、ListInsert(j,elem);//
作操入插行執? for(i=1;i<myList、ListLength()+1;i++) //打印插入后得結果
;" ”<<)i(melEteG、tsiLym〈<tuoc? ;ldne〈<tuoc?
;j>>nic? //輸入刪除得位置 / ;)j(eteleDtsiL、tsiLym?/ 作操除刪行執? for(i=1;i〈myList、ListLength()+1;i++)
//打印插入后得結果
cout<<myList、GetElem(i)<〈" ";
;ldne<<tuoc?
cin>〉j;
據數得置位定指出輸// ;ldne<〈)j(melEteG、tsiLym<<tuoc? return 0; } B: #include<iostream〉 using namespace std; class List {
private: /;mele* tni?/ 素元組數? int listsize; //順序表最大長度 /;htgnel tni?/ 度長前當表序順??public:
List(int size);//構造函數 ~ ;)(tsiL?
//析構函數
int ListLength();// 度長際實得表序順取獲? ;)e tni,i tni(tresnItsiL tni? //插入一個元素
int ListDelete(int i);
//刪除一個元素,返回刪除得元素
int GetElem(int i); ? // 值素元回返,素元個一取獲?/;)b tni,a s tni?/ 素元個二換交??}; List::List(int size)//構造函數 {
;ezis=ezistsil? ;0=htgnel? elem=new int[listsize]; } List::~List()//析構函數 {
;mele][eteled?} int List::ListLength()//獲取順序表得實際長度 {
;htgnel nruter?} int List::ListInsert(int i,int e)
//插入一個元素 {
if (length==listsize)
return 0; //順序表已滿
)1+htgnel〉i || 1<i( fi? ? return 0;// 法合不值 i? if (i==length+1)
elem[length]=e;
else
/)—-j;1—i〉j;htgnel=j tni( rof?/ 位一移后部全素元得面后 i 置位? ?
elem[j]=elem[j-1];
elem[i-1]=e;
;++htgnel? ;1 nruter?} int List::ListDelete(int i)//刪除一個元素,返回刪除得元素 {
)0==htgnel( fi?
return 0;
)htgnel>i || 1<i( fi?
;0 nruter? ;]1—i[mele=pmet tni?/)++j;htgnel<j;1—i=j tni( rof?/ 位一移前部全素元得面后 i 置位??
;]1+j[mele=]j[mele? ;——htgnel? return temp; } int List::GetElem(int i)
// 值素元回返,素元個一取獲?{
)htgnel>i || 1<i(fi?
;0 nruter? ;]1-i[mele nruter?} int List::s a,int b)
//交換二個元素 {
if (a<1 || a〉length || b〈1 || b〉length || a==b)
?{? /;”rorre"<〈tuoc?/ 錯報則,法合不入輸? ? return 0;
}? else
{
/ ;]1-a[mele=pmet tni?/ 素元換交?
elem[a-1]=elem[b-1];
elem[b-1]=temp;
}? return 1; } int main()
{
int i,len,temp;
List myList(100);// 001為度長大最,表序順個一建創? ;nel〉>nic? for(i=1;i<len+1;i++)
{
;pmet〉〉nic??
myList、ListInsert(i,temp);
} /)++i;1+)(htgneLtsiL、tsiLym<i;1=i(rof?/ 表序順印打? ;” "<<)i(melEteG、tsiLym〈〈tuoc?? ;ldne<〈tuoc?
置位得素元換交入輸// ;y,x tni? ;y>〉x>〉nic?/))s、tsiLym( fi?/ 素元個二這換交? {? for(i=1;i<myList、ListLength()+1;i++)//打印交換元素后得順序表
;” "<<)i(melEteG、tsiLym<<tuoc? cout〈<endl;
}?
cin〉〉x>〉y; /))s、tsiLym( fi?/ 素元個二這換交? {
for(i=1;i<myList、ListLength()+1;i++)//打印交換元素后得順序表
cout〈〈myList、GetElem(i)<<” ";
;ldne〈<tuoc? }
return 0; } C :
#include〈iostream〉 using namespace std; class List { private:
int *elem;
int listsize;// 度長大最表序順?
;htgnel tni? //順序表當前長度 public:
數函造構// ;)ezis tni(tsiL? ~List(); // 數函構析?/;)(htgneLtsiL tni?/ 度長際實得表序順取獲? int ListInsert(int i,int e); //插入一個元素 /;)i tni(eteleDtsiL tni?/ 素元得除刪回返,素元個一除刪?/;)i tni(melEteG tni?/ 值素元回返,素元個一取獲?? 并合得表序順個兩現實//;)b& tsiL,a& tsiL(cnuf tni dneirf?}; List::List(int size)// 數函造構?{
listsize=size;
length=0;
elem=new int[listsize];
} List::~List()// 數函構析??{
間空收回//;mele][eteled?} int List::ListLength() //獲取順序表得實際長度 {
;htgnel nruter?} int List::ListInsert(int i,int e)// 素元個一入插?{
)ezistsil==htgnel( fi? ? return 0;// 滿已表序順? if (i<1 || i>length+1)
法合不值 i// ;0 nruter? )1+htgnel==i( fi?
;e=]htgnel[mele? else
)--j;1-i〉j;htgnel=j tni( rof?
? elem[j]=elem[j—1];// 位一移后部全素元得面后 i 置位? elem[i-1]=e;
length++;
;1 nruter?} int List::ListDelete(int i)// 素元得除刪回返,素元個一除刪?{
)0==htgnel( fi? ;0 nruter?? )htgnel〉i || 1<i( fi?
return 0;
int temp=elem[i—1];
)++j;htgnel<j;1—i=j tni( rof? ? elem[j]=elem[j+1];// 位一移前部全素元得面后 i 置位? ;-—htgnel? ;pmet nruter?} int List::GetElem(int i)// 值素元回返,素元個一取獲?{
)htgnel〉i || 1<i(fi? ;0 nruter?? ;]1—i[mele nruter?} int func(List &A,List &B)// 并合得表序順個兩現實?{
;a tni?
for (int i=0;i<B、ListLength();i++)
{?
a=—1;
)++j;)(htgneLtsiL、A<j;0=j tni(rof?
{??置位得入插找尋//)]j[mele、A<]i[mele、B( fi?
{??
?
;j=a?;kaerb??
? }
}
? if(a==—1)
? { ?/;]i[mele、B=]htgnel、A[mele、A?/插,得大最是就]i[mele、B?到末尾
?? A、length++; //順序表當前長度+1
}?
esle? ? {
? for(int k=A、length—1;k>=a;k—-)//位置 i 后面得元素全部前移一位
?;]k[mele、A=]1+k[mele、A?
A、elem[a]=B、elem[i];//將 B、elem[i]插到位置 i 處
1+度長前當表序順// ;++htgnel、A? ? }
}
;0 nruter?} int main()
{
int i,len,temp;
;)001(1tsiLym tsiL? //創建一個順序表1,最大長度為 100 /;)001(2tsiLym tsiL?/ 001為度長大最,2 表序順個一建創? cin>〉len;//輸入順序表 1 長度
for(i=1;i<len+1;i++)//輸入數據
{?
cin>>temp;
? myList1、ListInsert(i,temp);
}
cin〉>len;//輸入順序表 2 長度
據數入輸//)++i;1+nel<i;1=i(rof? {?
cin>>temp;
;)pmet,i(tresnItsiL、2tsiLym? }?/;)2tsiLym,1tsiLym(cnuf?/ 并合 2 表序順與 1 表序順將? for(i=1;i<myList1、ListLength()+1;i++)//結得后并合出輸?果
? cout〈〈myList1、GetElem(i)<〈" ";
;ldne<<tuoc? return 0; } D: #include<iostream〉 using namespace std; class List { private:
int *elem;
度長大最表序順// ;ezistsil tni? int length; // 度長前當表序順?public:
數函造構// ;)ezis tni(tsiL? ~List();// 數函構析?? int ListLength();// 度長際實得表序順取獲?/;)e tni,i tni(tresnItsiL tni?/ 素元個一入插? 素元得除刪回返,素元個一除刪// ;)i tni(eteleDtsiL tni? int GetElem(int i);// 值素元回返,素元個一找查?? int Move(int a,int b); }; List::List(int size) //構造函數 {
listsize=size;
;0=htgnel? ;]ezistsil[tni wen=mele?} List::~List()// 數函構析??{
間空收回//;mele][eteled?} int List::ListLength()
//獲取順序表得實際長度 {
;htgnel nruter?} int List::ListInsert(int i,int e)
//插入一個元素 {
)ezistsil==htgnel( fi? ? return 0;// 滿已表序順? if (i<1 || i>length+1)
;0 nruter? //i值不合法
)1+htgnel==i( fi? ? elem[length]=e;
esle?
for (int j=length;j>i-1;j--)
elem[j]=elem[j—1];// 位一移后部全素元得面后 i 置位? elem[i-1]=e;
;++htgnel? ;1 nruter?} int List::ListDelete(int i)// 素元得除刪回返,素元個一除刪?{
if (length==0)
;0 nruter?? )htgnel>i || 1<i( fi? ;0 nruter?? int temp=elem[i-1];
)++j;htgnel<j;1-i=j tni( rof? ? elem[j]=elem[j+1];// 位一移前部全素元得面后 i 置位? ;——htgnel? return temp; } int List::GetElem(int i)// 值素元回返,素元個一找查?{
if(i〈1 || i>length)
;0 nruter?? return elem[i-1]; } int List::Move(int a,int b)
{
;j,i tni? 間空得度長倍2個一造構先//;]htgnel*2[tni wen=p* tni? for (i=0;i<length;i++)
;]i[mele=]i[p? for (j=0;j〈length;j++,i++)
;]j[mele=]i[p?? //實際上p指向得就是 elem*2 得數組
移左向則,0==a 若//)0==a( fi? ? for(i=0;i<length;i++)
mele 給果結得后位 b 移左向將//;]b+i[p=]i[mele? 移右向則,1==a 若//)1==a( fi?
for(i=0;i<length;i++)
?
elem[i]=p[i+length-b];//將向右移 b 位后得結果給 elem
;0 nruter?} int main() {
;pmet,nel,i tni?/;)001(tsiLym tsiL?/ 001 為度長大最,表序順個一建創? 度長表序順入輸//;nel>>nic? for(i=1;i<len+1;i++)//輸入數據
{
cin〉>temp;
myList、ListInsert(i,temp);
}? for(i=1;i〈myList、ListLength()+1;i++)//打印順序表
;" "<<)i(melEteG、tsiLym<<tuoc? ;ldne<<tuoc? int a,b;
;b〉〉a>〉nic? myList、Move(a,b);// 位移環循? 表序順印打//)++i;1+)(htgneLtsiL、tsiLym〈i;1=i(rof?
cout<<myList、GetElem(i)<〈" ”;
cout<<endl;
cin>〉a>>b;
//循環移位
myList、Move(a,b);
for(i=1;i〈myList、ListLength()+1;i++)//打印順序表
;” "<<)i(melEteG、tsiLym<〈tuoc? cout<<endl;
return 0; }
四、實驗結果及數據處理分析:
A:
實驗基本達到實驗要求 B:
實驗基本達到實驗要求 C:
實驗基本達到實驗要求 D:
實驗基本達到實驗要求 五、實驗結論 與體會:
從這個實驗中我學會了線性表一些基本操作,例如插入、查找與刪除。也復習了一邊C++語言程序得規范。原先試了很多次都就是出現錯誤,最后才發現太久沒編程,犯了很多低級錯誤,從中體會到編程就是需要時間與耐心得。
要求挺簡單得,就就是如此簡單得插入、查找、刪除、循環移位等。程序寫完了,但就是還發現程序中還有許多不完善得地方、不嚴謹得地方,如異常處理,在不按正確輸入格式輸入時,會出現程序錯誤或死了得情況.
指導教師批閱意見:
成績評定:
指導教師簽字:
年
月
日 備注:
注:1、報告內得項目或內容設置,可根據實際情況加以調整與補充。
2、教師批改學生實驗報告時間應在學生提交實驗報告時間后10 日內。
推薦訪問: 實驗 數據結構 報告上一篇:嵌入式,綜合應用實驗報告,(1)
下一篇:課程規劃報告
同志們:今天這個大會,是市委全面落實黨要管黨、從嚴治黨要求的一項重大舉措,也是對縣市區委書記履行基層黨建工作第一責任人情況的一次集中檢閱,同時是對全市基層黨建工作的一次再部署、再落實的會議。前面,**
***年,我認真履行領班子、帶隊伍、抓黨員、保穩定的基層黨建工作思路,以學習貫徹習近平新時代中國特色社會主義思想和黨的十九大歷次全會精神為主線,以市局基層黨建工作考核細則為落腳點,落實全面從嚴治黨主體
根據會議安排,現將2022年履行抓基層黨建工作職責情況報告如下:一、履職工作特色和亮點1 突出政治建設,著力在思想認識上提高。牢固樹立抓黨建就是抓政績的理念,以“黨建工作抓引領、社區治理求突破,為民服
2022年以來,在**黨委的正確領導下,堅持以習近平新時代中國特色社會主義思想為指導,深入學習宣傳貫徹黨的二十大精神,以黨建工作為統領,扎實開展夯實“三個基本”活動,以“四化四力”行動為抓手,聚力創建
各位領導,同志們:根據會議安排,現就2022年度抓基層黨建工作情況匯報如下:一、主要做法及成效(一)強化政治引領。一是不斷強化理論武裝。堅持通過黨組會、中心組學習會和“三會一課”,第一時間、第一議題學
2022年度抓基層黨建工作述職報告按照黨委工作部署,現將本人2022年度抓基層黨建工作情況報告如下:一、2022年度抓基層黨建工作情況(一)旗幟鮮明講政治將旗幟鮮明講政治放在全局發展首要位置,積極開展
2022年,是我在數計系黨總支書記這個新崗位上度過的第一個完整的工作年度。回首一年來在校黨委的正確領導下,與數計系領導班子和全體師生共同走過的日子,艱辛歷歷在目,收獲溫潤心田。作為黨總支書記,我始終牢
按照考核要求,現將本人一年來,作為統戰部長履行職責、廉潔自律等方面情況報告如下:一、著眼增強政治素質,不斷深化理論學習堅持把旗幟鮮明講政治作為履職從政的第一位要求,帶領統戰系統干部堅決擁護“兩個確立”
**年,緊緊圍繞黨工委、管委會的決策部署,全體人員團結協作、凝心聚力,緊扣黨工委“**”基本工作思路,全力開拓進取,認真履職盡責,圓滿完成各項工作任務。一、個人思想政治狀況檸檬文苑www bgzjy
按照縣委關于開展抓基層黨建述職評議會議的有關要求,經請示縣委組織部同意,今天,我們在此召開2022年度基層黨組織書記抓基層黨建述職評議會議。1 首先,請**黨委書記,**同志述職。**黨委能夠主動研究