第一篇:數(shù)據(jù)結(jié)構(gòu)上機(jī)實(shí)驗(yàn)報(bào)告
實(shí)習(xí)報(bào)告
題 目 : 實(shí)現(xiàn)一個(gè)約瑟夫環(huán)程序
班級(jí):031021姓名:王帥學(xué)號(hào):03102076
一、需求分析
1. 本演示程序中,利用單向循環(huán)鏈表存儲(chǔ)結(jié)構(gòu)存儲(chǔ)約瑟夫環(huán)數(shù)據(jù)(即n個(gè)人的編號(hào)和密碼)。
2. 演示程序以用戶和計(jì)算機(jī)的對(duì)話方式執(zhí)行,即在計(jì)算機(jī)終端上顯示“提示信息”之后,由用戶在鍵盤上輸入演示程序中需要輸入的數(shù)據(jù),運(yùn)算結(jié)果顯示在其后。
3. 程序執(zhí)行的命令包括:
1)構(gòu)造單向循環(huán)鏈表;2)進(jìn)行數(shù)值的輸入,并作判斷分析;3)約瑟夫算法的實(shí)現(xiàn)與結(jié)果輸出;4)結(jié)束。
4. 測(cè)試數(shù)據(jù)
m 的初值為20;n=7,7個(gè)人的密碼依次為:3,1,7,2,4,8,4,(正確的出列順序?yàn)?,1,4,7,2,1,3,5)。
二、概要設(shè)計(jì)
1.單向循環(huán)鏈表的抽象數(shù)據(jù)類型定義為:
ADT List{
數(shù)據(jù)對(duì)象:D={ai | ai?正整數(shù),I=1,2,......,n,n≥0}數(shù)據(jù)關(guān)系:R1={< ai-1,ai > |,ai-1,ai?D,I=1,2,......,n}基本操作:
Init List(&L)
操作結(jié)果:構(gòu)造一個(gè)空的線性表L。
List Insert(&L,i,e)
初始條件:線性表L已存在,1≤i≤List Length(L)+1.操作結(jié)果:在L中第i個(gè)位置之前插入新的數(shù)據(jù)元素e,L長(zhǎng)度加1。List Delete(&L,i,&e)
初始條件:線性表L存在非空,1≤i≤List Length(L).操作結(jié)果:刪除L的第i個(gè)元素,并用e返回其值,L長(zhǎng)度減1。
2. 程序包含四個(gè)模塊:
1)主程序模塊:
void main()
{
初始化;
for(;;)
{}
while(命令=開(kāi)始)
{
接受命令;
處理命令;
}
for(;;)
{ }
}
2)有序表單元模塊——實(shí)現(xiàn)有序表的抽象數(shù)據(jù)類型;
3)節(jié)點(diǎn)結(jié)構(gòu)單元模塊——定義有序表的節(jié)點(diǎn)結(jié)構(gòu);
4)數(shù)據(jù)輸入分析模塊——判斷輸入數(shù)據(jù)正確有效;
各模塊之間的調(diào)用關(guān)系如下:
主程序模塊
↓
有序表結(jié)構(gòu)模塊
↓
節(jié)點(diǎn)結(jié)構(gòu)單元模塊
↓
數(shù)據(jù)輸入分析模塊
三、詳細(xì)設(shè)計(jì)
1、結(jié)點(diǎn)類型,指針類型
TypedefstructLNode{
int code,date;//code 為人所在位置 date為人持有的密碼 struct LNode *next;
};// 結(jié)點(diǎn)類型,指針類型
2、構(gòu)造單向循環(huán)鏈表
struct LNode *p,*head,*q;//定義頭節(jié)點(diǎn),和指針
for(i=2;i<=n;i++)
{
struct LNode *s=(struct LNode *)malloc(sizeof(struct LNode));//分配
新結(jié)點(diǎn)空間
s->code=i;
input(s->date);
p->next=s;
p=p->next;
}
p->next=head;//根據(jù)輸入的人數(shù),進(jìn)行單項(xiàng)循環(huán)鏈表的創(chuàng)建,p指向最后一個(gè)結(jié)點(diǎn),并與頭節(jié)點(diǎn)鏈接,形成單項(xiàng)循環(huán)鏈表
3、約瑟夫環(huán)的程序?qū)崿F(xiàn)部分
while(n!=1)//判斷輸入人數(shù),如為1則直接輸出結(jié)果,不循環(huán)
{
for(i=1,m=m%n;i { p=p->next; } q=p->next;//找到要?jiǎng)h除節(jié)點(diǎn) p->next=q->next;//找到要?jiǎng)h除節(jié)點(diǎn)的后繼,并連接新環(huán)m=q->date;//找到下一個(gè)密碼 printf(“%d”,q->code); free(q);//釋放已刪除節(jié)點(diǎn)空間 n--;//鏈表長(zhǎng)度減一 } printf(“%d”,p->code);//約瑟夫環(huán)的結(jié)果輸出 4、其他函數(shù)代碼 數(shù)值的輸入限制 int input() { int y,k,z=0; char c;//元素類型 char a[4];//數(shù)組初始化 if(!z)//輸入判斷,確定位數(shù)字或控制字符且位置和密碼不為零 { for(y=0;y<4;y++) { c=getch(); if(c>=48&&c<=57)//確定為輸入數(shù)字 {a[y]=c; putch(c); } else { y--; if(c=='r')//確定輸入為控制字符 即回車或者刪除 break; else if(c==8) {a[y]='n'; y--;} continue; } } k=atoi(a);//確定最終輸入數(shù)字的值 printf(“n”); z=k; if(z==0) printf(“ERROR!The number couldn't be 0!n”);// 輸入為零,重新輸入 } return(k);//數(shù)值的返回 5、函數(shù)的調(diào)用關(guān)系圖反映程序?qū)哟谓Y(jié)構(gòu) Main→input 四、調(diào)試分析 1、早期程序只寫了約瑟夫環(huán)的實(shí)現(xiàn)部分,沒(méi)有對(duì)輸入數(shù)據(jù)進(jìn)行篩選,調(diào)試的時(shí)候會(huì)經(jīng)常出錯(cuò)。比如是輸入字母,或者輸入0,大于32767溢出; 2、早期的循環(huán)過(guò)程中沒(méi)有進(jìn)行優(yōu)化,導(dǎo)致循環(huán)次數(shù)過(guò)多,浪費(fèi)時(shí)間; 3、為了輸出時(shí)美觀,分別在input和main函數(shù)主體內(nèi)做了兩次,輸入非零的判斷,浪費(fèi)了資源; 4、算法的時(shí)空分析 為了限制在輸入過(guò)程中不會(huì)上溢,只在輸入中限定為四個(gè)不全為零的數(shù)字,但是做的是do……while循環(huán),復(fù)雜度為o(1); 當(dāng)n大于1時(shí): 在數(shù)據(jù)輸入中,鏈表的創(chuàng)建是for循環(huán),時(shí)間復(fù)雜度為o(n-1) 在約瑟夫環(huán)實(shí)現(xiàn)程序中,為for循環(huán)。時(shí)間復(fù)雜度為o(m%n-1) 當(dāng)n=1時(shí),復(fù)雜度為o(1)。 五、用戶手冊(cè) 用戶根據(jù)提示,先輸入起始密碼m,然后輸入人數(shù)n,再根據(jù)人數(shù),分別輸入每個(gè)人的密碼date,數(shù)值均不能為0,否則會(huì)提示重新輸入,輸入為字母則自動(dòng)丟棄,輸入錯(cuò)誤可用刪除鍵進(jìn)行修改,輸入完成后按回車鍵確定本次輸入完畢(若輸入數(shù)字大于9999,則第五位自動(dòng)轉(zhuǎn)換為下一個(gè)數(shù)字的起始位,依此類推)。 當(dāng)n個(gè)數(shù)字全部輸入完畢,則自動(dòng)顯示結(jié)果,按任意鍵則退出本程序。 六、測(cè)試結(jié)果 第一組:m 的初值為20;n=7,7個(gè)人的密碼依次為:3,1,7,2,4,8,4,出列順序?yàn)?,1,4,7,2,1,3,5。 第二組: m 的初值為30;n=8,7個(gè)人的密碼依次為:5,1,6,9,4,7,2,3,出列順序?yàn)?,5,2,3,7,1,4,8。 第三組 : m 的初值為15;n=6,7個(gè)人的密碼依次為:5,3,4,7,6,9,出列順序?yàn)?,1,2,6,4,5。 七、附錄 源程序頭文件名清單: #include “malloc.h”//內(nèi)存空間分配頭文件 #include “stdio.h”//輸入輸出函數(shù)頭文件 #include “stdlib.h”//input函數(shù)中字符串轉(zhuǎn)短整形函數(shù)的頭文件 #include “conio.h”//最后顯示結(jié)果、清屏函數(shù)頭文件 數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告 課程 數(shù)據(jù)結(jié)構(gòu) _ 院 系 專業(yè)班級(jí) 實(shí)驗(yàn)地點(diǎn) 姓 名 學(xué) 號(hào) 實(shí)驗(yàn)時(shí)間 指導(dǎo)老師 數(shù)據(jù)結(jié)構(gòu)上機(jī)實(shí)驗(yàn)報(bào)告1 一﹑實(shí)驗(yàn)名稱: 實(shí)驗(yàn)一——鏈表 二﹑實(shí)驗(yàn)?zāi)康模?/p> 1.了解線性表的邏輯結(jié)構(gòu)特性; 2.熟悉鏈表的基本運(yùn)算在順序存儲(chǔ)結(jié)構(gòu)上的實(shí)現(xiàn),熟練掌握鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)的描述方法; 3.掌握鏈表的基本操作(建表、插入、刪除等)4.掌握循環(huán)鏈表的概念,加深對(duì)鏈表的本質(zhì)的理解。5.掌握運(yùn)用上機(jī)調(diào)試鏈表的基本方法 三﹑實(shí)驗(yàn)內(nèi)容: (1)(2)(3)(4)創(chuàng)建一個(gè)鏈表 在鏈表中插入元素 在鏈表中刪除一個(gè)元素 銷毀鏈表 四﹑實(shí)驗(yàn)步驟與程序 #include LinkList p,q;L=(LinkList)malloc(sizeof(Lnode));L->next=NULL;q=L; cout<<“請(qǐng)輸入一個(gè)鏈表:”< for(int i=0;i { p=(LinkList)malloc(sizeof(Lnode)); cin>>p->data; p->next=q->next; q->next=p; q=p; } } int PrintLinkList(LinkList &L){//輸出鏈表L的數(shù)據(jù)元素 LinkList p; } void LinkListLengh(LinkList &L){//計(jì)算鏈表L的數(shù)據(jù)元素個(gè)數(shù)。int i=0;p=L->next;if(L->next==NULL){ } cout<<“鏈表的數(shù)據(jù)元素為:”;while(p) { cout< data<<“ ”; p=p->next;} cout<<“鏈表沒(méi)有元素!”< } LinkList p;p=L->next;while(p){ i++; p=p->next; } cout<<“鏈表的數(shù)據(jù)元素個(gè)數(shù)為:”< LinkList p,s;int j=0;p=L; while(p&&j } if(!p||j>i-1){ p=p->next;++j; } } cout<<“插入元素的位置不合理!”;return 0;s=(LinkList)malloc(sizeof(LNode));s->data=x;s->next=p->next;p->next=s;return 1;int DeleteLinkList(LinkList &L,int i){//刪除鏈表L的第I個(gè)數(shù)據(jù)元素。 LinkList p,q;int j=0;p=L;while(p->next&&j } if(!(p->next)||j>i-1){ p=p->next;++j; } } cout<<“刪除元素的位置不合理!”;return 0;q=p->next;p->next=q->next;i=q->data;free(q);return 1;void DestroyLinkList(LinkList &L){//銷毀鏈表L。 LinkList p,q;p=L->next;while(L->next!=NULL){ q=p->next;L->next=q; free(p);} p=q; free(L); cout<<“鏈表已經(jīng)被銷毀!”< LinkList L; int i,j,x;cout<<“第一次數(shù)據(jù)結(jié)構(gòu)上機(jī)實(shí)驗(yàn)—鏈表”< CreatLinkList(L,j); LinkListLengh(L); PrintLinkList(L); cout<<“在第幾個(gè)元素前插入:”;cin>>i;cout<<“輸入插入的元素:”;cin>>x; InsertLinkList(L,i,x); LinkListLengh(L); PrintLinkList(L); cout<<“輸入刪除元素的位置:”;cin>>i; DeleteLinkList(L,i); LinkListLengh(L); PrintLinkList(L); cout<<“銷毀程序后為:”< DestroyLinkList(L);} 五﹑實(shí)驗(yàn)結(jié)果 六﹑實(shí)驗(yàn)心得體會(huì): 鏈表是一種常見(jiàn)的重要的數(shù)據(jù)結(jié)構(gòu)。它是動(dòng)態(tài)地進(jìn)行存儲(chǔ)分配的一種結(jié)構(gòu)。它可以根據(jù)需要開(kāi)辟內(nèi)存單元。鏈表中每一個(gè)元素稱為“結(jié)點(diǎn)”,每個(gè)結(jié)點(diǎn)都應(yīng)包括兩個(gè)部分:一為用戶需要用的實(shí)際數(shù)據(jù),二為下一個(gè)結(jié)點(diǎn)的地址。 實(shí)驗(yàn)的程序設(shè)計(jì)規(guī)劃(實(shí)現(xiàn)的功能、分幾個(gè)模塊、子函數(shù))(1)編寫鏈表創(chuàng)建子函數(shù)void CreatLinkList(L,j)(2)編寫鏈表插入子函數(shù) int InsertLinkList(LinkList &L, int i, int x)(3)鏈表的打印int PrintLinkList(LinkList &L)(4)編寫鏈表刪除子函數(shù) int DeleteLinkList(LinkList &L,int i)(5)編寫鏈表銷毀子函數(shù)void DestroyLinkList(LinkList &L)(6)編寫主函數(shù)Main(),通過(guò)功能菜單調(diào)用子函數(shù)(7)編譯調(diào)試程序 經(jīng)過(guò)多次的調(diào)試,修改,實(shí)驗(yàn)結(jié)果終于正確了,在這個(gè)過(guò)程中,經(jīng)歷了不知道怎么進(jìn)行聲明區(qū)的編寫如包含文件,宏定義,函數(shù)聲明,全局變量聲明,結(jié)構(gòu)體等的定義等的結(jié)合,到學(xué)會(huì)了使用先把程序主要規(guī)劃為四個(gè)部分來(lái)寫就簡(jiǎn)單多了,第一,定義;第二,寫所要調(diào)用的子函數(shù);第三,寫主函數(shù),調(diào)用子函數(shù);第四就是程序的編譯與調(diào)試,修改。數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)需要我們對(duì)每個(gè)程序的算法有深刻的理解,才能應(yīng)用到實(shí)際中去,因此我們需要在做實(shí)驗(yàn)之前要熟悉實(shí)驗(yàn)的內(nèi)容,且先把所要實(shí)驗(yàn)的程序?qū)懗鰜?lái),在實(shí)驗(yàn)中就可以查找錯(cuò)誤并加以改正,這是一個(gè)成長(zhǎng)的過(guò)程。 數(shù)據(jù)結(jié)構(gòu)上機(jī)實(shí)驗(yàn)報(bào)告一﹑實(shí)驗(yàn)名稱: 實(shí)驗(yàn)二—隊(duì)列 二﹑實(shí)驗(yàn)?zāi)康模?1.掌握隊(duì)列這種抽象數(shù)據(jù)類型的特點(diǎn), 掌握棧與隊(duì)列在實(shí)際問(wèn)題中的應(yīng)用和基本編程技巧,并能在相應(yīng)的問(wèn)題中選用它;2.熟練掌握循環(huán)隊(duì)列和鏈隊(duì)列的基本操作實(shí)現(xiàn)算法,特別是隊(duì)滿和隊(duì)空的描述方法; 3.掌握棧與隊(duì)列的數(shù)據(jù)類型描述及特點(diǎn); 4.掌握棧的順序和鏈?zhǔn)酱鎯?chǔ)存表示與基本算法的實(shí)現(xiàn); 5.掌握隊(duì)列的鏈?zhǔn)酱鎯?chǔ)表示與基本操作算法實(shí)現(xiàn);6.按照實(shí)驗(yàn)題目要求,獨(dú)立完成實(shí)際程序的編寫編寫、調(diào)試和運(yùn)行,并通過(guò)用例數(shù)據(jù)的運(yùn)行過(guò)程抓獲相關(guān)屏面驗(yàn)證程序設(shè)計(jì)的正確性; 7.認(rèn)真書寫實(shí)驗(yàn)報(bào)告,并按時(shí)提交。 三﹑實(shí)驗(yàn)內(nèi)容: 對(duì)順序循環(huán)隊(duì)列,常規(guī)的設(shè)計(jì)方法是使用対尾指針和對(duì)頭指針,對(duì)尾指針用于指示當(dāng)前的対尾位置下標(biāo),對(duì)頭指針用于指示當(dāng)前的対頭位置下標(biāo)?,F(xiàn)要求: (1)掌握棧和隊(duì)列的特點(diǎn),即后進(jìn)先出和先進(jìn)先出的原則。(2)設(shè)計(jì)一個(gè)使用對(duì)頭指針和計(jì)數(shù)器的順序循環(huán)隊(duì)列抽象數(shù)據(jù)類型,其中操作包括:初始化,入隊(duì)列,出隊(duì)列,取對(duì)頭元素和判斷隊(duì)列是否為空; (3)編寫主函數(shù)進(jìn)行測(cè)試。 四﹑實(shí)驗(yàn)步驟與程序 #include #define OK 1 #define ERROR 0 #define OVERFLOW 0 typedef struct QNode { int data;struct QNode *next;}QNode,*QueuePtr;typedef struct { QueuePtr front;QueuePtr rear;}LinkQueue;int InitQueue(LinkQueue &Q){ } Q.rear=Q.front=(QueuePtr)malloc(sizeof(QNode));if(!Q.rear)exit(OVERFLOW);Q.front->next=NULL;return OK;void QueueEmpty(LinkQueue Q){ } void EnQueue(LinkQueue &Q,int e){ } int EnnQueue(LinkQueue &Q,int e){ QueuePtr p;p=(QueuePtr)malloc(sizeof(QNode));QueuePtr p;p=(QueuePtr)malloc(sizeof(QNode));if(!p)printf(“error”);if(Q.front==Q.rear)printf(“該鏈隊(duì)為空:”);else printf(“該鏈隊(duì)不為空:”);p->data=e;Q.rear->next=p;Q.rear=p;printf(“元素%d入隊(duì)成功”,e); } if(!p)return ERROR;p->data=e;Q.rear->next=p;Q.rear=p; return OK;void DeQueue(LinkQueue &Q){ } void GetHead(LinkQueue &Q){ QueuePtr p;QueuePtr p;if(Q.front==Q.rear)printf(“該鏈隊(duì)為空”);p=Q.front->next;Q.front->next=p->next;if(Q.rear==p)Q.rear=Q.front;free(p);printf(“隊(duì)首元素刪除成功”); } if(Q.front==Q.rear)printf(“該鏈隊(duì)為空”);p=Q.front->next;printf(“隊(duì)首元素為:%d”,p->data);void OutQueue(LinkQueue &Q){ } void LengthQueue(LinkQueue &Q){ int f=0;QueuePtr p;if(Q.front==Q.rear)QueuePtr p;if(Q.front==Q.rear)printf(“該鏈隊(duì)為空”);p=Q.front->next;while(p!=Q.rear->next){ } printf(“%d%,”,p->data);p=p->next; } printf(“該隊(duì)列的長(zhǎng)度為:%d”,f);else { } p=Q.front->next;while(p!=Q.rear->next){ } printf(“該隊(duì)列的長(zhǎng)度為:%d”,f);p=p->next;f++;void main(){ system(“cls”);int flag=1,i;LinkQueue Q;InitQueue(Q);printf(“************************鏈隊(duì)列功能菜單***********************n”);printf(“1:初始化鏈隊(duì)列,2:判斷鏈隊(duì)列是否為空, 3:進(jìn)入隊(duì)列,4:取出隊(duì)首元素n”);printf(“5:輸出該隊(duì)列的所有元素,6:輸出該隊(duì)列的長(zhǎng)度,7:結(jié)束程序,8:清屏n”); while(flag){ printf(“n請(qǐng)輸入操作符:”);scanf(“%d”,&i);switch(i){ case 1: int e,n,k;printf(“請(qǐng)輸入隊(duì)列的長(zhǎng)度:”);scanf(“%d”,&n);printf(“請(qǐng)輸入隊(duì)列的元素:”);for(e=1;e<=n;e++){ } printf(“初始化鏈隊(duì)成功”);break;scanf(“%d”,&k);EnnQueue(Q,k);case 2: QueueEmpty(Q); break;case 3: int j;printf(“請(qǐng)輸入要進(jìn)入隊(duì)列的元素”);scanf(“%d”,&j);EnQueue(Q,j);break;case 4: GetHead(Q);break;case 5: printf(“該隊(duì)列的元素為:”);OutQueue(Q);break; case 6: LengthQueue(Q);break;case 7: flag=0;break;case 8: system(“cls”);} break; } } 五﹑實(shí)驗(yàn)結(jié)果 六﹑實(shí)驗(yàn)心得體會(huì): 程序主要構(gòu)造了主函數(shù)main()和 InitQueue(),QueueEmpty()EnQueue(),OutQueue()等調(diào)用函數(shù),實(shí)現(xiàn)了隊(duì)列的創(chuàng)立,隊(duì)列是否為空的判斷,入隊(duì)和出隊(duì)等功能。 通過(guò)此次實(shí)驗(yàn),加深了對(duì)隊(duì)列的存儲(chǔ)結(jié)構(gòu)的了解,同時(shí)也對(duì)程序設(shè)計(jì)能力有了提高,加深了對(duì)隊(duì)列先進(jìn)先出性質(zhì)的理解,它允許在表的一端進(jìn)行插入,在另一端刪除元素,這和我們?nèi)粘I钪械呐抨?duì)是一致的,最早進(jìn)入隊(duì)列的元素最早離開(kāi)。我們往往寫不出程序,這其中的原因我覺(jué)得是對(duì)程序的結(jié)構(gòu)不是很了解,對(duì)實(shí)驗(yàn)的內(nèi)容也不熟練的結(jié)果,數(shù)據(jù)結(jié)構(gòu)給我們?cè)S多程序的算法和模型,對(duì)我們寫程序的思維有很大的鍛煉,我們應(yīng)珍惜每次上機(jī)實(shí)驗(yàn)的機(jī)會(huì)去實(shí)踐課堂上所學(xué)的東西并從中發(fā)現(xiàn)問(wèn)題,從而達(dá)到提升寫程序的能力。 數(shù)據(jù)結(jié)構(gòu)上機(jī)實(shí)驗(yàn)報(bào)告一﹑實(shí)驗(yàn)名稱: 實(shí)驗(yàn)三—二叉樹(shù)的遍歷 二﹑實(shí)驗(yàn)?zāi)康模?/p> 1、熟悉二叉樹(shù)的結(jié)構(gòu)特性,了解相應(yīng)的證明方法; 2、掌握二叉樹(shù)的生成,掌握二叉樹(shù)的定義和存儲(chǔ)表示,學(xué)會(huì)建立一棵特定二叉樹(shù)的方法; 3、理解二叉樹(shù)的三種遍歷方法:先序遍歷、中序遍歷和后序遍歷; 4、學(xué)會(huì)編寫實(shí)現(xiàn)樹(shù)的各種操作的算法。 二、實(shí)驗(yàn)內(nèi)容: 1、使用類定義實(shí)現(xiàn)二叉樹(shù),補(bǔ)充完整所缺的函數(shù),并實(shí)現(xiàn)創(chuàng)建和遍歷二叉樹(shù)的基本操作; 2、編程實(shí)現(xiàn)在二叉鏈表這種存儲(chǔ)方式下,實(shí)現(xiàn)二叉的遍歷,可采用遞歸或者非遞歸實(shí)現(xiàn),遍歷算法為在先序、中序和后序遍歷算法。 三、實(shí)驗(yàn)步驟與程序: #include void PreOrder(BiTree T)//先序 { if(T!=NULL){ printf(“%c”,T->data);PreOrder(T->lchild);PreOrder(T->rchild);} } void InOrder(BiTree T)//中序 { if(T!=NULL){ InOrder(T->lchild);printf(“%c”,T->data);InOrder(T->rchild);} } void PostOrder(BiTree T)//后序 { if(T!=NULL){ PostOrder(T->lchild);PostOrder(T->rchild);printf(“%c”,T->data);} } void main()//主函數(shù) { printf(“------------二叉樹(shù)的遍歷-------------n”);printf(“請(qǐng)輸入要遍歷的數(shù):”);BiTree Ta;Ta=CreateBiTree();printf(“先序遍歷:”);printf(“n”);PreOrder(Ta);printf(“n”);printf(“中序遍歷:”);printf(“n”);InOrder(Ta);printf(“n”);printf(“后序遍歷:”);printf(“n”);PostOrder(Ta);} 五﹑實(shí)驗(yàn)結(jié)果 六﹑實(shí)驗(yàn)心得體會(huì): 實(shí)驗(yàn)的程序設(shè)計(jì)規(guī)劃(實(shí)現(xiàn)的功能、分幾個(gè)模塊、子函數(shù))(1)先序遍歷遞歸算法函數(shù):void PreOrder(BiTree T)(2)中序遍歷遞歸算法函數(shù):void InOrder(BiTree T)(3)后續(xù)遍歷遞歸算法函數(shù):void PostOrder(BiTree T)(4)主函數(shù)的實(shí)現(xiàn):void main() 在實(shí)驗(yàn)前我認(rèn)真閱讀關(guān)于二叉樹(shù)的實(shí)現(xiàn)的內(nèi)容,為編程實(shí)現(xiàn)第一步,本次實(shí)驗(yàn)通過(guò)按上述的實(shí)驗(yàn)步驟一步步實(shí)現(xiàn)的,實(shí)驗(yàn)過(guò)程中出現(xiàn)了一些錯(cuò)誤,經(jīng)過(guò)一步步的調(diào)試,修改錯(cuò)誤,得到了二叉樹(shù)的遍歷用遞歸運(yùn)算的方法的程序。通過(guò)這個(gè)實(shí)驗(yàn),我體會(huì)到了理解數(shù)據(jù)結(jié)構(gòu)的重要性,這有真正理解了定義數(shù)據(jù)類型的好處,才能用好這樣一種數(shù)據(jù)結(jié)構(gòu)。二叉樹(shù)的先序,中序與后序的輸出都用了遞歸的算法,而且用起來(lái)不是很復(fù)雜,這使我更進(jìn)一步理解了函數(shù)遞歸調(diào)用并得到靈活運(yùn)用;在實(shí)現(xiàn)算法上,從算法的效率看,遞歸方法書寫形式較為簡(jiǎn)潔,更為直觀,一般具有較好的空間效率。 總之,不管做什么實(shí)驗(yàn),我們?cè)谧鰧?shí)驗(yàn)前都要先預(yù)習(xí),對(duì)所做的實(shí)驗(yàn)有較深的理解,在做實(shí)驗(yàn)的時(shí)候需要很嚴(yán)謹(jǐn),仔細(xì)的查找錯(cuò)誤,從而能在實(shí)驗(yàn)中收獲知識(shí),提升自己。 數(shù)據(jù)結(jié)構(gòu)上機(jī)實(shí)驗(yàn)報(bào)告4 一﹑實(shí)驗(yàn)名稱: 實(shí)驗(yàn)四—查找 二﹑實(shí)驗(yàn)?zāi)康模?/p> 1、熟悉掌握順序表的查找方法; 2、熟練掌握二叉排序樹(shù)的構(gòu)造方法和查找算法 3、掌握描述查找過(guò)程的判定樹(shù)的構(gòu)造方法,以及按照定義計(jì)算各種查找方法在等概率情況下查找成功時(shí)的平均查找長(zhǎng)度; 4、學(xué)會(huì)定義線性表的儲(chǔ)存類型,實(shí)現(xiàn)C++程序的基本結(jié)構(gòu)對(duì)線性表的一些基本操作和具體的函數(shù)定義; 5、掌握順序表的基本操作,實(shí)現(xiàn)順序表的查找的等基本運(yùn)算; 6、掌握對(duì)于多函數(shù)程序的輸入,編輯,調(diào)試和運(yùn)算過(guò)程。 二、實(shí)驗(yàn)內(nèi)容: 1、實(shí)現(xiàn)順序表的查找算法 2、關(guān)于衡量查找的主要操作—查找的查找平均效率的平均長(zhǎng)度的討論。 三、實(shí)驗(yàn)步驟與程序: #include element list[MAX_SIZE]; int seqsearch(element list[],int searchnum,int num);int main(){ int i,num,searchnum,k; printf(“---------------數(shù)據(jù)結(jié)構(gòu)查找實(shí)驗(yàn)-------------n”);printf(“請(qǐng)輸入數(shù)據(jù)元素的個(gè)數(shù):”);scanf(“%d”,&num);printf(“請(qǐng)輸入數(shù)據(jù)的元素:n”);for(i=0;i printf(“請(qǐng)輸入要查詢的數(shù)據(jù)元素:”);scanf(“%d”,&searchnum);k=seqsearch(list,searchnum,num);if(k!=-1){ printf(“所查詢?cè)氐南聵?biāo)為:”);printf(“%dn”,k);} else printf(“查詢?cè)夭淮嬖?。n”);} return 0;} int seqsearch(element list[],int searchnum,int num){ int j; list[num].key=searchnum; for(j=0;list[j].key!=searchnum;j++);return j 六﹑實(shí)驗(yàn)心得體會(huì): 實(shí)驗(yàn)的程序設(shè)計(jì)規(guī)劃為先寫一個(gè)主函數(shù)int main(),再寫一個(gè)查找的子函數(shù)int seqsearch(element list[],int searchnum,int num),主函數(shù)通過(guò)調(diào)用子函數(shù)的方法實(shí)現(xiàn)程序的設(shè)計(jì)。 所謂“查找”即為在一個(gè)眾多的數(shù)據(jù)元素(或記錄)的查找表中找出某個(gè)“特定的”數(shù)據(jù)元素(或記錄),通過(guò)本次實(shí)驗(yàn),我更進(jìn)一步的了解數(shù)據(jù)結(jié)構(gòu)程序?qū)嶒?yàn)設(shè)計(jì)實(shí)現(xiàn)算法的基本模型,和算法實(shí)現(xiàn)等基本內(nèi)容,學(xué)會(huì)了順序表的查找方法。 數(shù)據(jù)結(jié)構(gòu)上機(jī)實(shí)驗(yàn)報(bào)告5 一﹑實(shí)驗(yàn)名稱: 實(shí)驗(yàn)五—內(nèi)部排序 二﹑實(shí)驗(yàn)?zāi)康模?/p> 1、通過(guò)實(shí)現(xiàn)下述實(shí)驗(yàn)內(nèi)容,學(xué)習(xí)、實(shí)現(xiàn)、對(duì)比各種排序算法,掌握各種排序算法的優(yōu)劣,以及各種算法使用的情況,并加以靈活應(yīng)用。 2、掌握各種排序時(shí)間復(fù)雜度的分析方法。 二、實(shí)驗(yàn)內(nèi)容: 1、插入排序:依次將待排序的序列中的每一個(gè)記錄插入到先前排序好的序列中,直到全部記錄排序完畢。 2、快速排序:首先選擇一個(gè)基準(zhǔn),將記錄分割為兩部分,左支小于或等于基準(zhǔn),右支則大于基準(zhǔn),然后對(duì)兩部分重復(fù)上述過(guò)程,直至整個(gè)序列排序完成。 3、討論各種內(nèi)部排序方法的基本思路,算法特點(diǎn),排序過(guò)程及它們的時(shí)間復(fù)雜度的分析。 三、實(shí)驗(yàn)步驟與程序: #include } int x;void charu();void kuaisu();printf(“----------內(nèi)部排序---------n”);printf(“ 1、插入排序:n”);printf(“ 2、選擇排序:n”);printf(“請(qǐng)根據(jù)序號(hào)選擇:”);scanf(“%d”,&x);if(x==1)charu();else kuaisu();void charu(){ int a[7],j,i,m; printf(“插入排序n”); printf(“請(qǐng)輸入個(gè)您想排序的數(shù)據(jù):n”); for(i=0;i<7;i++)scanf(“%d”,&a[i]); for(j=1;j<7;j++) { m=a[j]; for(i=j-1;i>=0;i--) { if(a[i] break; else a[i+1]=a[i]; } a[i+1]=m; } printf(“排序成功:”); for(i=0;i<7;i++) printf(“ %d”,a[i]); printf(“n”);} quick(int first,int end,int L[]){ int left=first,right=end,key; key=L[first]; while(left { while((left right--; if(left L[left++]=L[right]; while((left left++; if(left L[left]=key; return left; } quick_sort(int L[],int first,int end) { int split; if(end>first) { split=quick(first,end,L); quick_sort(L,first,split-1); quick_sort(L,split+1,end); } } void kuaisu(){ int a[7],i; printf(“快速排序n”); printf(“請(qǐng)輸入個(gè)您想排序的數(shù)據(jù):n”); for(i=0;i<7;i++) scanf(“%d”,&a[i]); quick_sort(a,0,9); printf(“排序成功:”); for(i=0;i<7;i++) printf(“ %d”,a[i]); printf(“n”);} 五﹑實(shí)驗(yàn)結(jié)果: 六﹑實(shí)驗(yàn)心得體會(huì): 排序的功能是將一個(gè)數(shù)據(jù)元素(或記錄)的任意序列,從新排成按關(guān)鍵字有序的序列;直接插入排序的穩(wěn)定性比快速排序高,且算法較簡(jiǎn)單。本次實(shí)驗(yàn)運(yùn)用到的是插入排序和快速排序。 西華大學(xué)數(shù)計(jì)學(xué)院學(xué)生上機(jī)實(shí)踐報(bào)告 西華數(shù)學(xué)與計(jì)算機(jī)學(xué)院上機(jī)實(shí)踐報(bào)告 課程名稱:數(shù)據(jù)結(jié)構(gòu) 指導(dǎo)教師:唐劍梅 上機(jī)實(shí)踐名稱: 上機(jī)實(shí)踐編號(hào):1 年級(jí): 2011 姓名:蔣俊 學(xué) 號(hào) : *** 上機(jī)實(shí)踐成績(jī): 上機(jī)實(shí)踐日期:2012-11-6 上機(jī)實(shí)踐時(shí)間:8:00-9:30 一、實(shí)驗(yàn)?zāi)康?/p> 1.了解線性表的邏輯結(jié)構(gòu)特性,以及這種特性在計(jì)算機(jī)內(nèi)的兩種存儲(chǔ)結(jié)構(gòu)。 2.重點(diǎn)是線性表的基本操作在兩種存儲(chǔ)結(jié)構(gòu)上的實(shí)現(xiàn);其中以鏈表的操作為側(cè)重點(diǎn);并進(jìn)一步學(xué)習(xí)程序設(shè)計(jì)方法。 3.掌握棧這種數(shù)據(jù)結(jié)構(gòu)特性及其主要存儲(chǔ)結(jié)構(gòu),并能在現(xiàn)實(shí)生活中靈活運(yùn)用。 4.掌握隊(duì)列這種數(shù)據(jù)結(jié)構(gòu)特性及其主要存儲(chǔ)結(jié)構(gòu),并能在現(xiàn)實(shí)生活中靈活運(yùn)用。 5.了解和掌握遞歸程序設(shè)計(jì)的基本原理和方法。 6.掌握使用 C++面向?qū)ο蟮某绦蛟O(shè)計(jì)技術(shù)設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)源程序的方法。 二、實(shí)驗(yàn)內(nèi)容 1.熟悉前面的【程序示例2】,按照約瑟夫問(wèn)題的方法2,試著不設(shè)頭結(jié)點(diǎn)改寫原來(lái)的程序,上機(jī)調(diào)試運(yùn)行。 2.用鏈表建立通訊錄。通訊錄內(nèi)容有:姓名、通訊地址、電話號(hào)碼。 要求:(1)通訊錄按姓名項(xiàng)的字母順序排列; (2)能查找通訊錄中某人的信息; [提示] 用鏈表來(lái)存放這個(gè)通訊錄,一個(gè)人的信息作為一個(gè)結(jié)點(diǎn)。成鏈的過(guò)程可以這樣考慮:先把頭結(jié)點(diǎn)后面的 西華大學(xué)數(shù)計(jì)學(xué)院學(xué)生上機(jī)實(shí)踐報(bào)告 char name[20]; // 姓名子域 NodeType *next; // 指針域 };class Jose //類聲明 { private: NodeType *Head; public: Jose(){}; ~Jose(){ }; void creat(); void outs(); };void Jose::creat(){ int i=0, n; NodeType *newp, *pre; cout<<“n 輸入總?cè)藬?shù) n=”;cin>>n; pre=new NodeType; Head=new NodeType; pre->num=1; cout<<“n 編號(hào)”<<1<<“的人 姓名=”; cin>>pre->name; cout<<“n 密碼”<<1<<“的人 密碼=”; cin>>pre->psw; Head=pre; Head->next=Head; for(i=1;i { newp=new NodeType; newp->num=i+1; cout<<“n 編號(hào)”< 姓名=”;cin>>newp->name; cout<<“n 密碼”< 密碼=”; cin>>newp->psw; newp->next=Head; pre->next=newp; pre=newp; } } void Jose::outs() { int m,i; NodeType *q=Head, *p; cout<<“n 輸入m值(m>=2)”;cin>>m; cout<<“n 根據(jù)m值,開(kāi)始報(bào)數(shù)輸出:”< while(q->next!=q) 西華大學(xué)數(shù)計(jì)學(xué)院學(xué)生上機(jī)實(shí)踐報(bào)告 { for(i=1;i cout<<“編號(hào)為:”< cout<<“n 編號(hào)為:”< m=q->psw; p->next=q->next;delete q; q=p->next; } cout<<“編號(hào)為:”< cout<<“n 編號(hào)為:”< delete q;} int main() { Jose h; h.creat(); h.outs(); return 0;} 西華大學(xué)數(shù)計(jì)學(xué)院學(xué)生上機(jī)實(shí)踐報(bào)告 { char Add[20]; char name[20]; char tel[20]; };struct NodeType { ElemType data; NodeType *next;};class Sqlist { private: NodeType *Head; public: Sqlist(); ~Sqlist(); void creat(); void Insert(ElemType x); void Delet(ElemType x); void PrintOut(); };Sqlist::Sqlist(){ Head=new NodeType;Head->next=NULL;strcpy(Head->data.name,“姓名”);strcpy(Head->data.Add,“地址”);strcpy(Head->data.tel,“電話號(hào)碼”);} Sqlist::~Sqlist(){ NodeType *p=Head->next; while(p!=NULL) {Head->next=p->next; delete p; p=Head->next;} } void Sqlist::creat() //初步建立一個(gè)通訊錄 { NodeType*p,*s,*q;ElemType x; 西華大學(xué)數(shù)計(jì)學(xué)院學(xué)生上機(jī)實(shí)踐報(bào)告 int a;q=Head;cout<<“n 輸入姓名:”;cin>>x.name;cout<<“n 輸入通訊地址:”;cin>>x.Add;cout<<“n 輸入電話號(hào)碼:”;cin>>x.tel;p=new NodeType;p->data=x;Head->next=p;p->next=NULL;cout<<“輸入一個(gè)數(shù)。若為-1,結(jié)束輸入:”< while(a!=-1){ cout<<“n 輸入姓名:”;cin>>x.name;cout<<“n 輸入通訊地址:”;cin>>x.Add;cout<<“n 輸入電話號(hào)碼:=”;cin>>x.tel;s=new NodeType;s->data=x;if(strcmp(s->data.name,p->data.name)>0){ p->next=s;s->next=NULL; p=s;} else{ s->next=p;q->next=s;} q=q->next; cout<<“輸入一個(gè)數(shù)。若為-1,結(jié)束輸入:”< 西華大學(xué)數(shù)計(jì)學(xué)院學(xué)生上機(jī)實(shí)踐報(bào)告 s->data=x;q=Head;p=q->next;while(p!=NULL&&strcmp(p->data.name,x.name)<0){q=p;p=p->next;} s->next=p;q->next=s;} void Sqlist::Delet(ElemType x)//刪除 { NodeType *p,*q;q=Head;p=Head->next;while(p!=NULL&&strcmp(p->data.name,x.name)!=0){q=p;p=p->next;} if(p!=NULL){ q->next=p->next;delete p;cout<<“刪除結(jié)點(diǎn)成功”< { NodeType *p;p=Head->next;while(p!=NULL){ cout< data.name<<“ ”;cout< data.tel<<“ ”;cout< data.Add<<“ ”;p=p->next;} cout< Sqlist as; cout<<“n 通訊錄演示”; do{ cout<<“nn”; cout<<“nn 1.初步建立一個(gè)通訊錄(單鏈表) ”; 西華大學(xué)數(shù)計(jì)學(xué)院學(xué)生上機(jī)實(shí)踐報(bào)告 cout<<“nn 2.插入新的電話記錄 ”; cout<<“nn 3.刪除一個(gè)電話記錄”; cout<<“nn 4.結(jié)束程序”; cout<<“n******************************** ”; cout<<“n 請(qǐng)輸入你的選擇(1,2,3,4)”;cin>>k;switch(k){ case 1:{ as.creat();as.PrintOut();}break; case 2:{ cout<<“n 插入的數(shù)據(jù) 姓名”;cin>>e.name; cout<<“n 插入的數(shù)據(jù) 電話號(hào)”;cin>>e.tel; cout<<“n 插入的數(shù)據(jù) 地址”;cin>>e.Add; as.Insert(e);as.PrintOut(); }break; case 3:{ cout<<“n 被刪除的姓名= ”; cin>>e.name; as.Delet(e); as.PrintOut(); }break; default:break; } }while(k>=1&&k<4); cout<<“n 再見(jiàn)!”; return 0;} 西華大學(xué)數(shù)計(jì)學(xué)院學(xué)生上機(jī)實(shí)踐報(bào)告 西華大學(xué)數(shù)計(jì)學(xué)院學(xué)生上機(jī)實(shí)踐報(bào)告 西華大學(xué)數(shù)計(jì)學(xué)院學(xué)生上機(jī)實(shí)踐報(bào)告 const int MAXSIZE=100; // 數(shù)組的容量 class SqStack { private: ElemType elem[MAXSIZE]; int top; public: SqStack(); ~SqStack(){}; void SqStack::push(ElemType e); ElemType SqStack::pop(); void SqStack::PrintOut(); int SqStack::IsEmpty(); void f(ElemType N,ElemType M);};void SqStack::f(ElemType N,ElemType M){ SqStack s; ElemType e;while(N){ s.push(N%M); N=N/M;} while(!s.IsEmpty()){ e=s.pop(); if(e>=10) { e=e%10; switch(e) { case 1:cout<<“b”< case 2:cout<<“c”< case 3:cout<<“d”< case 4:cout<<“e”< case 5:cout<<“f”< default:cout<<“a”< } } else cout< 西華大學(xué)數(shù)計(jì)學(xué)院學(xué)生上機(jī)實(shí)踐報(bào)告 } cout< {cout<<“棧滿溢出”< return; } else{top++; elem[top]=e;} } ElemType SqStack::pop(){ElemType x; if(top==0) { cout<< “ 棧為空,不能出棧操作”< else { x=elem[top]; top--; return x;} } void SqStack::PrintOut() {int k; cout<<“n PrintOut Data:n”; for(k=top;k>=1;k--)cout< cout< else return 0;} void main(){ ElemType a,m;cout<<“請(qǐng)輸入一個(gè)正整數(shù):”< 西華大學(xué)數(shù)計(jì)學(xué)院學(xué)生上機(jī)實(shí)踐報(bào)告 五、總結(jié) 通過(guò)本次實(shí)驗(yàn),我熟悉了鏈表的操作,了解了線性表在現(xiàn)實(shí)生活中的運(yùn)用,認(rèn)識(shí)了順序存儲(chǔ)和鏈?zhǔn)酱鎯?chǔ)這兩種結(jié)構(gòu)。本次上機(jī)實(shí)踐基本完成了實(shí)驗(yàn)內(nèi)容,但完成的不是很好,以后需要更加努力地掌握基本的知識(shí)。實(shí)驗(yàn)內(nèi)容對(duì)于隊(duì)列的運(yùn)用沒(méi)有涉及,希望以后有所涉及。 西華大學(xué)數(shù)計(jì)學(xué)院學(xué)生上機(jī)實(shí)踐報(bào)告 “計(jì)算機(jī)軟件技術(shù)基礎(chǔ)”課程實(shí)驗(yàn)報(bào)告 (六)實(shí)驗(yàn)名稱:數(shù)據(jù)庫(kù)及SQL語(yǔ)言 班級(jí)_______ 姓名__________ 學(xué)號(hào)______實(shí)驗(yàn)日期: 實(shí)驗(yàn)機(jī)時(shí):3 學(xué)時(shí)實(shí)驗(yàn)成績(jī): ----------------- 一.實(shí)驗(yàn)?zāi)康模?/p> 1、學(xué)習(xí)數(shù)據(jù)庫(kù)設(shè)計(jì)的一般過(guò)程及相關(guān)技術(shù); 2、學(xué)習(xí)access數(shù)據(jù)庫(kù)管理系統(tǒng); 3、掌握數(shù)據(jù)庫(kù)的輸入、查詢、更新操作。 二.實(shí)驗(yàn)內(nèi)容: 1、需求陳述:某校圖書館要建立一個(gè)圖書數(shù)據(jù)管理系統(tǒng)。該圖書館的圖書(書名、分類號(hào)、作者、出版社)存放在不同的借閱室(室名),讀者(姓名、系名、類別)在書架上找到所需圖書后,可以到服務(wù)臺(tái)辦理借閱(借閱時(shí)間)。 設(shè)計(jì)要求: ? 分析需求,建立數(shù)據(jù)庫(kù)的概念模型; ? 將概念模型轉(zhuǎn)換為關(guān)系模型(注意:是否需要作規(guī)范化處理); ? 寫出創(chuàng)建基本表的SQL語(yǔ)句; ? 寫出以下查詢要求的SQL語(yǔ)句: (1)所有“高等數(shù)學(xué)習(xí)題集”書的信息; (2)讀者“李林”借了什么書? (3)“社會(huì)學(xué)原理”在哪個(gè)借閱室? 2、在access數(shù)據(jù)庫(kù)管理系統(tǒng)中建立所設(shè)計(jì)的關(guān)系表; 3、向各表中輸入一組實(shí)驗(yàn)數(shù)據(jù)(元組)(注意:關(guān)系完整性); 4、對(duì)數(shù)據(jù)庫(kù)進(jìn)行查詢。 三.實(shí)驗(yàn)結(jié)果: 1、實(shí)體-關(guān)系圖; 2、數(shù)據(jù)庫(kù)表; 3、創(chuàng)建基本表的語(yǔ)句; 4、查詢語(yǔ)句。 實(shí)驗(yàn)報(bào)告要求: 1、報(bào)告要求使用學(xué)校統(tǒng)一要求的實(shí)驗(yàn)報(bào)告紙,書寫整齊,結(jié)構(gòu)清晰。 2、程序設(shè)計(jì)及實(shí)驗(yàn)報(bào)告獨(dú)立。 3、實(shí)驗(yàn)報(bào)告里不需要附全部代碼,如果需要可在算法思路中寫主要代碼。 4、編寫的程序可在上機(jī)課時(shí)讓老師檢查,源代碼在上機(jī)結(jié)束以后上交。 實(shí)驗(yàn)報(bào)告依照下面的模板來(lái)書寫。報(bào)告要簡(jiǎn)潔明了,一個(gè)實(shí)驗(yàn)報(bào)告只有3頁(yè),書寫時(shí)字體大小不要太大,以免寫不下。 實(shí)驗(yàn)報(bào)告內(nèi)容參照如下模板: 【實(shí)驗(yàn)?zāi)康暮鸵蟆?/p> 見(jiàn)實(shí)驗(yàn)任務(wù)書 【實(shí)驗(yàn)題目】 見(jiàn)實(shí)驗(yàn)任務(wù)書 【實(shí)驗(yàn)內(nèi)容】 1.抽象數(shù)據(jù)類型定義 (說(shuō)明你設(shè)計(jì)或使用的數(shù)據(jù)結(jié)構(gòu)所包含的基本操作及功能) 2.存儲(chǔ)結(jié)構(gòu)定義及算法思路 (包括數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)結(jié)構(gòu)定義、數(shù)據(jù)元素的類型定義及主函數(shù)的算法實(shí)現(xiàn)思路) 3.實(shí)驗(yàn)結(jié)果與分析 (包括運(yùn)行結(jié)果截圖、結(jié)果分析等) 4.心得體會(huì) (記錄實(shí)驗(yàn)感受、上機(jī)過(guò)程中遇到的困難及解決辦法、遺留的問(wèn)題、意見(jiàn)和建議等。) 附錄----源程序(可有可無(wú))第二篇:數(shù)據(jù)結(jié)構(gòu)上機(jī)實(shí)驗(yàn)報(bào)告
第三篇:2012《數(shù)據(jù)結(jié)構(gòu)》上機(jī)實(shí)驗(yàn)報(bào)告 鏈表
第四篇:《數(shù)據(jù)結(jié)構(gòu)》上機(jī)作業(yè)——實(shí)驗(yàn)報(bào)告(六)
第五篇:數(shù)據(jù)結(jié)構(gòu)手寫上機(jī)實(shí)驗(yàn)報(bào)告內(nèi)容、格式