




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、實(shí)驗(yàn)項(xiàng)目名稱: 線性結(jié)構(gòu) 實(shí)驗(yàn)學(xué)時(shí): 8 同組學(xué)生姓名: 孫沛 實(shí)驗(yàn)地點(diǎn): 1314 實(shí)驗(yàn)日期: 2018.10.18 2018.11.8 實(shí)驗(yàn)成績: 批改教師: 批改時(shí)間: 實(shí)驗(yàn)一 線性結(jié)構(gòu)一、實(shí)驗(yàn)?zāi)康暮鸵?、實(shí)驗(yàn)?zāi)康?1) 掌握順序表的定位、插入、刪除等操作。(2) 掌握單鏈表的定位、插入、刪除等操作。(3) 掌握應(yīng)用棧解決問題的方法;掌握利用棧進(jìn)行表達(dá)式求解的算法;掌握隊(duì)列的存儲結(jié)構(gòu)及基本操作實(shí)現(xiàn),并能在相應(yīng)的應(yīng)用問題中正確選用它們。(4) 掌握串的存儲及應(yīng)用。2、實(shí)驗(yàn)要求(1) 注意鏈表的空間是動態(tài)分配的,某結(jié)點(diǎn)不用之后要及時(shí)進(jìn)行物理刪除,以便釋放其內(nèi)存空間。(2) 鏈表不能實(shí)現(xiàn)直接
2、定位,一定注意指針的保存,防止丟失。二、實(shí)驗(yàn)儀器和設(shè)備Visual C+ 6.0三、實(shí)驗(yàn)內(nèi)容與過程(含程序清單及流程圖)(一)順序表1、必做題(1) 編寫程序建立一個(gè)順序表,并逐個(gè)輸出順序表中所有數(shù)據(jù)元素的值。編寫主函數(shù)測試結(jié)果。(2) 編寫順序表定位操作子函數(shù),在順序表中查找是否存在數(shù)據(jù)元素x。如果存在,返回順序表中和x值相等的第1個(gè)數(shù)據(jù)元素的序號(序號從0開始編號);如果不存在,返回1。編寫主函數(shù)測試結(jié)果。(3) 在遞增有序的順序表中插入一個(gè)新結(jié)點(diǎn)x,保持順序表的有序性。解題思路:首先查找插入的位置,再移位,最后進(jìn)行插入操作;從第一個(gè)元素開始找到第一個(gè)大于該新結(jié)點(diǎn)值x的元素位置i即為插入位
3、置;然后將從表尾開始依次將元素后移一個(gè)位置直至元素i;最后將新結(jié)點(diǎn)x插入到i位置。(4) 刪除順序表中所有等于x的數(shù)據(jù)元素。2、選做題:已知兩個(gè)順序表A和B按元素值遞增有序排列,要求寫一算法實(shí)現(xiàn)將A和B歸并成一個(gè)按元素值遞減有序排列的順序表(允許表中含有值相同的元素)。(二)單鏈表1、必做題(1) 編寫程序建立一個(gè)單鏈表,并逐個(gè)輸出單鏈表中所有數(shù)據(jù)元素。(2) 在遞增有序的單鏈表中插入一個(gè)新結(jié)點(diǎn)x,保持單鏈表的有序性。解題思路:首先查找插入的位置然后進(jìn)行插入操作;從第一個(gè)結(jié)點(diǎn)開始找到第一個(gè)大于該新結(jié)點(diǎn)值的結(jié)點(diǎn)即為插入位置;然后在找到的此結(jié)點(diǎn)之前插入新結(jié)點(diǎn);注意保留插入位置之前結(jié)點(diǎn)的指針才能完成
4、插入操作。(3) 編寫實(shí)現(xiàn)帶頭結(jié)點(diǎn)單鏈表就地逆置的子函數(shù),并編寫主函數(shù)測試結(jié)果。2、選做題:已知指針LA和LB分別指向兩個(gè)無頭結(jié)點(diǎn)單鏈表的首元結(jié)點(diǎn)。要求編一算法實(shí)現(xiàn),從表LA中刪除自第i個(gè)元素起共len個(gè)元素后,將它們插入到表LB中第j個(gè)元素之前。(三)棧和隊(duì)列1、必做題(1) 判斷一個(gè)算術(shù)表達(dá)式中開括號和閉括號是否配對。(2) 測試“漢諾塔”問題。(3) 假設(shè)稱正讀和反讀都相同的字符序列為”回文”,試寫一個(gè)算法判別讀入的一個(gè)以為結(jié)束符的字符序列是否是“回文”。2、選做題:在順序存儲結(jié)構(gòu)上實(shí)現(xiàn)輸出受限的雙端循環(huán)隊(duì)列的入列和出列算法。設(shè)每個(gè)元素表示一個(gè)待處理的作業(yè),元素值表示作業(yè)的預(yù)計(jì)時(shí)間。入隊(duì)
5、列采取簡化的短作業(yè)優(yōu)先原則,若一個(gè)新提交的作業(yè)的預(yù)計(jì)執(zhí)行時(shí)間小于隊(duì)頭和隊(duì)尾作業(yè)的平均時(shí)間,則插入在隊(duì)頭,否則插入在隊(duì)尾。(四)串1、必做題(1) 編寫輸出字符串s中值等于字符ch的第一個(gè)字符的函數(shù),并用主函數(shù)測試結(jié)果。(2) 編寫輸出字符串s中值等于字符ch的所有字符的函數(shù),并用主函數(shù)測試結(jié)果。解題思路:可以將第一題程序改進(jìn)成一個(gè)子函數(shù),在本題中循環(huán)調(diào)用。(3) 設(shè)字符串采用單字符的鏈?zhǔn)酱鎯Y(jié)構(gòu),編程刪除串s從位置i開始長度為k的子串。2、選做題:假設(shè)以鏈結(jié)構(gòu)表示串,編寫算法實(shí)現(xiàn)將串S插入到串T中某個(gè)字符之后,若串T中不存在這個(gè)字符,則將串S聯(lián)接在串T的末尾。提示:為提高程序的通用性,插入位置
6、字符應(yīng)設(shè)計(jì)為從鍵盤輸入。程序清單:(一)順序表(1) 編寫程序建立一個(gè)順序表,并逐個(gè)輸出順序表中所有數(shù)據(jù)元素的值。編寫主函數(shù)測試結(jié)果。#includetypedef int datatype;#define maxsize 1024typedef structdatatype datamaxsize;int last;sequenlist;int main()sequenlist L;int i,n;printf(請輸入元素個(gè)數(shù):);scanf(%d,&n);printf(n請輸入元素:);for(i=0;in;i+)scanf(%d,&L.datai);printf( 元素輸出:);for(
7、i=0;in;i+)printf(%dt,L.datai);printf(n);(2) 編寫順序表定位操作子函數(shù),在順序表中查找是否存在數(shù)據(jù)元素x。如果存在,返回順序表中和x值相等的第1個(gè)數(shù)據(jù)元素的序號(序號從0開始編號);如果不存在,返回1。編寫主函數(shù)測試結(jié)果。(2)#includetypedef int datatype;#define maxsize 1024typedef struct datatype datamaxsize;int last;sequenlist; int fun(sequenlist L,int x,int n) int i;for(i=0;in;i+)if(L.
8、datai=x)return i;return -1; int main() sequenlist L; int i,n,y; int x; printf(輸入元素個(gè)數(shù):);scanf(%d,&n);for(i=0;in;i+)scanf(%d,&L.datai);printf(n 輸入查找元素:); scanf(%d,&x);y=fun(L,x,n);if(y=-1)printf(n數(shù)據(jù)元素%d位置為-1 n,x);elseprintf(n 數(shù)據(jù)元素%d位置為%dn,x,y); (3) 在遞增有序的順序表中插入一個(gè)新結(jié)點(diǎn)x,保持順序表的有序性。#include#define maxsize
9、100typedef struct int datamaxsize;int last;sequenlist; main() int i,x,j; sequenlist l=11,12,14,15,16,17,18,6; printf(原數(shù)據(jù)為: ); for(i=0;i=l.last;i+) printf(%2d,l.datai); printf(n插入元素為:); scanf(%d,&x); for(i=1;ix)break; if(il.last) l.datal.last+1=x; else for(j=l.last;j=i-1;j-) l.dataj+1=l.dataj; l.data
10、i-1=x; l.last+; printf(n插入后數(shù)據(jù)為:n); for(j=0;j=l.last;j+) printf(%3d,l.dataj); printf(n); return 0; (4) 刪除順序表中所有等于x的數(shù)據(jù)元素。#include#define maxsize 100typedef struct int datamaxsize;int last;sequenlist;main()int i,j,x=0,k=0;sequenlist L=1,3,5,7,2,4,6,8,2,9,9;printf(n原數(shù)據(jù):);for(i=0;i=L.last;i+)printf(%3d,L
11、.datai);printf(n刪除元素:);scanf(%d,&x);for(i=1;i=L.last+1;i+)if(L.datai-1=x)for(j=i;j=L.last+1;j+)L.dataj-1=L.dataj;L.last-;i-;k=1;if(k=1)printf(刪除后元素為:n);for(j=0;j=L.last;j+)printf(%3d,L.dataj);else printf(Not found!n);printf(n);(二)單鏈表1、必做題(1) 編寫程序建立一個(gè)單鏈表,并逐個(gè)輸出單鏈表中所有數(shù)據(jù)元素。#include#includetypedef int da
12、tattype;typedef struct nodechar data;struct node *next;linklist; main()char ch;linklist *head,*s,*r,*p;head=(linklist*)malloc(sizeof(linklist);r=head;scanf(%c,&ch);while(ch!=$)s=(linklist*)malloc(sizeof(linklist);s-data=ch;r-next=s;r=s;scanf(%c,&ch);r-next=NULL;r=head-next;while(r!=NULL)printf(%c,r-
13、data);r=r-next;(2) 在遞增有序的單鏈表中插入一個(gè)新結(jié)點(diǎn)x,保持單鏈表的有序性。#include#includetypedef int datattype;typedef struct nodeint data;struct node *next;linklist;main()int x,y;linklist *head ,*s,*r,*p,*q,*m,*n;head=(linklist*)malloc(sizeof(linklist);r=head;printf(輸入:);scanf(%d,&x);while(x!=0)s=(linklist*)malloc(sizeof(l
14、inklist);s-data=x;r-next=s;r=s;scanf(%d,&x); r-next=NULL;printf(插入:);scanf(%d,&y);p=head-next;while(p!=NULL)if(p-datanext;else break;q=(linklist*)malloc(sizeof(linklist);q-data=y;m=head;while(m-next!=p)m=m-next;q-next=p;m-next=q; n=head-next;printf(序列為:);while(n!=NULL)printf(%3d,n-data);n=n-next;(3)
15、 編寫實(shí)現(xiàn)帶頭結(jié)點(diǎn)單鏈表就地逆置的子函數(shù),并編寫主函數(shù)測試結(jié)果。#include#includetypedef int datattype;typedef struct nodeint data;struct node *next;linklist;main()int a;linklist *head,*s,*r,*p,*q,*t;head=(linklist*)malloc(sizeof(linklist);r=head;printf(輸入:);scanf(%d,&a);while(a!=0)s=(linklist*)malloc(sizeof(linklist);s-data=a;r-ne
16、xt=s;r=s;scanf(%d,&a);r-next=NULL;printf(n序列為:n);p=head-next;while(p)printf(%d ,p-data);p=p-next;p=head-next;q=p-next;while(q!=NULL)t=q-next;q-next=p;p=q;q=t;head-next-next=NULL;head-next=p;printf(n轉(zhuǎn)換后:n);p=head-next;while(p!=NULL)printf(%d ,p-data);p=p-next;(三)棧和隊(duì)列(1) 判斷一個(gè)算術(shù)表達(dá)式中開括號和閉括號是否配對。#include
17、 #include typedef char datatype;#define maxsize 64typedef struct datatype datamaxsize; int top; seqstack;int match(char exp,int n)char stmaxsize; int top=-1,i=0,tag=1; while(i=0) tag=0; return tag;main()int tag,i; char exp7; for(i=0;i=6;i+) scanf(%c,&expi); tag=match(exp,7); if(tag) printf(算式表達(dá)式中的開括
18、號和閉括號配對。); else printf(算式表達(dá)式中的開括號和閉括號不配對!);getchar();getchar();(2) 測試“漢諾塔”問題。#include void move(char x,char z)printf(%c-,x); printf(%cn,z);void Hanoi(int n,char x, char y,char z) if(n=1) move(x,z); else Hanoi(n-1,x,z,y); move(x,z); Hanoi(n-1,y,x,z); main() int m; printf(請你輸入A上面的碟子總數(shù):); scanf(%d,&m);
19、 Hanoi(m,A,B,C);(3) 假設(shè)稱正讀和反讀都相同的字符序列為”回文”,試寫一個(gè)算法判別讀入的一個(gè)以為結(jié)束符的字符序列是否是“回文”。#include #include #include typedef struct char data10; int top; seqstack;main()int i; char a9,b9; int m=0; seqstack *s; s=(seqstack*)malloc(sizeof(seqstack); s-top=-1; printf(請你輸入8位的字符串:n); for(i=0;itop+; s-datas-top=ai; i+; i=0; while(s-top=0) bi=s-datas-top; s-top-; i+; bi=; for(i=0;i=8;i+) if(ai!=bi) m=1; if(m=0) printf(你所輸入的字符串為回文!); else printf(你所輸入的字符串不是回文!);(四)串1、必做題(1) 編寫輸出字符串s中值等于字符ch的第一個(gè)字符的函數(shù),并用主函數(shù)測試結(jié)果。#include #include int a(char a,char
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度新能源開發(fā)用地承包經(jīng)營合同模板
- 2025年企業(yè)間合資經(jīng)營合同范本
- 如何設(shè)定可達(dá)成的財(cái)務(wù)目標(biāo)計(jì)劃
- 2025年鈷粉系列項(xiàng)目合作計(jì)劃書
- 強(qiáng)化小學(xué)生的公平公正計(jì)劃
- 幼兒園國際交流活動策劃計(jì)劃
- 注重班級文化融合的必要性計(jì)劃
- 圖書目錄員的工作計(jì)劃
- 藝術(shù)教育與演藝技巧社團(tuán)工作計(jì)劃
- 提升工作效率的年度策略探討計(jì)劃
- 綜合實(shí)踐項(xiàng)目 制作細(xì)胞模型 教學(xué)設(shè)計(jì)-2024-2025學(xué)年人教版生物七年級上冊
- 煤礦安全生產(chǎn)知識培訓(xùn)考試題庫(800題)
- 青島版二年級數(shù)學(xué)下冊課程綱要
- 幼兒園2024-2025學(xué)年第二學(xué)期園務(wù)工作計(jì)劃
- 經(jīng)濟(jì)法律法規(guī)基礎(chǔ)知識單選題100道及答案
- 新蘇教版三年級科學(xué)下冊全冊課件【全套】
- 2024-2030年中國精細(xì)化工行業(yè)發(fā)展分析及發(fā)展前景與投資研究報(bào)告
- 2024年北京市中考數(shù)學(xué)試卷(含答案解析)
- 河南省2024年中考英語真題【附真題答案】
- 2024公路工程施工安全風(fēng)險(xiǎn)辨識與管控實(shí)施指南
- 浙江省嘉興市2023-2024學(xué)年高一上學(xué)期1月期末考試政治試題
評論
0/150
提交評論