版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、河南城建學院計算機科學與工程學院數(shù)據(jù)結構實驗報告實驗名稱:_實驗一 線性表操作 成績:_ _專業(yè)班級:_ 信管2班 _ 姓名:_張凱迪_ 學號:_083215217_ 實驗日期 : 2016 年 4 月 27 日一、實驗目的1掌握用C+/C語言調(diào)試程序的基本方法。2掌握線性表的基本運算,如插入、刪除等。二、實驗內(nèi)容線性表在順序、鏈式存儲結構上的插入元素,刪除元素運算。三、實驗要求1用C+/C完成算法設計和程序設計并上機調(diào)試通過。2撰寫實驗報告,提供實驗結果和數(shù)據(jù)。3分
2、析算法,并簡要給出算法設計小結和心得。四、程序?qū)崿F(xiàn)源程序清單五、寫出輸入數(shù)據(jù)及運行結果、算法分析上述程序在Visual C+ 6.0環(huán)境下加以實現(xiàn)。經(jīng)過多次測試,程序運行正確。例如:輸入,運行結果如圖所示,圖中顯示了(一)順序表的基本操作源代碼#include<iostream>using namespace std;#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -2typedef int Status;typedef int ElemType;#define LIST_INIT_S
3、IZE 100#define LISTINCREMENT 10typedef struct /結構體ElemType *elem;int length;int listsize;SqList;SqList Lx;Status InitList_Sq(SqList &L) /分配空間 L.elem=new ElemTypeLIST_INIT_SIZE; if(!L.elem)exit(OVERFLOW); L.length =0; L.listsize=LIST_INIT_SIZE; return OK;Status ListInsert(SqList &L,int i,Elem
4、Type e) /插入新元素 int *q,*p;ElemType *newbase;if(i<1 | i>L.length+1) return ERROR;if(L.length>=L.listsize) newbase=new ElemTypeL.listsize+LISTINCREMENT; if(!newbase) exit(OVERFLOW); L.elem=newbase; L.listsize+=LISTINCREMENT; q=&(L.elemi-1); for (p=&(L.elemL.length-1);p>=q;-p) *(p+1)
5、=*p; *q=e; +L.length; return OK;Status Listlength(SqList L) /長度 int *p=L.elem; /判斷線形表是否存在while(p) return (L.length); Status GetElem(SqList L, int i,ElemType &e) /取元素 if(i<1 | i>L.length)return ERROR;else e=L.elemi-1;return e;void MergeList(SqList La,SqList Lb,SqList &Lc) /合并 ElemType a
6、i,bj;InitList_Sq(Lc);int i=1,j=1,k=0;int La_len,Lb_len;La_len=Listlength(La);Lb_len=Listlength(Lb);while(i<=La_len)&&(j<=Lb_len) GetElem(La,i,ai);GetElem(Lb,j,bj); if(ai<=bj) ListInsert(Lc,+k,ai);+i; else ListInsert(Lc,+k,bj);+j; while(i<=La_len) GetElem(La,i+,ai);ListInsert(Lc,+
7、k,ai);while(j<=Lb_len) GetElem(Lb,j+,bj);ListInsert(Lc,+k,bj);void show(SqList L,int i) /顯示 int j;ElemType k; cout<<"順序表顯示如下:"<<endl; for(j=0;j<i-1;j+) k=L.elemj; cout<<k<<"->" if(j=i-1 && i>0) k=L.elemj; cout<<k; cout<<endl
8、;void create(SqList &L,int n) /輸入元素 int e;for(int i=0;i<n;i+) cin>>e;L.elemi=e;L.length=i+1; Status ListDelete_Sq(SqList &L,int i,ElemType &e) /刪除 ElemType *p, *q;if(i<1 | i>L.length) return ERROR;p=&(L.elemi-1);e=*p;q=L.elem+L.length-1;for(+p;p<=q;+p) *(p-1)=*p;-L.
9、length;return OK;Status Listxiugei(SqList &L,int i,ElemType &e) /修改 if(i<1 | i>L.length)return ERROR; else L.elemi-1=e; return OK; void shuru(SqList &L1) /順序表的創(chuàng)建 int a;InitList_Sq(L1);cout<<"請輸入順序表的長度:"cin>>a;cout<<"請輸入順序表的元素(共"<<a<<
10、;"個)"<<endl; create(L1,a); show(L1,a);void chaxun(SqList &L1) /取第i個位置的元素 int j;ElemType e1;cout<<"請選擇所要取出元素的位置:"cin>>j; while(j<0|j>Listlength(L1) cout<<"輸入有誤,請重新輸入"<<endl;cout<<"請選擇所要取出元素的位置:" cin>>j; GetEle
11、m(L1,j,e1);cout<<"取出的元素為:"<<e1<<endl;void xiugai(SqList &L1) /修改第i個位置的元素 int a;int j; ElemType e1;a=L1.length;cout<<"請選擇所要修改元素的位置:"cin>>j;while(j<0|j>Listlength(L1) cout<<"輸入有誤,請重新輸入"<<endl;cout<<"請選擇所要修改元素的
12、位置:" cin>>j; cout<<"要修改成的元素:"cin>>e1;Listxiugei(L1,j,e1);cout<<"修改后的順序表數(shù)據(jù):"<<endl;show(L1,a);void shanchu(SqList &L1) /刪除順序表里的元素 int a;int j; ElemType e1;a=L1.length;cout<<"請選擇所要刪除元素的位置:"cin>>j;while(j<0|j>Listlen
13、gth(L1) cout<<"輸入有誤,請重新輸入"<<endl;cout<<"請選擇所要刪除元素的位置:" cin>>j; ListDelete_Sq(L1,j,e1);cout<<"修改后的順序表數(shù)據(jù):"<<endl;show(L1,a-1);void charu(SqList &L1) /插入元素到順序表里 int a; int j; ElemType e1;a=L1.length;cout<<"請選擇所要插入元素的位置:&qu
14、ot;cin>>j;while(j<0|j>Listlength(L1) cout<<"輸入有誤,請重新輸入"<<endl;cout<<"請選擇所要插入元素的位置:" cin>>j; cout<<"要插入的元素:"cin>>e1;ListInsert(L1,j,e1);cout<<"修改后的順序表數(shù)據(jù):"<<endl;show(L1,a+1);void hebing(SqList &L3)
15、 /合并兩個順序表 SqList L1,L2; int a,b; InitList_Sq(L1); InitList_Sq(L2); cout<<"請輸入第一個有序表的長度:" cin>>a; cout<<"請輸入第一個有序表的元素(共"<<a<<"個)"<<endl; create(L1,a); show(L1,a); cout<<"請輸入第二個有序表的長度:" cin>>b; cout<<"請輸
16、入第二個有序表的元素(共"<<b<<"個)"<<endl; create(L2,b); show(L2,b); MergeList(L1,L2,L3); cout<<"合并后的有序表如下:" show(L3,a+b);void main() /主菜單 int choice; for(;) cout<<" 順序表的基本操作 "<<endl; cout<<" 1.順序表的創(chuàng)建"<<endl; cout<<
17、;" 2.順序表的顯示"<<endl; cout<<" 3.順序表的長度"<<endl; cout<<" 4.取第i個位置的元素"<<endl; cout<<" 5.修改第i個位置的元素"<<endl; cout<<" 6.插入元素到順序表里"<<endl; cout<<" 7.刪除順序表里的元素"<<endl; cout<<&quo
18、t; 8.合并兩個順序表"<<endl; cout<<" 9.退出系統(tǒng)"<<endl; cout<<"請選擇:" cin>>choice; switch(choice) case 1: shuru(Lx);break; case 2: show(Lx,Lx.length);break; case 3: cout<<"順序表的長度:"<<Listlength(Lx)<<endl;break; case 4: chaxun(Lx);b
19、reak; case 5: xiugai(Lx);break; case 6: charu(Lx);break; case 7: shanchu(Lx);break; case 8: hebing(Lx);break; case 9: cout<<"退出系統(tǒng)!"<<endl;exit(0);break; default : cout<<"輸入有誤,請重新選擇"<<endl;break; 運行結果、順序表得創(chuàng)建顯示如下圖2-1順序表的插入如下2-2順序表的刪除如下2-3(二)鏈式表的基本操作源代碼#inclu
20、de<iostream>using namespace std;#define true 1#define false 0#define ok 1#define error 0#define overflow -2typedef int Status;typedef int ElemType;typedef struct LNode /存儲結構 ElemType data; struct LNode *next;LNode,*LinkList;void CreateList(LinkList &L,int n) /尾插法創(chuàng)建單鏈表 LinkList p; L=new LNo
21、de; L->next=NULL; /建立一個帶頭結點的單鏈表 LinkList q=L; /使q指向表尾 for(int i=1;i<=n;i+) p=new LNode; cin>>p->data; p->next=NULL; q->next=p; q=p; Status GetElem(LinkList L,int i,ElemType &e)/取第i個元素 LinkList p=L->next; int j=1; while(p&&j<i) p=p->next; +j; if(!p|j>i) re
22、turn error; /第i個元素不存在 e=p->data; return ok;Status LinkInsert(LinkList &L,int i,ElemType e) /插入 LinkList p=L; int j=0; while(p&&j<i-1) p=p->next; +j; /尋找第i-1個結點 if(!p|j>i-1) return error; /i小于1或者大于表長加1 LinkList s=new LNode; /生成新結點 s->data=e; s->next=p->next; /插入L中 p-&
23、gt;next=s; return ok; Status ListDelete(LinkList &L,int i,ElemType &e) / 刪除 LinkList p=L; LinkList q; int j=0; while(p->next&&j<i-1) /尋找第i個結點,并令p指向其前驅(qū) p=p->next; +j; if(!(p->next)|j>i-1) return error; /刪除位置不合理 q=p->next; p->next=q->next; /刪除并釋放結點 e=q->data;
24、 delete(q); return ok;void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc) /合并兩個順序鏈表LinkList pa,pc,pb;pa=La->next;pb=Lb->next;Lc=pc=La;while(pa&&pb) if(pa->data<=pb->data) pc->next=pa; pc=pa; pa=pa->next; else pc->next=pb; pc=pb; pb=pb->next; pc->n
25、ext=pa?pa:pb; delete(Lb); void show(LinkList L) /顯示 LinkList p; p=L->next; while(p) cout<<p->data<<"->" p=p->next; cout<<endl;int Length(LinkList L,int i) /表長 i=0; LinkList p=L->next; while(p) +i; p=p->next; return i; void xiugai(LinkList L) /修改 int i,j=
26、1; ElemType k; ElemType e,m; LinkList p=L->next; cout<<"請輸入要修改的元素位置(0<i<length):" cin>>i; GetElem(L,i,e); cout<<"該位置的元素:"<<e<<endl; cout<<"修改后的元素值:" cin>>k; while(p&&j<i) p=p->next; +j; m=p->data; p->
27、;data=k; cout<<"修改后的單鏈表顯示如下:"<<endl; show(L); void hebing() /合并兩個單鏈表 int a,b; LinkList La,Lb,Lc; cout<<"請輸入第一個有序鏈表的長度:"<<endl; cin>>a; cout<<"請輸入第一個有序鏈表的元素共("<<a<<"個):"<<endl; CreateList(La,a); show(La); co
28、ut<<"請輸入第二個有序鏈表的長度:"<<endl; cin>>b; cout<<"請輸入第二個有序鏈表的元素共("<<b<<"個):"<<endl; CreateList(Lb,b); show (Lb); MergeList(La,Lb,Lc); cout<<"合并后的有序鏈表如下:"<<endl; show(Lc);void main() /主函數(shù) int select; int x; ElemTyp
29、e y; LinkList list; for(;) cout<<" 單鏈表的基本操作"<<endl; cout<<" 1.單鏈表的創(chuàng)建"<<endl; cout<<" 2.單鏈表的顯示"<<endl; cout<<" 3.單鏈表的長度"<<endl; cout<<" 4.取第i個位置的元素"<<endl; cout<<" 5.修改第i個位置的元素&quo
30、t;<<endl; cout<<" 6.插入元素到單鏈表里"<<endl; cout<<" 7.刪除單鏈表里的元素"<<endl; cout<<" 8.合并兩個單鏈表"<<endl; cout<<" 9.退出系統(tǒng)"<<endl; cout<<"請選擇:" cin>>select; switch(select) case 1:cout<<"請輸入
31、單鏈表的長度:"<<endl; cin>>x; cout<<"請輸入"<<x<<"個元素"<<endl; CreateList(list,x); break; case 2: cout<<"單鏈表顯示如下:"<<endl; show(list); break; case 3: int s; cout<<"單鏈表的長度為:"<<Length(list,s)<<endl; bre
32、ak; case 4: cout<<"請選擇所要取出元素的位置:" cin>>x; while(x<0|x>Length(list,s) cout<<"輸入有誤,請重新輸入"<<endl; cout<<"請選擇所要取出元素的位置:" cin>>x; GetElem(list,x,y); cout<<"該位置的元素為:"<<y<<endl; break; case 5: xiugai(list); break; case 6: cout<<"請選擇要插入的位置:" cin>>x; while(x<0|x>Length(list,s) cout<<"輸入有誤,請重新輸入"<<endl;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025排污許可證轉讓合同
- 2025拆遷房屋買賣合同范文
- 二零二五版教育培訓機構董事會一致行動人資源共享協(xié)議3篇
- 2025年度綠色大米采購與銷售合作協(xié)議范本4篇
- 二零二五版高端公寓地暖系統(tǒng)安裝及維護合同3篇
- 二零二五情侶戀愛期間生活禮儀與修養(yǎng)協(xié)議2篇
- 2025年度民宿布草租賃與民宿客??蛻魸M意度提升合同4篇
- 2025版信托資金借貸合同爭議解決機構條款3篇
- 2025年城市社區(qū)食堂承包運營管理合同4篇
- 二零二五年度光伏發(fā)電設備供應合同4篇
- 2024公路瀝青路面結構內(nèi)部狀況三維探地雷達快速檢測規(guī)程
- 2024年高考真題-地理(河北卷) 含答案
- 2024光儲充一體化系統(tǒng)解決方案
- 處理后事授權委托書
- 食材配送服務方案投標方案(技術方案)
- 足療店營銷策劃方案
- 封條(標準A4打印封條)
- 2024年北京控股集團有限公司招聘筆試參考題庫含答案解析
- 延遲交稿申請英文
- 運動技能學習與控制課件第十章動作技能的指導與示范
- 石油天然氣建設工程交工技術文件編制規(guī)范(SYT68822023年)交工技術文件表格儀表自動化安裝工程
評論
0/150
提交評論