算法與數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)冊(cè)_第1頁(yè)
算法與數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)冊(cè)_第2頁(yè)
算法與數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)冊(cè)_第3頁(yè)
算法與數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)冊(cè)_第4頁(yè)
算法與數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)冊(cè)_第5頁(yè)
已閱讀5頁(yè),還剩74頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、金陵科技學(xué)院實(shí)驗(yàn)報(bào)告全限科技學(xué)院學(xué)生實(shí)驗(yàn)報(bào)告冊(cè)(理工類(lèi))課程名稱(chēng):算法與數(shù)據(jù)結(jié)構(gòu) 專(zhuān)業(yè)班級(jí): 學(xué)生學(xué)號(hào):學(xué)生姓名:所屬院部: 指導(dǎo)教師: 20 14 20 15學(xué)年第 二 學(xué)期金陵科技學(xué)院教務(wù)處制實(shí)驗(yàn)報(bào)告書(shū)寫(xiě)要求實(shí)驗(yàn)報(bào)告原則上要求學(xué)生手寫(xiě),要求書(shū)寫(xiě)工整。若因課程特點(diǎn)需 打印的,要遵照以下字體、字號(hào)、間距等的具體要求。紙張一律采用 A4的紙張。實(shí)驗(yàn)報(bào)告書(shū)寫(xiě)說(shuō)明實(shí)驗(yàn)報(bào)告中一至四項(xiàng)內(nèi)容為必填項(xiàng), 包括實(shí)驗(yàn)?zāi)康暮鸵?;?shí)驗(yàn) 儀器和設(shè)備;實(shí)驗(yàn)內(nèi)容與過(guò)程;實(shí)驗(yàn)結(jié)果與分析。各院部可根據(jù)學(xué)科 特點(diǎn)和實(shí)驗(yàn)具體要求增加項(xiàng)目。填寫(xiě)注意事項(xiàng)(1)細(xì)致觀察,及時(shí)、準(zhǔn)確、如實(shí)記錄。(2)準(zhǔn)確說(shuō)明,層次清晰。(3)盡量采用

2、專(zhuān)用術(shù)語(yǔ)來(lái)說(shuō)明事物。(4)外文、符號(hào)、公式要準(zhǔn)確,應(yīng)使用統(tǒng)一規(guī)定的名詞和符號(hào)。(5)應(yīng)獨(dú)立完成實(shí)驗(yàn)報(bào)告的書(shū)寫(xiě),嚴(yán)禁抄襲、復(fù)印,一經(jīng)發(fā)現(xiàn), 以零分論處。實(shí)驗(yàn)報(bào)告批改說(shuō)明實(shí)驗(yàn)報(bào)告的批改要及時(shí)、認(rèn)真、仔細(xì),一律用紅色筆批改。實(shí)驗(yàn) 報(bào)告的批改成績(jī)采用百分制,具體評(píng)分標(biāo)準(zhǔn)由各院部自行制定。實(shí)驗(yàn)報(bào)告裝訂要求實(shí)驗(yàn)批改完畢后,任課老師將每門(mén)課程的每個(gè)實(shí)驗(yàn)項(xiàng)目的實(shí)驗(yàn)報(bào) 告以自然班為單位、按學(xué)號(hào)升序排列,裝訂成冊(cè),并附上一份該門(mén)課 程的實(shí)驗(yàn)大綱。實(shí)驗(yàn)項(xiàng)目名稱(chēng):順序表實(shí)驗(yàn)學(xué)時(shí):2同組學(xué)生姓名:實(shí)驗(yàn)地點(diǎn):實(shí)驗(yàn)日期:實(shí)驗(yàn)成績(jī):批改教師:批改時(shí)間:實(shí)驗(yàn)1順序表一、實(shí)驗(yàn)?zāi)康暮鸵笳莆枕樞虮淼亩ㄎ弧⒉迦?、刪除等操作。二、實(shí)驗(yàn)

