九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

歡迎來(lái)到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁(yè) 裝配圖網(wǎng) > 資源分類 > DOC文檔下載  

大數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)資料報(bào)告材料 - 問(wèn)題詳解

  • 資源ID:83622740       資源大小:120KB        全文頁(yè)數(shù):25頁(yè)
  • 資源格式: DOC        下載積分:10積分
快捷下載 游客一鍵下載
會(huì)員登錄下載
微信登錄下載
三方登錄下載: 微信開(kāi)放平臺(tái)登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要10積分
郵箱/手機(jī):
溫馨提示:
用戶名和密碼都是您填寫(xiě)的郵箱或者手機(jī)號(hào),方便查詢和重復(fù)下載(系統(tǒng)自動(dòng)生成)
支付方式: 支付寶    微信支付   
驗(yàn)證碼:   換一換

 
賬號(hào):
密碼:
驗(yàn)證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會(huì)被瀏覽器默認(rèn)打開(kāi),此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁(yè)到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請(qǐng)使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無(wú)水印,預(yù)覽文檔經(jīng)過(guò)壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒(méi)有明確說(shuō)明有答案則都視為沒(méi)有答案,請(qǐng)知曉。

大數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)資料報(bào)告材料 - 問(wèn)題詳解

word數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版) 實(shí)驗(yàn)報(bào)告專業(yè) 班級(jí)學(xué)號(hào) 實(shí)驗(yàn)1實(shí)驗(yàn)題目:?jiǎn)捂湵淼牟迦牒蛣h除實(shí)驗(yàn)?zāi)康模毫私夂驼莆站€性表的邏輯結(jié)構(gòu)和鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),掌握單鏈表的根本算法與相關(guān)的時(shí)間性能分析。實(shí)驗(yàn)要求:建立一個(gè)數(shù)據(jù)域定義為字符串的單鏈表,在鏈表中不允許有重復(fù)的字符串;根據(jù)輸入的字符串,先找到相應(yīng)的結(jié)點(diǎn),后刪除之。實(shí)驗(yàn)主要步驟:1、 分析、理解給出的示例程序。2、 調(diào)試程序,并設(shè)計(jì)輸入數(shù)據(jù)如:bat,cat,eat,fat,hat,jat,lat,mat,#,測(cè)試程序的如下功能:不允許重復(fù)字符串的插入;根據(jù)輸入的字符串,找到相應(yīng)的結(jié)點(diǎn)并刪除。3、 修改程序:(1) 增加插入結(jié)點(diǎn)的功能。(2) 將建立鏈表的方法改為頭插入法。程序代碼:#include"stdio.h"#include"string.h"#include"stdlib.h"#include"ctype.h"typedef struct node /定義結(jié)點(diǎn)char data10; /結(jié)點(diǎn)的數(shù)據(jù)域?yàn)樽址畇truct node *next; /結(jié)點(diǎn)的指針域ListNode;typedef ListNode * LinkList; / 自定義LinkList單鏈表類型LinkList CreatListR1(); /函數(shù),用尾插入法建立帶頭結(jié)點(diǎn)的單鏈表LinkList CreatList(void); /函數(shù),用頭插入法建立帶頭結(jié)點(diǎn)的單鏈表ListNode *LocateNode(); /函數(shù),按值查找結(jié)點(diǎn)void DeleteList(); /函數(shù),刪除指定值的結(jié)點(diǎn)void printlist(); /函數(shù),打印鏈表中的所有值void DeleteAll(); /函數(shù),刪除所有結(jié)點(diǎn),釋放存ListNode * AddNode(); /修改程序:增加節(jié)點(diǎn)。用頭插法,返回頭指針/=主函數(shù)=void main()char ch10,num5;LinkList head;head=CreatList(); /用頭插入法建立單鏈表,返回頭指針printlist(head); /遍歷鏈表輸出其值printf(" Delete node (y/n):"); /輸入"y"或"n"去選擇是否刪除結(jié)點(diǎn)scanf("%s",num);if(strcmp(num,"y")=0 | strcmp(num,"Y")=0)printf("Please input Delete_data:");scanf("%s",ch); /輸入要?jiǎng)h除的字符串DeleteList(head,ch);printlist(head);printf(" Add node ? (y/n):"); /輸入"y"或"n"去選擇是否增加結(jié)點(diǎn)scanf("%s",num);if(strcmp(num,"y")=0 | strcmp(num,"Y")=0)head=AddNode(head);printlist(head);DeleteAll(head); /刪除所有結(jié)點(diǎn),釋放存/=用尾插入法建立帶頭結(jié)點(diǎn)的單鏈表=LinkList CreatListR1(void) char ch10; LinkList head=(LinkList)malloc(sizeof(ListNode); /生成頭結(jié)點(diǎn) ListNode *s,*r,*pp; r=head; r->next=NULL; printf("Input # to end "); /輸入"#"代表輸入完畢 printf("nPlease input Node_data:"); scanf("%s",ch); /輸入各結(jié)點(diǎn)的字符串 while(strcmp(ch,"#")!=0) pp=LocateNode(head,ch); /按值查找結(jié)點(diǎn),返回結(jié)點(diǎn)指針if(pp=NULL) /沒(méi)有重復(fù)的字符串,插入到鏈表中s=(ListNode *)malloc(sizeof(ListNode);strcpy(s->data,ch);r->next=s;r=s;r->next=NULL;printf("Input # to end ");printf("Please input Node_data:");scanf("%s",ch); return head; /返回頭指針/=用頭插入法建立帶頭結(jié)點(diǎn)的單鏈表=LinkList CreatList(void)char ch100;LinkList head,p;head=(LinkList)malloc(sizeof(ListNode); head->next=NULL;while(1)printf("Input # to end "); printf("Please input Node_data:");scanf("%s",ch); if(strcmp(ch,"#") if(LocateNode(head,ch)=NULL) strcpy(head->data,ch);p=(LinkList)malloc(sizeof(ListNode); p->next=head;head=p;else break;return head; /=按值查找結(jié)點(diǎn),找到如此返回該結(jié)點(diǎn)的位置,否如此返回NULL=ListNode *LocateNode(LinkList head, char *key) ListNode *p=head->next; /從開(kāi)始結(jié)點(diǎn)比擬 while(p!=NULL && strcmp(p->data,key)!=0) /直到p為NULL或p->data為key止p=p->next; /掃描下一個(gè)結(jié)點(diǎn) return p; /假設(shè)p=NULL如此查找失敗,否如此p指向找到的值為key的結(jié)點(diǎn)/=修改程序:增加節(jié)點(diǎn)=ListNode * AddNode(LinkList head) char ch10;ListNode *s,*pp; printf("nPlease input a New Node_data:"); scanf("%s",ch); /輸入各結(jié)點(diǎn)的字符串pp=LocateNode(head,ch); /按值查找結(jié)點(diǎn),返回結(jié)點(diǎn)指針printf("ok2n");if(pp=NULL) /沒(méi)有重復(fù)的字符串,插入到鏈表中s=(ListNode *)malloc(sizeof(ListNode);strcpy(s->data,ch);printf("ok3n");s->next=head->next;head->next=s;return head;/=刪除帶頭結(jié)點(diǎn)的單鏈表中的指定結(jié)點(diǎn)=void DeleteList(LinkList head,char *key) ListNode *p,*r,*q=head; p=LocateNode(head,key); /按key值查找結(jié)點(diǎn)的 if(p=NULL ) /假設(shè)沒(méi)有找到結(jié)點(diǎn),退出printf("position error");exit(0); while(q->next!=p) /p為要?jiǎng)h除的結(jié)點(diǎn),q為p的前結(jié)點(diǎn)q=q->next; r=q->next; q->next=r->next; free(r); /釋放結(jié)點(diǎn)/=打印鏈表=void printlist(LinkList head) ListNode *p=head->next; /從開(kāi)始結(jié)點(diǎn)打印 while(p)printf("%s, ",p->data);p=p->next; printf("n");/=刪除所有結(jié)點(diǎn),釋放空間=void DeleteAll(LinkList head) ListNode *p=head,*r; while(p->next)r=p->next;free(p);p=r;free(p);實(shí)驗(yàn)結(jié)果:Input # to end Please input Node_data:batInput # to end Please input Node_data:catInput # to end Please input Node_data:eatInput # to end Please input Node_data:fatInput # to end Please input Node_data:hatInput # to end Please input Node_data:jatInput # to end Please input Node_data:latInput # to end Please input Node_data:matInput # to end Please input Node_data:#mat, lat, jat, hat, fat, eat, cat, bat, Delete node (y/n):yPlease input Delete_data:hatmat, lat, jat, fat, eat, cat, bat, Insert node (y/n):yPlease input Insert_data:putposition :5mat, lat, jat, fat, eat, put, cat, bat,請(qǐng)按任意鍵繼續(xù). . .示意圖:latjathatfateatcatbatmatNULLheadlatjathatfateatcatbatmatheadlatjatfateatputcatbatmatheadNULLNULL心得體會(huì):本次實(shí)驗(yàn)使我們對(duì)鏈表的實(shí)質(zhì)了解更加明確了,對(duì)鏈表的一些根本操作也更加熟練了。另外實(shí)驗(yàn)指導(dǎo)書(shū)上給出的代碼是有一些問(wèn)題的,這使我們認(rèn)識(shí)到實(shí)驗(yàn)過(guò)程中不能想當(dāng)然的直接編譯執(zhí)行,應(yīng)當(dāng)在閱讀并完全理解代碼的根底上再執(zhí)行,這才是實(shí)驗(yàn)的意義所在。實(shí)驗(yàn)2實(shí)驗(yàn)題目:二叉樹(shù)操作設(shè)計(jì)和實(shí)現(xiàn)實(shí)驗(yàn)?zāi)康模赫莆斩鏄?shù)的定義、性質(zhì)與存儲(chǔ)方式,各種遍歷算法。實(shí)驗(yàn)要求:采用二叉樹(shù)鏈表作為存儲(chǔ)結(jié)構(gòu),完成二叉樹(shù)的建立,先序、中序和后序以與按層次遍歷的操作,求所有葉子與結(jié)點(diǎn)總數(shù)的操作。實(shí)驗(yàn)主要步驟:1、 分析、理解程序。2、 調(diào)試程序,設(shè)計(jì)一棵二叉樹(shù),輸入完全二叉樹(shù)的先序序列,用#代表虛結(jié)點(diǎn)空指針,如ABD#CE#F#,建立二叉樹(shù),求出先序、中序和后序以與按層次遍歷序列,求所有葉子與結(jié)點(diǎn)總數(shù)。實(shí)驗(yàn)代碼#include"stdio.h"#include"stdlib.h"#include"string.h"#define Max 20 /結(jié)點(diǎn)的最大個(gè)數(shù)typedef struct node char data; struct node *lchild,*rchild;BinTNode; /自定義二叉樹(shù)的結(jié)點(diǎn)類型typedef BinTNode *BinTree; /定義二叉樹(shù)的指針int NodeNum,leaf; /NodeNum為結(jié)點(diǎn)數(shù),leaf為葉子數(shù)/=基于先序遍歷算法創(chuàng)建二叉樹(shù)=/=要求輸入先序序列,其中參加虛結(jié)點(diǎn)"#"以示空指針的位置=BinTree CreatBinTree(void) BinTree T; char ch; if(ch=getchar()='#')return(NULL); /讀入#,返回空指針 else T= (BinTNode *)malloc(sizeof(BinTNode); /生成結(jié)點(diǎn)T->data=ch;T->lchild=CreatBinTree(); /構(gòu)造左子樹(shù)T->rchild=CreatBinTree(); /構(gòu)造右子樹(shù)return(T); /=NLR 先序遍歷=void Preorder(BinTree T) if(T) printf("%c",T->data); /訪問(wèn)結(jié)點(diǎn)Preorder(T->lchild); /先序遍歷左子樹(shù)Preorder(T->rchild); /先序遍歷右子樹(shù) /=LNR 中序遍歷= void Inorder(BinTree T) if(T) Inorder(T->lchild); /中序遍歷左子樹(shù)printf("%c",T->data); /訪問(wèn)結(jié)點(diǎn)Inorder(T->rchild); /中序遍歷右子樹(shù) /=LRN 后序遍歷=void Postorder(BinTree T) if(T) Postorder(T->lchild); /后序遍歷左子樹(shù)Postorder(T->rchild); /后序遍歷右子樹(shù)printf("%c",T->data); /訪問(wèn)結(jié)點(diǎn) /=采用后序遍歷求二叉樹(shù)的深度、結(jié)點(diǎn)數(shù)與葉子數(shù)的遞歸算法=int TreeDepth(BinTree T) int hl,hr,max; if(T)hl=TreeDepth(T->lchild); /求左深度hr=TreeDepth(T->rchild); /求右深度max=hl>hr? hl:hr; /取左右深度的最大值NodeNum=NodeNum+1; /求結(jié)點(diǎn)數(shù)if(hl=0&&hr=0) leaf=leaf+1; /假設(shè)左右深度為0,即為葉子。return(max+1); else return(0);/=利用"先進(jìn)先出"FIFO隊(duì)列,按層次遍歷二叉樹(shù)=void Levelorder(BinTree T) int front=0,rear=1; BinTNode *cqMax,*p; /定義結(jié)點(diǎn)的指針數(shù)組cq cq1=T; /根入隊(duì) while(front!=rear) front=(front+1)%NodeNum;p=cqfront; /出隊(duì)printf("%c",p->data); /出隊(duì),輸出結(jié)點(diǎn)的值 if(p->lchild!=NULL) rear=(rear+1)%NodeNum; cqrear=p->lchild; /左子樹(shù)入隊(duì)if(p->rchild!=NULL) rear=(rear+1)%NodeNum; cqrear=p->rchild; /右子樹(shù)入隊(duì) /=數(shù)葉子節(jié)點(diǎn)個(gè)數(shù)=int countleaf(BinTree T)int hl,hr; if(T)hl=countleaf(T->lchild);hr=countleaf(T->rchild);if(hl=0&&hr=0) /假設(shè)左右深度為0,即為葉子。return(1);else return hl+hr; else return 0;/=主函數(shù)=void main() BinTree root;char i; int depth; printf("n");printf("Creat Bin_Tree; Input preorder:"); /輸入完全二叉樹(shù)的先序序列, / 用#代表虛結(jié)點(diǎn),如ABD#CE#F# root=CreatBinTree(); /創(chuàng)建二叉樹(shù),返回根結(jié)點(diǎn) do /從菜單中選擇遍歷方式,輸入序號(hào)。printf("t* select *n");printf("t1: Preorder Traversaln"); printf("t2: Iorder Traversaln");printf("t3: Postorder traversaln");printf("t4: PostTreeDepth,Node number,Leaf numbern");printf("t5: Level Depthn"); /按層次遍歷之前,先選擇4,求出該樹(shù)的結(jié)點(diǎn)數(shù)。printf("t0: Exitn");printf("t*n");fflush(stdin);scanf("%c",&i); /輸入菜單序號(hào)0-5switch (i-'0')case 1: printf("Print Bin_tree Preorder: ");Preorder(root); /先序遍歷break;case 2: printf("Print Bin_Tree Inorder: ");Inorder(root); /中序遍歷break;case 3: printf("Print Bin_Tree Postorder: ");Postorder(root); /后序遍歷break;case 4: depth=TreeDepth(root); /求樹(shù)的深度與葉子數(shù)printf("BinTree Depth=%d BinTree Node number=%d",depth,NodeNum);printf(" BinTree Leaf number=%d",countleaf(root);break;case 5: printf("LevePrint Bin_Tree: ");Levelorder(root); /按層次遍歷break;default: exit(1);printf("n"); while(i!=0); 實(shí)驗(yàn)結(jié)果:Creat Bin_Tree; Input preorder:ABD#CE#F# * select * 1: Preorder Traversal 2: Iorder Traversal 3: Postorder traversal 4: PostTreeDepth,Node number,Leaf number 5: Level Depth 0: Exit * 1 Print Bin_tree Preorder: ABDCEF 2 Print Bin_Tree Inorder: DBAECF 3 Print Bin_Tree Postorder: DBEFCA 4 BinTree Depth=3 BinTree Node number=6 BinTree Leaf number=3 5 LevePrint Bin_Tree: ABCDEF 0 Press any key to continue 二叉樹(shù)示意圖ABFEDC心得體會(huì):這次實(shí)驗(yàn)加深了我對(duì)二叉樹(shù)的印象,尤其是對(duì)二叉樹(shù)的各種遍歷操作有了一定的了解。同時(shí)認(rèn)識(shí)到,在設(shè)計(jì)程序時(shí)輔以圖形化的描述是非常有用處的。實(shí)驗(yàn)3實(shí)驗(yàn)題目:圖的遍歷操作實(shí)驗(yàn)?zāi)康模赫莆沼邢驁D和無(wú)向圖的概念;掌握鄰接矩陣和鄰接鏈表建立圖的存儲(chǔ)結(jié)構(gòu);掌握DFS與BFS對(duì)圖的遍歷操作;了解圖結(jié)構(gòu)在人工智能、工程等領(lǐng)域的廣泛應(yīng)用。實(shí)驗(yàn)要求:采用鄰接矩陣和鄰接鏈表作為圖的存儲(chǔ)結(jié)構(gòu),完成有向圖和無(wú)向圖的DFS和BFS操作。實(shí)驗(yàn)主要步驟:設(shè)計(jì)一個(gè)有向圖和一個(gè)無(wú)向圖,任選一種存儲(chǔ)結(jié)構(gòu),完成有向圖和無(wú)向圖的DFS深度優(yōu)先遍歷和BFS廣度優(yōu)先遍歷的操作。1 鄰接矩陣作為存儲(chǔ)結(jié)構(gòu)#include"stdio.h"#include"stdlib.h"#define MaxVertexNum 100 /定義最大頂點(diǎn)數(shù)typedef struct char vexsMaxVertexNum; /頂點(diǎn)表 int edgesMaxVertexNumMaxVertexNum; /鄰接矩陣,可看作邊表 int n,e; /圖中的頂點(diǎn)數(shù)n和邊數(shù)eMGraph; /用鄰接矩陣表示的圖的類型/=建立鄰接矩陣=void CreatMGraph(MGraph *G) int i,j,k; char a; printf("Input VertexNum(n) and EdgesNum(e): "); scanf("%d,%d",&G->n,&G->e); /輸入頂點(diǎn)數(shù)和邊數(shù) scanf("%c",&a); printf("Input Vertex string:"); for(i=0;i<G->n;i+) scanf("%c",&a); G->vexsi=a; /讀入頂點(diǎn)信息,建立頂點(diǎn)表 for(i=0;i<G->n;i+)for(j=0;j<G->n;j+)G->edgesij=0; /初始化鄰接矩陣 printf("Input edges,Creat Adjacency Matrixn"); for(k=0;k<G->e;k+) /讀入e條邊,建立鄰接矩陣 scanf("%d%d",&i,&j); /輸入邊Vi,Vj的頂點(diǎn)序號(hào) G->edgesij=1; G->edgesji=1; /假設(shè)為無(wú)向圖,矩陣為對(duì)稱矩陣;假設(shè)建立有向圖,去掉該條語(yǔ)句 /=定義標(biāo)志向量,為全局變量=typedef enumFALSE,TRUE Boolean;Boolean visitedMaxVertexNum;/=DFS:深度優(yōu)先遍歷的遞歸算法=void DFSM(MGraph *G,int i) /以Vi為出發(fā)點(diǎn)對(duì)鄰接矩陣表示的圖G進(jìn)展DFS搜索,鄰接矩陣是0,1矩陣 int j; printf("%c",G->vexsi); /訪問(wèn)頂點(diǎn)Vi visitedi=TRUE; /置已訪問(wèn)標(biāo)志 for(j=0;j<G->n;j+) /依次搜索Vi的鄰接點(diǎn)if(G->edgesij=1 && ! visitedj) DFSM(G,j); /Vi,VjE,且Vj未訪問(wèn)過(guò),故Vj為新出發(fā)點(diǎn)void DFS(MGraph *G) int i; for(i=0;i<G->n;i+)visitedi=FALSE; /標(biāo)志向量初始化 for(i=0;i<G->n;i+)if(!visitedi) /Vi未訪問(wèn)過(guò) DFSM(G,i); /以Vi為源點(diǎn)開(kāi)始DFS搜索/=BFS:廣度優(yōu)先遍歷=void BFS(MGraph *G,int k) /以Vk為源點(diǎn)對(duì)用鄰接矩陣表示的圖G進(jìn)展廣度優(yōu)先搜索 int i,j,f=0,r=0; int cqMaxVertexNum; /定義隊(duì)列 for(i=0;i<G->n;i+)visitedi=FALSE; /標(biāo)志向量初始化 for(i=0;i<G->n;i+)cqi=-1; /隊(duì)列初始化 printf("%c",G->vexsk); /訪問(wèn)源點(diǎn)Vk visitedk=TRUE; cqr=k; /Vk已訪問(wèn),將其入隊(duì)。注意,實(shí)際上是將其序號(hào)入隊(duì) while(cqf!=-1) /隊(duì)非空如此執(zhí)行 i=cqf; f=f+1; /Vf出隊(duì) for(j=0;j<G->n;j+) /依次Vi的鄰接點(diǎn)Vj if(G->edgesij=1 && !visitedj) /Vj未訪問(wèn) printf("%c",G->vexsj); /訪問(wèn)Vj visitedj=TRUE; r=r+1; cqr=j; /訪問(wèn)過(guò)Vj入隊(duì) /=main=void main() int i; MGraph *G; G=(MGraph *)malloc(sizeof(MGraph); /為圖G申請(qǐng)存空間 CreatMGraph(G); /建立鄰接矩陣 printf("Print Graph DFS: "); DFS(G); /深度優(yōu)先遍歷 printf("n"); printf("Print Graph BFS: "); BFS(G,3); /以序號(hào)為3的頂點(diǎn)開(kāi)始廣度優(yōu)先遍歷 printf("n");2 鄰接鏈表作為存儲(chǔ)結(jié)構(gòu)#include"stdio.h"#include"stdlib.h"#define MaxVertexNum 50 /定義最大頂點(diǎn)數(shù)typedef struct node /邊表結(jié)點(diǎn) int adjvex; /鄰接點(diǎn)域 struct node *next; /鏈域EdgeNode;typedef struct vnode /頂點(diǎn)表結(jié)點(diǎn) char vertex; /頂點(diǎn)域 EdgeNode *firstedge; /邊表頭指針VertexNode;typedef VertexNode AdjListMaxVertexNum; /AdjList是鄰接表類型typedef struct AdjList adjlist; /鄰接表 int n,e; /圖中當(dāng)前頂點(diǎn)數(shù)和邊數(shù) ALGraph; /圖類型/=建立圖的鄰接表=void CreatALGraph(ALGraph *G) int i,j,k; char a; EdgeNode *s; /定義邊表結(jié)點(diǎn) printf("Input VertexNum(n) and EdgesNum(e): "); scanf("%d,%d",&G->n,&G->e); /讀入頂點(diǎn)數(shù)和邊數(shù) scanf("%c",&a); printf("Input Vertex string:"); for(i=0;i<G->n;i+) /建立邊表 scanf("%c",&a);G->adjlisti.vertex=a; /讀入頂點(diǎn)信息G->adjlisti.firstedge=NULL; /邊表置為空表 printf("Input edges,Creat Adjacency Listn"); for(k=0;k<G->e;k+) /建立邊表 scanf("%d%d",&i,&j); /讀入邊Vi,Vj的頂點(diǎn)對(duì)序號(hào)s=(EdgeNode *)malloc(sizeof(EdgeNode); /生成邊表結(jié)點(diǎn)s->adjvex=j; /鄰接點(diǎn)序號(hào)為js->next=G->adjlisti.firstedge;G->adjlisti.firstedge=s; /將新結(jié)點(diǎn)*S插入頂點(diǎn)Vi的邊表頭部s=(EdgeNode *)malloc(sizeof(EdgeNode); s->adjvex=i; /鄰接點(diǎn)序號(hào)為is->next=G->adjlistj.firstedge; G->adjlistj.firstedge=s; /將新結(jié)點(diǎn)*S插入頂點(diǎn)Vj的邊表頭部 /=定義標(biāo)志向量,為全局變量=typedef enumFALSE,TRUE Boolean;Boolean visitedMaxVertexNum;/=DFS:深度優(yōu)先遍歷的遞歸算法=void DFSM(ALGraph *G,int i) /以Vi為出發(fā)點(diǎn)對(duì)鄰接鏈表表示的圖G進(jìn)展DFS搜索 EdgeNode *p; printf("%c",G->adjlisti.vertex); /訪問(wèn)頂點(diǎn)Vi visitedi=TRUE; /標(biāo)記Vi已訪問(wèn) p=G->adjlisti.firstedge; /取Vi邊表的頭指針 while(p) /依次搜索Vi的鄰接點(diǎn)Vj,這里j=p->adjvexif(! visitedp->adjvex) /假設(shè)Vj尚未被訪問(wèn) DFSM(G,p->adjvex); /如此以Vj為出發(fā)點(diǎn)向縱深搜索p=p->next; /找Vi的下一個(gè)鄰接點(diǎn) void DFS(ALGraph *G) int i; for(i=0;i<G->n;i+)visitedi=FALSE; /標(biāo)志向量初始化 for(i=0;i<G->n;i+)if(!visitedi) /Vi未訪問(wèn)過(guò) DFSM(G,i); /以Vi為源點(diǎn)開(kāi)始DFS搜索/=BFS:廣度優(yōu)先遍歷=void BFS(ALGraph *G,int k) /以Vk為源點(diǎn)對(duì)用鄰接鏈表表示的圖G進(jìn)展廣度優(yōu)先搜索 int i,f=0,r=0; EdgeNode *p; int cqMaxVertexNum; /定義FIFO隊(duì)列 for(i=0;i<G->n;i+)visitedi=FALSE; /標(biāo)志向量初始化 for(i=0;i<=G->n;i+)cqi=-1; /初始化標(biāo)志向量 printf("%c",G->adjlistk.vertex); /訪問(wèn)源點(diǎn)Vk visitedk=TRUE; cqr=k; /Vk已訪問(wèn),將其入隊(duì)。注意,實(shí)際上是將其序號(hào)入隊(duì) while(cqf!=-1) 隊(duì)列非空如此執(zhí)行i=cqf; f=f+1; /Vi出隊(duì)p=G->adjlisti.firstedge; /取Vi的邊表頭指針while(p) /依次搜索Vi的鄰接點(diǎn)Vj令p->adjvex=j if(!visitedp->adjvex) /假設(shè)Vj未訪問(wèn)過(guò)printf("%c",G->adjlistp->adjvex.vertex); /訪問(wèn)Vjvisitedp->adjvex=TRUE;r=r+1; cqr=p->adjvex; /訪問(wèn)過(guò)的Vj入隊(duì) p=p->next; /找Vi的下一個(gè)鄰接點(diǎn) /endwhile/=主函數(shù)=void main() int i; ALGraph *G; G=(ALGraph *)malloc(sizeof(ALGraph); CreatALGraph(G); printf("Print Graph DFS: "); DFS(G); printf("n"); printf("Print Graph BFS: "); BFS(G,3); printf("n");實(shí)驗(yàn)結(jié)果:1. 鄰接矩陣作為存儲(chǔ)結(jié)構(gòu)執(zhí)行順序:V6V4V5V7V2V3V1V0VoInput VertexNum(n) and EdgesNum(e): 8,9Input Vertex string: 01234567Input edges,Creat Adjacency Matrix0 10 21 31 42 52 63 74 75 6Print Graph DFS: 01374256Print Graph BFS: 317042562. 鄰接鏈表作為存儲(chǔ)結(jié)構(gòu)執(zhí)行順序:Input VertexNum(n) and EdgesNum(e): 8,9Input Vertex string: 01234567V6V4V5V7V2V3V1V0VoInput edges,Creat Adjacency List0 10 21 31 42 52 63 74 75 6Print Graph DFS: 02651473Print Graph BFS: 37140265心得體會(huì):這次實(shí)驗(yàn)較以前的實(shí)驗(yàn)難度加大,必須先理解深度優(yōu)先和廣度優(yōu)先兩種遍歷思路,和數(shù)據(jù)結(jié)構(gòu)中隊(duì)列的根本操作,才能看懂理解代碼。同時(shí)圖這種數(shù)據(jù)結(jié)構(gòu)對(duì)抽象的能力要求非常高,代碼不容易看懂,排錯(cuò)也比擬麻煩,應(yīng)該多加練習(xí),才能掌握。實(shí)驗(yàn)4實(shí)驗(yàn)題目:排序?qū)嶒?yàn)?zāi)康模赫莆崭鞣N排序方法的根本思想、排序過(guò)程、算法實(shí)現(xiàn),能進(jìn)展時(shí)間和空間性能的分析,根據(jù)實(shí)際問(wèn)題的特點(diǎn)和要求選擇適宜的排序方法。實(shí)驗(yàn)要求:實(shí)現(xiàn)直接排序、冒泡、直接選擇、快速、堆、歸并排序算法。比擬各種算法的運(yùn)行速度。實(shí)驗(yàn)主要步驟:實(shí)驗(yàn)代碼#include"stdio.h"#include"stdlib.h"#define Max 100 /假設(shè)文件長(zhǎng)度typedef struct /定義記錄類型 int key; /關(guān)鍵字項(xiàng)RecType;typedef RecType SeqListMax+1; /SeqList為順序表,表中第0個(gè)元素作為哨兵int n; /順序表實(shí)際的長(zhǎng)度/=直接插入排序法=void InsertSort(SeqList R) /對(duì)順序表R中的記錄R1n按遞增序進(jìn)展插入排序 int i,j; for(i=2;i<=n;i+) /依次插入R2,Rn if(Ri.key<Ri-1.key) /假設(shè)Ri.key大于等于有序區(qū)中所有的keys,如此Ri留在原位 R0=Ri;j=i-1; /R0是Ri的副本 do /從右向左在有序區(qū)R1i-1中查找Ri的位置 Rj+1=Rj; /將關(guān)鍵字大于Ri.key的記錄后移 j-; while(R0.key<Rj.key); /當(dāng)Ri.keyRj.key 是終止 Rj+1=R0; /Ri插入到正確的位置上/endif/=冒泡排序= typedef enum FALSE,TRUE Boolean; /FALSE為0,TRUE為1void BubbleSort(SeqList R) /自下向上掃描對(duì)R做冒泡排序 int i,j; Boolean exchange; /交換標(biāo)志for(i=1;i<n;i+) /最多做n-1趟排序exchange=FALSE; /本趟排序開(kāi)始前,交換標(biāo)志應(yīng)為假for(j=n-1;j>=i;j-) /對(duì)當(dāng)前無(wú)序區(qū)Rin 自下向上掃描 if(Rj+1.key<Rj.key) /兩兩比擬,滿足條件交換記錄R0=Rj+1; /R0不是哨兵,僅做暫存單元Rj+1=Rj;Rj=R0;exchange=TRUE; /發(fā)生了交換,故將交換標(biāo)志置為真 if(! exchange) /本趟排序未發(fā)生交換,提前終止算法 return; /endfor為循環(huán)/1.=一次劃分函數(shù)=int Partition(SeqList R,int i,int j) / 對(duì)Rij做一次劃分,并返回基準(zhǔn)記錄的位置 RecType pivot=Ri; /用第一個(gè)記錄作為基準(zhǔn) while(i<j) /從區(qū)間兩端交替向中間掃描,直到i=jwhile(i<j &&Rj.key>=pivot.key) /基準(zhǔn)記錄pivot相當(dāng)與在位置i上 j-; /從右向左掃描,查找第一個(gè)關(guān)鍵字小于pivot.key的記錄Rjif(i<j) /假設(shè)找到的Rj.key < pivot.key,如此Ri+=Rj; /交換Ri和Rj,交換后i指針加1while(i<j &&Ri.key<=pivot.key) /基準(zhǔn)記錄pivot相當(dāng)與在位置j上i+; /從左向右掃描,查找第一個(gè)關(guān)鍵字小于pivot.key的記錄Riif(i<j) /假設(shè)找到的Ri.key > pivot.key,如此Rj-=Ri; /交換Ri和Rj,交換后j指針減1 Ri=pivot; /此時(shí),i=j,基準(zhǔn)記錄已被最后定位 return i; /返回基準(zhǔn)記錄的位置/2.=快速排序=void QuickSort(SeqList R,int low,int high) /Rlow.high快速排序 int pivotpos; /劃分后基準(zhǔn)記錄的位置 if(low<high) /僅當(dāng)區(qū)間長(zhǎng)度大于1時(shí)才排序pivotpos=Partition(R,low,high); /對(duì)Rlow.high做一次劃分,得到基準(zhǔn)記錄的位置QuickSort(R,low,pivotpos-1); /對(duì)左區(qū)間遞歸排序QuickSort(R,pivotpos+1,high); /對(duì)右區(qū)間遞歸排序 /=直接選擇排序=void SelectSort(SeqL

注意事項(xiàng)

本文(大數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)資料報(bào)告材料 - 問(wèn)題詳解)為本站會(huì)員(沈***)主動(dòng)上傳,裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng)(點(diǎn)擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因?yàn)榫W(wǎng)速或其他原因下載失敗請(qǐng)重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!