數(shù)據(jù)結(jié)構(gòu)-查找排序?qū)嶒?yàn)_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)-查找排序?qū)嶒?yàn)_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu)-查找排序?qū)嶒?yàn)_第3頁(yè)
數(shù)據(jù)結(jié)構(gòu)-查找排序?qū)嶒?yàn)_第4頁(yè)
數(shù)據(jù)結(jié)構(gòu)-查找排序?qū)嶒?yàn)_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

實(shí)驗(yàn)五:查找和排序班級(jí)B09513學(xué)號(hào)200940姓名一、實(shí)驗(yàn)?zāi)康?掌握查找的不同方法,并能用高級(jí)語(yǔ)言實(shí)現(xiàn)查找算法。2熟練掌握順序表和有序表的順序查找和二分查找方法。3掌握排序的不同方法,并能用高級(jí)語(yǔ)言實(shí)現(xiàn)排序算法。4熟練掌握順序表的選擇排序、冒泡排序和直接插入排序算法的實(shí)現(xiàn)。二、實(shí)驗(yàn)內(nèi)容1創(chuàng)建給定的靜態(tài)查找表。表中共包含十條學(xué)生信息,信息如下:學(xué)號(hào)姓名班級(jí)C++數(shù)據(jù)結(jié)構(gòu)1王立0351185762張秋0351178883劉麗0351190794王通0351175865趙陽(yáng)0351160716李艷0351158687錢(qián)娜0351195898孫勝0351145602使用順序查找方法,從查找表中查找姓名為趙陽(yáng)和王夏的學(xué)生。如果查找成功,則顯示該生的相關(guān)信息;如果查找不成功,則給出相應(yīng)的提示信息。3使用直接插入排序方法,按姓名對(duì)學(xué)生信息進(jìn)行排序。輸出排序前和排序后的學(xué)生信息表,驗(yàn)證排序結(jié)果。4使用直接選擇排序方法,對(duì)學(xué)生信息中的C成績(jī)進(jìn)行排序。輸出排序前和排序后的學(xué)生信息表,驗(yàn)證排序結(jié)果。5使用二分查找方法,從查找表中查找C成績(jī)?yōu)?9和80的學(xué)生。如果查找成功,則顯示該生的相關(guān)信息;如果查找不成功,則給出相應(yīng)的提示信息。6使用冒泡排序方法,對(duì)學(xué)生信息中的數(shù)據(jù)結(jié)構(gòu)成績(jī)進(jìn)行排序。輸出排序前和排序后的學(xué)生信息表,驗(yàn)證排序結(jié)果。7編寫(xiě)一個(gè)主函數(shù),將上面函數(shù)連在一起,構(gòu)成一個(gè)完整程序。8將實(shí)驗(yàn)源程序調(diào)試并運(yùn)行。注意:每完成一個(gè)操作必須進(jìn)行輸出,以驗(yàn)證操作的正確性。三、實(shí)驗(yàn)結(jié)果#include<iostream>#include<string>#include<iomanip>usingnamespacestd;constintMAX=100;typedefstruct{ intnum;stringname; intclassnum; intcs; intss;}DataType;typedefstruct{ DataTypedata[MAX]; intlength;}SNode;voidInit(SNode*t){ t->length=0;}voidCreate(SNode*t,inta[],stringb[],intc[],intd[],inte[],intn) //創(chuàng)建{ for(inti=0;i<n;i++) { t->data[i+1].num=a[i]; t->data[i+1].name=b[i]; t->data[i+1].classnum=c[i]; t->data[i+1].cs=d[i]; t->data[i+1].ss=e[i]; t->length++; }}voidDisplay(SNode*t,inti) //輸出學(xué)生的相關(guān)信息{cout.setf(ios::right);cout<<setw(8)<<"學(xué)號(hào)"<<setw(10)<<"姓名"<<setw(10)<<"班級(jí)"<<setw(10)<<"C++成績(jī)"<<setw(15)<<"數(shù)據(jù)結(jié)構(gòu)成績(jī)"<<endl;cout.setf(ios::right); cout<<setw(8)<<t->data[i].num<<setw(10)<<t->data[i].name<<setw(10)<<t->data[i].classnum<<setw(10)<<t->data[i].cs<<setw(15)<<t->data[i].ss<<endl;}voidN_Search(SNode*t,stringkn) //按姓名查找{ inti; i=t->length; t->data[0].name=kn;while(t->data[i].name!=kn) i--; if(i==0) cout<<"······對(duì)不起,沒(méi)有該姓名的學(xué)生!········"<<endl; else { cout<<"····找到了!······"<<endl;Display(t,i); } }voidC_Search(SNode*t,intcs1) //二分查找C成績(jī){inti=1;intflag,flag1;intlow,high,mid,low1,high1,mid1;low=1;low1=1;high=t->length;high1=t->length;flag1=0;flag=0;while(low<=high){ mid=(low+high)/2; if(cs1<t->data[mid].cs) high=mid-1; else { if(cs1>t->data[mid].cs) low=mid+1; else { flag=mid; break; } }}if(flag==0) cout<<"沒(méi)有該成績(jī)的學(xué)生!"<<endl;else{ cout<<"---------該學(xué)生的信息:-----------"<<endl;Display(t,flag);}}voidN_Sort(SNode*t,intn) //直接插入法對(duì)學(xué)生的姓名進(jìn)行排序{ inti; intj; DataTypep; for(i=2;i<=n;i++) { if(t->data[i].name<t->data[i-1].name) { t->data[0].name=t->data[i].name; for(j=i-1;t->data[0].name<t->data[j].name;j--) { p=t->data[j]; t->data[j]=t->data[j+1]; t->data[j+1]=p; } } }}voidC_Sort(SNode*t,intn){ inti,j,k; for(i=1;i<n;i++) { for(k=i,j=i+1;j<=n;j++) if(t->data[j].cs<t->data[k].cs) k=j; if(i!=k) { t->data[0]=t->data[k]; t->data[k]=t->data[i]; t->data[i]=t->data[0]; } }}voidS_Sort(SNode*t,intn) //冒泡法對(duì)數(shù)據(jù)結(jié)構(gòu)排序{ inti,j; intswap; for(i=1;i<n;i++) { swap=0; for(j=1;j<=n-i;j++) if(t->data[j].ss>t->data[j+1].ss) { t->data[0]=t->data[j]; t->data[j]=t->data[j+1]; t->data[j+1]=t->data[0]; swap=1; } if(swap==0) break; }}intmain(){ SNodes; Init(&s); inti; inta[8]={1,2,3,4,5,6,7,8};stringb[8]={"王立","張秋","劉麗","王通","趙陽(yáng)","李艷","錢(qián)娜","孫勝"};intc[8]={03511,03511,03511,03511,03511,03511,03511,03511};intd[8]={85,78,90,75,60,58,95,45};int e[8]={76,88,79,86,71,68,89,60}; Create(&s,a,b,c,d,e,8); stringnames;intscore; cout<<"請(qǐng)輸入您要查找的學(xué)生的姓名:";cin>>names;N_Search(&s,names); cout<<"請(qǐng)輸入您要查找的學(xué)生的姓名:"; cin>>names;N_Search(&s,names); cout<<"--------姓名排序--------"<<endl; cout<<"********排序前的輸出結(jié)果:********"<<endl;for(i=1;i<9;i++) Display(&s,i); N_Sort(&s,8); cout<<"********排序后的輸出結(jié)果:********"<<endl; for(i=1;i<9;i++) Display(&s,i); cout<<"------C++成績(jī)排序--------"<<endl; cout<<"********排序前的輸出結(jié)果:********"<<endl; for(i=1;i<9;i++) Display(&s,i); C_Sort(&s,8); cout<<"********排序后的輸出結(jié)果:********"<<endl; for(i=1;i<9;i++) Display(&s,i); cout<<"---------二分查找法對(duì)C++成績(jī)的查找----------"<<endl; cout<<"請(qǐng)輸入您要查找的學(xué)生的C++成績(jī):";cin>>score; C_Search(&s,score); cout<<"請(qǐng)輸入您要查找的學(xué)生的C++成績(jī):";cin>>score; C_Search(&s,score); cout<<"-------數(shù)據(jù)結(jié)構(gòu)排序-------"<<endl; cout<<"********排序前的輸出結(jié)果:********"<<endl; for(i=1;i<9;i++) Display(&s,i); cout<<"********排序后的輸出結(jié)果:********"<<endl;S_Sort(&s,8); for(i=1;i<9;i++) Display(&s,i);}試驗(yàn)結(jié)果:直接插入法按姓名對(duì)學(xué)生的信息排序:排序前:排序后:直接選擇法對(duì)C++成績(jī)進(jìn)行排序:排序前:排序后:二分法隊(duì)學(xué)生的成績(jī)進(jìn)行查找:冒泡法對(duì)學(xué)生的數(shù)據(jù)結(jié)構(gòu)成績(jī)進(jìn)行排序:排序前:排序后:四、實(shí)驗(yàn)總結(jié)1、關(guān)鍵碼是數(shù)據(jù)元素中某個(gè)數(shù)據(jù)項(xiàng)的值,它

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論