3、儀器和設(shè)備Turbo C 2.0三、實(shí)驗(yàn)內(nèi)容與過(guò)程(含程序清單及流程圖)1、必做題(1)編寫(xiě)程序建立一個(gè)順序表,并逐個(gè)輸出順序表中所有數(shù)據(jù)元素的值。編寫(xiě)主函數(shù)測(cè)試結(jié)果。(2)編寫(xiě)順序表定位操作子函數(shù),在順序表中查找是否存在數(shù)據(jù)元素x。如果存在,返回順序表中和x值相等的第1個(gè)數(shù)據(jù)元素的序號(hào)(序 號(hào)從0開(kāi)始編號(hào));如果不存在,返回-1。編寫(xiě)主函數(shù)測(cè)試結(jié)果。(3)在遞增有序的順序表中插入一個(gè)新結(jié)點(diǎn)x,保持順序表的有序性。解題思路:首先查找插入的位置,再移位,最后進(jìn)行插入操作;從第 一個(gè)元素開(kāi)始找到第一個(gè)大于該新結(jié)點(diǎn)值 x的元素位置i即為插入位 置;然后將從表尾開(kāi)始依次將元素后移一個(gè)位置直至元素i;最

4、后將新結(jié)點(diǎn)x插入到i位置。(4)刪除順序表中所有等于X的數(shù)據(jù)元素。2、選做題(5)已知兩個(gè)順序表A和B按元素值遞增有序排列,要求寫(xiě)一算法實(shí)現(xiàn) 將A和B歸并成一個(gè)按元素值遞減有序排列的順序表(允許表中含 有值相同的元素)。程序清單:1、(1)#include#include#define maxsize 100typedef int datatype;typedef structdatatype amaxsize;int size;sequence_list;sequence_list mylist;void display(sequence_list slt)int i;if(slt.size

5、=0)printf(n順表表是空的”);elsefor(i=0;isize=0;void main()int i,number;init(&mylist);printf(順序表是空的請(qǐng)建立順序表!);printf(n);printf(請(qǐng)輸入順序表中的元素個(gè)數(shù)!n);scanf(%d,&number);mylist.size=number;for(i=0;inumber;i+)scanf(%d,&mylist.ai);display(mylist);printf(n);(2)#include#include#define maxsize 100typedef int datatype;typed

6、ef structdatatype amaxsize;int size;sequence_list;sequence_list mylist;void display(sequence_list slt)int i;if(slt.size=0)printf(n順表表是空的”);elsefor(i=0;isize=0;int find(sequence_list *slt,int x)int i,a;for(i=0;isize ;i+)if(x=slt-ai)a=i;break;if(i!=slt-size)return a;elsereturn -1;void main()int i,numb

7、er,a,b;init(&mylist);printf(順序表是空的請(qǐng)建立順序表!);printf(n);printf(請(qǐng)輸入順序表中的元素個(gè)數(shù)!n);scanf(%d,&number);mylist.size=number;for(i=0;inumber;i+)scanf(%d,&mylist.ai);display(mylist);printf(n);printf(輸入要查找的數(shù):);scanf(%d,&a);b=find(&mylist,a);if(b!=-1)printf(順序表的下標(biāo)為:dn,b);elseprintf(can not be found!);#include#incl

8、ude#define maxsize 100typedef int datatype;typedef structdatatype amaxsize;int size;sequence_list;sequence_list mylist;void display(sequence_list slt)int i;if(slt.size=0)printf(n順表表是空的);elsefor(i=0;isize=0;void sort(sequence_list *slt)int i,j,temp;/交換法排序for(i=0;isize ;i+)for(j=i+1;jsize;j+)if(slt-ai

9、slt-aj)temp=slt-ai;slt-ai=slt-aj;slt-aj=temp;void append(sequence_list *slt,int x)slt-aslt-size=x;slt-size+;sort(&mylist);void main()int i,number,x;init(&mylist);printf(順序表是空的請(qǐng)建立順序表!);printf(n);printf(請(qǐng)輸入順序表中的元素個(gè)數(shù)!n);scanf(%d,&number);mylist.size=number;for(i=0;inumber;i+)scanf(%d,&mylist.ai);displa

10、y(mylist);sort(&mylist);printf(n);display(mylist);printf(n);printf(輸入要插入的元素:力printf(n);scanf(%d,&x);append(&mylist,x);display(mylist);printf(n);#include#include#define maxsize 100 typedef int datatype;typedef structdatatype amaxsize;int size;sequence_list;sequence_list mylist;void display(sequence_l

11、ist slt)int i;if (slt.size = 0)printf(n順表表是空的);else for (i = 0; isize = 0;void sort(sequence_list *slt)int i, j, temp;/交換法排序for (i = 0; isize; i+)for (j = i + 1; jsize; j+)if (slt-aislt-aj)temp = slt-ai;slt-ai = slt-aj; slt-aj = temp;void del(sequence_list *slt, int x)int mmaxsize;int i, n = 0, j, a

12、 = 0;for (i = 0; isize; i+) if (slt-ai != x)mn+ = slt-ai; else a+;slt-size = slt-size - a;for (i = 0; iai = mi;for (j = slt-size; j size + n; j+) slt-ai = 0;void main()int i, number, x;init(&mylist);printf(順序表是空的請(qǐng)建立順序表!);printf(n);printf(請(qǐng)輸入順序表中的元素個(gè)數(shù)!n);scanf(%d, &number);printf(請(qǐng)建立順序表!n);mylist.siz

13、e = number;for (i = 0; inumber; i+)scanf(%d, &mylist.ai);display(mylist);sort(&mylist);printf(n);display(mylist);printf(n);printf(請(qǐng)輸入要?jiǎng)h除的元素:);scanf(%d, &x);del(&mylist, x);display(mylist);#include#include金陵科技學(xué)院實(shí)驗(yàn)報(bào)告#define maxsize 100typedef int datatype;typedef structdatatype amaxsize;int size;seque

14、nce_list;sequence_list mylistA, mylistB, mylistC;void display(sequence_list slt)int i;if (slt.size = 0)printf(n順表是空的);elsefor (i = 0; isize = 0;void hebing(sequence_list *sltA, sequence_list *sltB, sequence_list *sltC) int i,j=0;for (i = 0; i size; i+)sltC-ai = sltA-ai;for (i = sltA-size; i size + s

15、ltB-size; i+)sltC-ai = sltB-aj+;void sort(sequence_list *slt)int i, j, temp;/交換法排序for (i = 0; isize; i+)for (j = i + 1; jsize; j+)if (slt-aislt-aj)temp = slt-ai;金陵科技學(xué)院實(shí)驗(yàn)報(bào)告slt-ai = slt-aj; slt-aj = temp;void main()int i, numberA,numberB;init(&mylistA);printf(順序表是空的請(qǐng)建立順序表A!);printf(n);printf(請(qǐng)輸入順序表中的元

16、素個(gè)數(shù););scanf(%d, &numberA);mylistA.size = numberA;for (i = 0; inumberA; i+) scanf(%d, &mylistA.ai);display(mylistA);printf(n);sort(&mylistA);display(mylistA);printf(n);printf(順序表是空的請(qǐng)建立順序表B!);printf(n);printf(請(qǐng)輸入順序表中的元素個(gè)數(shù):);scanf(%d, &numberB);mylistB.size = numberB;for (i = 0; inumberB; i+) scanf(%d,

17、 &mylistB.ai);display(mylistB);printf(n);sort(&mylistB);display(mylistB);printf(n);printf(順序表 C);init(&mylistC);mylistC.size = mylistA.size + mylistB.size;hebing(&mylistA, &mylistB, &mylistC);sort(&mylistC);display(mylistC); printf(n);四、實(shí)驗(yàn)結(jié)果與分析(程序運(yùn)行結(jié)果及其分析)1 3 S 7 9the array is: 1 35 ? 9b號(hào)是213 7 9Pre

18、ss any kgy to continue1 3 5 7 9The GfF/y is: 1 3579The added numbei? is : 6 1 3 5 6 7 9Press any key to continue五、實(shí)驗(yàn)體會(huì)(遇到問(wèn)題及解決辦法,編程后的心得體會(huì))通過(guò)該實(shí)驗(yàn),我熟練地掌握了順序表的建立以及順序表中的元素查實(shí)驗(yàn)項(xiàng)目名稱(chēng):?jiǎn)捂湵韺?shí)驗(yàn)學(xué)時(shí):2同組學(xué)生姓名:實(shí)驗(yàn)地點(diǎn):實(shí)驗(yàn)日期:實(shí)驗(yàn)成績(jī):批改教師:批改時(shí)間:實(shí)驗(yàn)2單鏈表一、實(shí)驗(yàn)?zāi)康暮鸵?、實(shí)驗(yàn)?zāi)康恼莆諉捂湵淼亩ㄎ?、插入、刪除等操作。2、實(shí)驗(yàn)要求(1)注意鏈表的空間是動(dòng)態(tài)分配的,某結(jié)點(diǎn)不用之后要及時(shí)進(jìn)行物理刪除, 以便釋放其

19、內(nèi)存空間。(2)鏈表不能實(shí)現(xiàn)直接定位,一定注意指針的保存,防止丟失。二、實(shí)驗(yàn)儀器和設(shè)備Turbo C 2.0三、實(shí)驗(yàn)內(nèi)容與過(guò)程(含程序清單及流程圖)1、必做題(1)編寫(xiě)程序建立一個(gè)單鏈表,并逐個(gè)輸出單鏈表中所有數(shù)據(jù)元素。(2)在遞增有序的單鏈表中插入一個(gè)新結(jié)點(diǎn)x,保持單鏈表的有序性。解題思路:首先查找插入的位置然后進(jìn)行插入操作;從第一個(gè)結(jié)點(diǎn)開(kāi) 始找到第一個(gè)大于該新結(jié)點(diǎn)值的結(jié)點(diǎn)即為插入位置;然后在找到的此 結(jié)點(diǎn)之前插入新結(jié)點(diǎn);注意保留插入位置之前結(jié)點(diǎn)的指針才能完成插 入操作。(3)編寫(xiě)實(shí)現(xiàn)帶頭結(jié)點(diǎn)單鏈表就地逆置的子函數(shù),并編寫(xiě)主函數(shù)測(cè)試結(jié)果。2、選做題已知指針LA和LB分別指向兩個(gè)無(wú)頭結(jié)點(diǎn)單鏈表

20、的首元結(jié)點(diǎn)。要求編一算 法實(shí)現(xiàn),從表LA中刪除自第i個(gè)元素起共len個(gè)元素后,將它們插入到表 LB中第j個(gè)元素之前。程序清單:#include#includetypedef struct nodeint data;struct node *next;*Linklist,Node;Linklist creat(int n) Linklist head,r,p;int x,i;head=(Node*)malloc(sizeof(Node);r=head;printf(輸入數(shù)字:n);for(i=n;i0;i-)scanf(%d,&x);p=(Node*)malloc(sizeof(Node); p

21、-data=x;r-next=p;r=p;r-next=NULL;return head;void output(Linklist head)Linklist p;p=head-next;doprintf(%3d,p-data);p=p-next;while(p);printf(n);void main()Linklist head;int x,n;printf(輸入數(shù)字的個(gè)數(shù)(n):n);scanf(%d,&n);head=creat(n);printf(輸出數(shù)字:n); output(head);(2)#include#includetypedef struct nodeint data;

22、struct node *next;*Linklist,Node;Linklist creat(int n)Linklist head,r,p;int x,i;head=(Node*)malloc(sizeof(Node);r=head;printf(輸入數(shù)字:n);for(i=n;i0;i-)scanf(%d,&x);p=(Node*)malloc(sizeof(Node); p-data=x;r-next=p;r=p;r-next=NULL;return head;void output(Linklist head)Linklist p;p=head-next;doprintf(%3d,p

23、-data);p=p-next;while(p);printf(n); void sort(Linklist head)Linklist p,q,small;int temp;for(p=head-next;p-next!=NULL;p=p-next) small=p;for(q=p-next;q;q=q-next) if(q-datadata)small=q;if(small!=p)temp=p-data;p-data=small-data; small-data=temp;printf(輸出升序排序后的數(shù)字:n);output(head);display(Linklist head)Lin

24、klist p;printf(有序表為:n);for(p=head;p!=NULL;p=p-next) printf(%4d,p-data);insert(Linklist head,int x)Linklist p,s;int t;p=head;while(p-datanext;s=(Linklist)malloc(sizeof(Linklist);s-data=x;s-next=p-next;p-next=s;t=p-data;p-data=s-data;s-data=t;display(head);void main()Linklist head;int x,n;printf(輸入數(shù)字的

25、個(gè)數(shù)(n):n);scanf(%d,&n);head=creat(n);printf(輸出數(shù)字:n);output(head);sort(head);printf(輸入要插入的數(shù)字(x):n);scanf(%d,&x);insert(head,x);#include#includetypedef struct nodeint data;struct node *next;*Linklist,Node;Linklist creat(int n)Linklist head,r,p;int x,i;head=(Node*)malloc(sizeof(Node);r=head;printf(輸入數(shù)字:

26、n);for(i=n;i0;i-)scanf(%d,&x);p=(Node*)malloc(sizeof(Node);p-data=x;r-next=p;r=p;r-next=NULL;return head; void output(Linklist head)Linklist p;p=head-next;doprintf(%3d,p-data);p=p-next;while(p);printf(n); void sort(Linklist head)Linklist p,q,small;int temp;for(p=head-next;p-next!=NULL;p=p-next) smal

27、l=p;for(q=p-next;q;q=q-next) if(q-datadata)small=q;if(small!=p) temp=p-data; p-data=small-data; small-data=temp;printf(輸出升序排序后的數(shù)字:n);output(head); display(Linklist head) Linklist p;printf(有序表為:n);for(p=head;p!=NULL;p=p-next) printf(%4d,p-data); insert(Linklist head,int x)Linklist p,s;int t;p=head;wh

28、ile(p-datanext;s=(Linklist)malloc(sizeof(Linklist);s-data=x;s-next=p-next;p-next=s;t=p-data;p-data=s-data;s-data=t;display(head);void main()Linklist head;int x,n;printf(輸入數(shù)字的個(gè)數(shù)(n):n);scanf(%d,&n);head=creat(n);printf(輸出數(shù)字:n);output(head);sort(head);printf(輸入要插入的數(shù)字(x):n);scanf(%d,&x);insert(head,x);四

29、、實(shí)驗(yàn)結(jié)果與分析(程序運(yùn)行結(jié)果及其分析)五、實(shí)驗(yàn)體會(huì)(遇到問(wèn)題及解決辦法,編程后的心得體會(huì))通過(guò)該實(shí)驗(yàn)我熟練掌握了單鏈表的建立以及單鏈表中元素的插入增加及查找。實(shí)驗(yàn)項(xiàng)目名稱(chēng): 堆棧和隊(duì)列實(shí)驗(yàn)學(xué)時(shí):2同組學(xué)生姓名: 實(shí)驗(yàn)地點(diǎn): 實(shí)驗(yàn)日期: 實(shí)驗(yàn)成績(jī): 批改教師:批改時(shí)間:實(shí)驗(yàn)3堆棧和隊(duì)列、實(shí)驗(yàn)?zāi)康暮鸵?1)掌握應(yīng)用棧解決問(wèn)題的方法。(2)掌握利用棧進(jìn)行表達(dá)式求和的算法。(3)掌握隊(duì)列的存儲(chǔ)結(jié)構(gòu)及基本操作實(shí)現(xiàn),并能在相應(yīng)的應(yīng)用問(wèn)題中正確選 用它們。二、實(shí)驗(yàn)儀器和設(shè)備Turbo C 2.0三、實(shí)驗(yàn)內(nèi)容與過(guò)程(含程序清單及流程圖)1、必做題(1)判斷一個(gè)算術(shù)表達(dá)式中開(kāi)括號(hào)和閉括號(hào)是否配對(duì)。(2)測(cè)試

30、“漢諾塔”問(wèn)題。(3)假設(shè)稱(chēng)正讀和反讀都相同的字符序列為“回文”,試寫(xiě)一個(gè)算法判別讀入的一個(gè)以為結(jié)束符的字符序列是否是“回文”。2、選做題在順序存儲(chǔ)結(jié)構(gòu)上實(shí)現(xiàn)輸出受限的雙端循環(huán)隊(duì)列的入列和出列算法。設(shè)每個(gè) 元素表示一個(gè)待處理的作業(yè),元素值表示作業(yè)的預(yù)計(jì)時(shí)間。入隊(duì)列采取簡(jiǎn)化 的短作業(yè)優(yōu)先原則,若一個(gè)新提交的作業(yè)的預(yù)計(jì)執(zhí)行時(shí)間小于隊(duì)頭和隊(duì)尾作 業(yè)的平均時(shí)間,則插入在隊(duì)頭,否則插入在隊(duì)尾。程序清單:(1)#include #include typedef char datatype;#define maxsize 64typedef struct datatype datamaxsize;int t

31、op;seqstack;int match(char exp,int n)char stmaxsize;/用來(lái)存放掃描表達(dá)式中的括號(hào)int top=-1,i=0,tag=1;while(i=0) tag=0; / return tag; main()int tag,i;char exp7=C+,C2,-,4,);/ printf(請(qǐng)輸入一個(gè)算式表達(dá)式:n);/ for(i=0;i7;i+)/ expi=getchar();tag=match(exp,7);if(tag)printf(算式表達(dá)式中的開(kāi)括號(hào)和閉括號(hào)配對(duì)。);elseprintf(算式表達(dá)式中的開(kāi)括號(hào)和閉括號(hào)不配對(duì)!);getcha

32、r();getchar();#include /第一個(gè)塔為初始塔,中間的塔為借用塔,最后一個(gè)塔為目標(biāo)塔int i = 1;記錄步數(shù)void move(int n, char from, char to) / 將編號(hào)為 n 的盤(pán)子由 from移動(dòng)到toprintf( 第妙:將陽(yáng)盤(pán)子c-%cn”, i+, n, from, to);void hanoi(int n, char from, char denpend_on, char to)/將 n個(gè)盤(pán)子由初始塔移動(dòng)到目標(biāo)塔(利用借用塔)if (n = 1)move(1, from, to);/只有一個(gè)盤(pán)子是直接將初塔上的盤(pán)子移動(dòng)到目的地else先將

33、初始塔的前n-1將剩下的一個(gè)盤(pán)子移動(dòng)最后將借用塔上的hanoi(n - 1, from, to, denpend_on);個(gè)盤(pán)子借助目的塔移動(dòng)到借用塔上move(n, from, to); /到目的塔上hanoi(n - 1, denpend_on, from, to);/n-1個(gè)盤(pán)子移動(dòng)到目的塔上void main()printf(請(qǐng)輸入盤(pán)子的個(gè)數(shù):n);int n;scanf(%d, &n);char x = A, y = B, z = C;printf(盤(pán)子移動(dòng)情況如下:n);hanoi(n, x, y, z);(3)#include #define INIT_SIZE 20#defin

34、e INCR_SIZE 10unsigned int StrLen(char *str)III 求出字符串中含有的字符個(gè)數(shù),不包括結(jié)束標(biāo)志III *這里我沒(méi)有用庫(kù)函數(shù)求長(zhǎng)度我不知道怎么用unsigned int i;for (i = 0; stri+ != 0;);return (i - 1);int IsPalindrome(char * str)int len = StrLen(str);int i = 0;for (; ilen / 2; i+)if (stri != strlen - i - 1) return 0;return 1;void main()char * str = (c

35、har *)malloc(INIT_SIZE * sizeof(char);char ch;int i = 0;/字符串當(dāng)前字符數(shù)int len = INIT_SIZE; 字符串空間大小while (ch = getchar() / 循環(huán)錄入字符串if (ch = ) /如果按回車(chē)鍵,則結(jié)束stri = 0; /字符串結(jié)束標(biāo)志break;if (i C 三2米:將2號(hào)盤(pán)工AB 用步=*1售盤(pán)子CB 第4步門(mén)的號(hào)盤(pán)字AC 氧步蟲(chóng)1導(dǎo)盤(pán)子E A 斐6步:將2號(hào)盤(pán)子BC 親7步號(hào)盤(pán),Hr C 窿曲意鍵繼續(xù)-五、實(shí)驗(yàn)體會(huì)(遇到問(wèn)題及解決辦法,編程后的心得體會(huì))通過(guò)該實(shí)驗(yàn)我熟練掌握了如何通過(guò)堆棧和隊(duì)列來(lái)

36、判斷一個(gè)算術(shù)表達(dá)式中開(kāi)括號(hào)和閉括號(hào)是否配對(duì),測(cè)試“漢諾塔”問(wèn)題以及判斷回文數(shù)。實(shí)驗(yàn)項(xiàng)目名稱(chēng): 里實(shí)驗(yàn)學(xué)時(shí):J2同組學(xué)生姓名: 實(shí)驗(yàn)地點(diǎn): 實(shí)驗(yàn)日期: 實(shí)驗(yàn)成績(jī): 批改教師:批改時(shí)間:實(shí)驗(yàn)4串一、實(shí)驗(yàn)?zāi)康暮鸵笳莆沼玫拇鎯?chǔ)及應(yīng)用二、實(shí)驗(yàn)儀器和設(shè)備Turbo C 2.0三、實(shí)驗(yàn)內(nèi)容與過(guò)程(含程序清單及流程圖)1、必做題(1)編寫(xiě)輸出字符串s中值等于字符ch的第一個(gè)字符的函數(shù),并用主函數(shù) 測(cè)試結(jié)果。(2)編寫(xiě)輸出字符串s中值等于字符ch的所有字符的函數(shù),并用主函數(shù)測(cè) 試結(jié)果。解題思路:可以將第一題程序改進(jìn)成一個(gè)子函數(shù), 在本題中循環(huán)調(diào)用。(3)設(shè)字符串采用單字符的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),編程刪除用s從位置i開(kāi)

37、始長(zhǎng)度為k的子用。2、選做題假設(shè)以鏈結(jié)構(gòu)表示用,編寫(xiě)算法實(shí)現(xiàn)將用S插入到用T中某個(gè)字符之后,若 用T中不存在這個(gè)字符,則將用S聯(lián)接在用T的末尾。提示:為提高程序的通用性,插入位置字符應(yīng)設(shè)計(jì)為從鍵盤(pán)輸入。程序清單:(1)#include void main()char s100,ch,c;int i;printf( 創(chuàng)建字符串!);gets(s);printf(輸入要查找的字符:);scanf(%c,&ch);for(i=0;si!=0;i+);if(ch=si)c=si;if(si)printf(輸出字符:);putchar(c);printf(n);elseprintf(沒(méi)有找到!);(2)

38、#include #include void find(char *s,char ch) int i,j=0;char c;for(i=0;si!=0;i+)if(ch=si)c=si;j+;if(i-1)!=strlen(s)printf(有個(gè)元素,j); printf(n);printf( 輸出字符:); putchar(c);printf(n); elseprintf( 沒(méi)有找到!);void main()char s100,ch;int i;printf( 創(chuàng)建字符串!”);gets(s);printf( 輸入要查找的字符:力scanf(%c,&ch);find(s,ch);(3) #

39、include#includetypedef struct linknode(char data;struct linknode *next;linkstring;linkstring *Creatlink(linkstring *S)(linkstring *p = NULL, *q = NULL;char ch;ch = getchar();while (ch != $)(p = malloc(sizeof(linkstring);p-data = ch;if (S = NULL) S = p, q = p;elseq-next = p, q = p;ch = getchar();if (

40、q-next != NULL) q-next = NULL;return S;假定字符串linkstring *Delete(linkstring *S, int i, int k)足夠長(zhǎng)linkstring *p = S, *q;int m = 2;while (mnext;m+;m = 0;if (i = 1)while (mnext;free(p);p = S;m+;elsewhile (mnext;p-next = q-next;free(q);m+;return S;void Output(linkstring *S)linkstring *p = S;while (p != NUL

41、L)printf(%2c”, p-data);p = p-next;int main()linkstring *S = NULL;int i, k;S = Creatlink(S);Output(S);printf(n);printf(Please enter the location and the length:);scanf(%d%d, &i, &k);S = Delete(S, i, k);getchar();Output(S);printf(n);return 0;四、實(shí)驗(yàn)結(jié)果與分析(程序運(yùn)行結(jié)果及其分析)五、實(shí)驗(yàn)體會(huì)(遇到問(wèn)題及解決辦法,編程后的心得體會(huì))通過(guò)該實(shí)驗(yàn)我熟練掌握了如何

42、建立一個(gè)串, 如何查找串中的元素以及刪除指定的子串實(shí)驗(yàn)項(xiàng)目名稱(chēng):二叉樹(shù)實(shí)驗(yàn)學(xué)時(shí):2同組學(xué)生姓名:實(shí)驗(yàn)地點(diǎn):實(shí)驗(yàn)日期:實(shí)驗(yàn)成績(jī):批改教師:批改時(shí)間:實(shí)驗(yàn)5二叉樹(shù)、實(shí)驗(yàn)?zāi)康暮鸵?1)掌握二叉樹(shù)的生成,以及前、中、后序遍歷算法(2)掌握應(yīng)用二叉樹(shù)遞歸遍歷思想解決問(wèn)題的方法。、實(shí)驗(yàn)儀器和設(shè)備Turbo C 2.0三、實(shí)驗(yàn)內(nèi)容與過(guò)程(含程序清單及流程圖)1、必做題(1)建立一棵二叉樹(shù)。對(duì)此樹(shù)進(jìn)行前序遍歷、中序遍歷及后序遍歷,輸出 遍歷序列。(2)在第一題基礎(chǔ)上,求二叉樹(shù)中葉結(jié)點(diǎn)的個(gè)數(shù)。(3)在第一題基礎(chǔ)上,求二叉樹(shù)中結(jié)點(diǎn)總數(shù)。(4)在第一題基礎(chǔ)上,求二叉樹(shù)的深度。2、選做題已知一棵完全二叉樹(shù)存于順序表

43、 sa中,sa.elem1 sa.last存儲(chǔ)結(jié)點(diǎn)的值。 試編寫(xiě)算法由此順序存儲(chǔ)結(jié)構(gòu)建立該二叉樹(shù)的二叉鏈表。解題思路:根據(jù)完全二叉樹(shù)順序存儲(chǔ)的性質(zhì)來(lái)確定二叉樹(shù)的父子關(guān)系即“還 原” 了二叉樹(shù),之后再按照二叉樹(shù)二叉鏈表的構(gòu)造方法進(jìn)行建立。完全二叉 樹(shù)順序存儲(chǔ)的一個(gè)重要性質(zhì)為,第i個(gè)結(jié)點(diǎn)的左孩子是編號(hào)為2i的結(jié)點(diǎn),第 i個(gè)結(jié)點(diǎn)的右孩子是編號(hào)為2i+1的結(jié)點(diǎn)。程序清單:(1)#include#include#include using namespace std;int TWOCHILD; /int LEAF;/int NODE;/有兩個(gè)孩子的結(jié)點(diǎn)數(shù)葉子數(shù)結(jié)點(diǎn)數(shù)typedef struct bino

44、deint data;struct binode *lchild,*rchild;binode,*bitree;typedef structbitree elem100;int top;stack;bitree creat_bt() 按擴(kuò)展前序建二叉樹(shù)bitree t;int x;scanf(%d,&x);if (x=0) t=NULL;/ 以 0 作為結(jié)束else t=(bitree)malloc(sizeof(binode);t-data=x;printf(請(qǐng)輸入身點(diǎn)的左孩子結(jié)點(diǎn)(若沒(méi)有,請(qǐng)輸入 0),t-data);t-lchild=creat_bt();printf(請(qǐng)輸入身點(diǎn)的右孩子結(jié)點(diǎn)(若沒(méi)有,請(qǐng)輸入 0),t-data);t-rchild=creat_

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論