鄰接矩陣的創(chuàng)建_第1頁
鄰接矩陣的創(chuàng)建_第2頁
鄰接矩陣的創(chuàng)建_第3頁
鄰接矩陣的創(chuàng)建_第4頁
鄰接矩陣的創(chuàng)建_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、鄰接矩陣的創(chuàng)建:#define MAX_VERTEX_NUM 20 /*最多頂點(diǎn)個(gè)數(shù)*/#define INFINITY 32768 /*表示極大值,即*/typedef enumDG, DN, UDG, UDN GraphKind; /*圖的種類:DG表示有向圖, DN表示有向網(wǎng), UDG表示無向圖, UDN表示無向網(wǎng)*/typedef char VertexData; /*假設(shè)頂點(diǎn)數(shù)據(jù)為字符型*/typedef struct ArcNode AdjType adj; /*對(duì)于無權(quán)圖,用1或0表示是否相鄰;對(duì)帶權(quán)圖,則為權(quán)值類型*/OtherInfo* info;ArcNode;typede

2、f structVertexData vexsMAX_VERTEX_NUM; /*頂點(diǎn)向量*/ArcNode arcsMAX_VERTEX_NUMMAX_VERTEX_NUM; /*鄰接矩陣*/int vexnum,arcnum; /*圖的頂點(diǎn)數(shù)和弧數(shù)*/GraphKind kind; /*圖的種類標(biāo)志*/AdjMatrix; /*(Adjacency Matrix Graph)*/求頂點(diǎn)位置函數(shù):int LocateVertex(AdjMatrix *G,VertexData v) int j=Error,k;for(k=0;kvexnum;k+)if(G-vexsk=v) j=k; bre

3、ak; return(j);創(chuàng)建一個(gè)有向網(wǎng):int CreateDN(AdjMatrix *G) int i,j,k,weight; VertexData v1,v2;printf(輸入圖的頂點(diǎn)數(shù)和弧數(shù)n);fflush(stdin); scanf(%d,%d,&G-arcnum,&G-vexnum); /*輸入圖的頂點(diǎn)數(shù)和弧數(shù)*/ for(i=0;ivexnum;i+) /*初始化鄰接矩陣*/for(j=0;jvexnum;j+)G-arcsij.adj=INFINITY; for(i=0;ivexnum;i+) printf(輸入圖的頂點(diǎn)n);fflush(stdin);scanf(%c,

4、&G-vexsi); /* 輸入圖的頂點(diǎn)*/for(k=0;karcsij.adj=weight; /*建立弧*/ return(Ok);void main()AdjMatrix G;CreateDN(&G);最小生成樹的方法:#include #define SIZE 11void main( ) /* 變量聲明及定義 graph數(shù)組存放原始圖,span數(shù)組存放生成樹 vertex代表結(jié)點(diǎn)個(gè)數(shù)(最多10),choose數(shù)組代表結(jié)點(diǎn)的選取與否 */ int graphSIZESIZE, spanSIZESIZE, vertex, i, j; int edge, chooseSIZE, min,

5、 p, q; printf(How many vertex:(=10) ); /* 讀入原始圖 */ scanf(%d, &vertex); for(i=1; i=vertex; i+) choosei=0; /* 初始化,1表示讀過,0表示未讀過 */ for(j=i+1; j=vertex; j+) spanij=0; printf(Input the cost between vertex %d and vertex %d: , i, j); scanf(%d, &graphij); graphji=graphij; /* 對(duì)稱矩陣 */ edge=0; /* 根據(jù)Prim算法來找出最小

6、成本生成樹 */ choose1=1; while(edge vertex) min=999; for(i=1; i=vertex; i+) if(choosei = 0) continue; for(j=1; j=vertex; j+) if(i = j) continue; if(choosej = 1) continue; if(graphij=min & graphij!=0) min=graphij; p=i; q=j; chooseq=1; edge+; spanpq=graphpq; spanqp=graphpq; printf(The minimal cost spanning

7、 tree is as follows:n); /* 輸出結(jié)果 */ for(i=1; i=vertex; i+) for(j=i+1; j=vertex; j+) if(spanij != 0) printf(Between vertex %d and %d cost %dn, i, j, spanij); 冒泡排序法:void Bubble_Sort(int, int *);void ShowData(int, int *);void main( ) int Data7= 6, 32, 31, 5, 3, 7, 8 ; /* 原始數(shù)據(jù) */ /* 第一條數(shù)據(jù)Data0表示數(shù)據(jù)的個(gè)數(shù) */

8、printf(原始六條數(shù)據(jù)為:); ShowData(Data0, Data); /* 把原始數(shù)據(jù)輸出來 */ printf(n); Bubble_Sort(Data0, Data); /* 調(diào)用冒泡排序法,有6條數(shù)據(jù) */void Bubble_Sort(int n, int *Data)/* n條數(shù)據(jù)存儲(chǔ)于Data1.Datan中 */ int i, j, temp; for(i=1; i=n-1; i+) /* 有n條數(shù)據(jù),共需n-1次的掃描 */ for(j=1; j=n-i; j+) /* 由前向后逐一比較相鄰的數(shù)據(jù) */ if (Dataj+1 Dataj) /* 將此相鄰的數(shù)據(jù)交

9、換 */ temp=Dataj; Dataj=Dataj+1; Dataj+1=temp; printf(第%d次Pass,結(jié)果:, i); ShowData(n, Data); /* 把每一次回合排序后的數(shù)據(jù)輸出來 */ 選擇排序法:void ShowData(int n, int *Data) int i; for(i=1; i=n; i+) printf(%3d, Datai); printf(n);void ShowData (int, int *);void Select_Sort(int, int *);void main( ) int Data7= 6, 32, 31, 5, 3

10、, 7, 8 ; /* 原始數(shù)據(jù) */ /* 第一條數(shù)據(jù)Data0表示數(shù)據(jù)的個(gè)數(shù) */ printf(原始六條數(shù)據(jù)為:); ShowData(Data0, Data); /* 把原始數(shù)據(jù)輸出來 */ Select_Sort(Data0, Data); /* 調(diào)用選擇排序法,有6條數(shù)據(jù) */void Select_Sort(int n, int *Data) /* n條數(shù)據(jù)存儲(chǔ)于Data1.Datan中 */ int i, j, k, temp; for(i=1; i=n-1; i+) /* 共掃瞄n-1次 */ k=i; for(j=i+1; j=n; j+) if(Dataj Datak)

11、k=j; /* 查找鍵值最小的數(shù)據(jù) */ if(i != k) /* 使此次掃瞄的最小鍵值數(shù)據(jù)擺在最前面 */ temp=Datai; Datai=Datak; Datak=temp; printf(第%d次Pass,結(jié)果:, i); ShowData(n, Data); /* 把每一次回合排序后的數(shù)據(jù)輸出來 */ void ShowData(int n, int *Data) int i; for(i=1; i=n; i+) printf(%3d, Datai); printf(n);插入排序法:void ShowData(int, int *);void Insertion_Sort(in

12、t, int *);void main( ) int Data7= 6, 32, 31, 5, 3, 7, 8 ; /* 原始數(shù)據(jù) */ /* 第一條數(shù)據(jù)Data0表示數(shù)據(jù)的個(gè)數(shù) */ printf(原始數(shù)據(jù) :); ShowData(Data0, Data); /* 把原始數(shù)據(jù)列印出來 */ Insertion_Sort(Data0, Data);/* 調(diào)用插入排序法,有6條數(shù)據(jù) */void ShowData(int n, int *Data) /* 輸出該數(shù)組的函數(shù) */ int i; for(i=1; i=n; i+) printf(%4d, Datai); printf(n);voi

13、d Insertion_Sort(int n, int *Data) int i, j, k, temp; /* n條數(shù)據(jù)存儲(chǔ)于Data1.Datan中 */ k=0; /* k代表Pass的次數(shù) */ for(i=2; i=1 & tempDataj) /* 由右至左逐一與已排序的數(shù)據(jù)做比較 */ /* 若已排序的數(shù)據(jù)值較大,則此條數(shù)據(jù)向右移動(dòng)一個(gè)位置 */ Dataj+1=Dataj; j-; Dataj+1=temp;printf(第%d次Pass:, +k); ShowData(n, Data); /* 把每一次回合排序后的數(shù)據(jù)輸出來 */ 快速排序法:void quick(int,

14、int *);void q_sort(int *, int, int);void ShowData(int, int *);void main( ) int Data11= 10, 26, 5, 37, 1, 61, 11, 59, 15, 48, 19 ; /* 原始數(shù)據(jù) */ /* 第一條數(shù)據(jù)Data0表示數(shù)據(jù)的個(gè)數(shù) */ printf(原始數(shù)據(jù): ); ShowData(Data0, Data); /* 把原始數(shù)據(jù)輸出來 */ quick(Data0, Data); /* 調(diào)用快速排序法,有10條數(shù)據(jù) */ printf(n); printf(排序結(jié)果: ); ShowData(Data

15、0, Data); /* 把排序后的數(shù)據(jù)輸出來 */void quick(int n, int *data) q_sort(data, 1, n);void q_sort(int *data, int m, int n) int k; /* 分割元素 */ int temp; int i, j; if(m n) /* 是否繼續(xù)分割 */ i=m; /* 分割的最左 */ j=n+1; /* 分割的最右 */ k=datam; /* 取第一個(gè)元素 */ do do /* 由左往右找 */ i+; while(datai k); if (i j) temp=datai; /* 交換數(shù)據(jù) */ da

16、tai=dataj; dataj=temp; while(i j); temp=datam; /* 交換數(shù)據(jù) */ datam=dataj; dataj=temp; printf(過程輸出: ); for (i=m; i=n; i+) /* 輸出過程 */ printf(%3d, datai); printf(n); q_sort(data, m, j-1); /* 快速排序遞歸調(diào)用 */ q_sort(data, j+1, n); /* 快速排序遞歸調(diào)用 */ void ShowData(int n, int *Data) int i; for(i=1; i=n; i+) printf(%3

17、d, Datai); printf(n); 順序查找法: void main() int i, n, target, ans; int *data; int search(int *, int, int); printf(How many data do you want to input? ); scanf(%d, &n); /* 要求輸入數(shù)據(jù)的總數(shù) */ data=(int *)malloc(sizeof(int)*n); /* 指定數(shù)組將數(shù)據(jù)存儲(chǔ)在數(shù)組中 */ for(i=0; in; i+) /* 將數(shù)據(jù)存入設(shè)好的數(shù)組中 */ printf(Input data: ); scanf(%

18、d, &datai); printf(Input target to search: ); /* 輸入查找目標(biāo) */ scanf(%d, &target); /* 開始查找,并輸出結(jié)果 */ ans=search(data, n, target); /* 數(shù)據(jù)比較的判斷結(jié)果 */ if(ans=n) printf(Data %d cant find!, target); else printf(Data %d at %d position of array., target, ans+1);int search(int *data, int n, int key) /* 數(shù)據(jù)比較的部分 */

19、int i; for(i=0; in; i+) /* 順序比較數(shù)據(jù),找到則傳回第i筆 */ if(datai=key) return i; return 0; /* 返回沒找到數(shù)據(jù)并列出結(jié)果 */ 拆半查找法:void main() int i, n, target, ans; int *data; int search(int *, int, int); printf(How many data do you want to input? ); scanf(%d, &n); /* 要求輸入數(shù)據(jù)的總數(shù) */ data=(int *)malloc(sizeof(int)*n); /* 指定數(shù)組將

20、數(shù)據(jù)存儲(chǔ)在數(shù)組中 */ for(i=0; in; i+) /* 將數(shù)據(jù)存入設(shè)好的數(shù)組中 */ printf(Input data: ); scanf(%d, &datai); printf(Input target to search: ); /* 輸入查找目標(biāo) */ scanf(%d, &target); /* 開始查找,并輸出結(jié)果 */ ans=search(data, n, target); /* 數(shù)據(jù)比較的判斷結(jié)果 */ if(ans=n) printf(Data %d cant find!, target); else printf(Data %d at %d position of

21、 array., target, ans+1);int search(int *data, int n, int key) /* 數(shù)據(jù)比較的部分 */ int i; for(i=0; in; i+) /* 順序比較數(shù)據(jù),找到則傳回第i筆 */ if(datai=key) return i; return 0; /* 返回沒找到數(shù)據(jù)并列出結(jié)果 */串結(jié)構(gòu)定義: #define MAXLEN 40typedef struct /*串結(jié)構(gòu)定義*/ char chMAXLEN; 字符數(shù)組 int len; 長(zhǎng)度SString;void createstring(SString *s)int i,j;c

22、har c;printf(請(qǐng)輸入要建立的串的長(zhǎng)度:);scanf(%d,&j);for(i=0; ichi = c;s-len = j;void output(SString *s)int i;for (i=0;ilen;i+)printf(%c ,s-chi);printf(n);順序串插入函數(shù): int StrInsert(SString *s, int pos, SString t)/*在串s中下標(biāo)為pos的字符之前插入串t */int i;if (poss-len) /*插入位置不合法*/return(0); if (s-len + t.lenlen + t.len-1;i=t.len

23、 + pos;i-)s-chi=s-chi-t.len;for (i=0;ichi+pos=t.chi;s-len=s-len+t.len;elseif (pos+t.lenMAXLEN,但串t的字符序列可以全部插入*/for (i=MAXLEN-1;it.len+pos-1;i-) s-chi=s-chi-t.len;for (i=0;ichi+pos=t.chi;s-len=MAXLEN;else /*插入后串長(zhǎng)MAXLEN,并且串t的部分字符也要舍棄*/ for (i=0;ichi+pos=t.chi;s-len=MAXLEN;return(1);串刪除函數(shù):int StrDelete(

24、SString *s, int pos, int len)/*在串s中刪除從下標(biāo)pos起len個(gè)字符*/ int i;if (pos(s-len-len)/*刪除參數(shù)不合法*/return(0); for (i=pos+len;ilen;i+)s-chi-len=s-chi; /*從pos+len開始至串尾依次向前移動(dòng),實(shí)現(xiàn)刪除len個(gè)字符*/s-len=s-len - len; /*s串長(zhǎng)減len*/return(1);順序串比較函數(shù):int StrCompare(SString s, SString t)/*若串s和t相等則返回0;若st則返回正數(shù);若st則返回負(fù)數(shù)*/ int i;for (i=0;is.len&ilen + t.lenlen; ilen + t.len; i+)s-chi=t.chi-s-len;s-len+=t.len;flag=1;else if (s-lenlen;ichi=t.chi-s-len;s-len=MAXLEN;flag=0;else flag=0; /* 串s的長(zhǎng)度等于MAXLEN ,串t不被連接*/return(flag);堆串頭文件:#include #include typedef struct char *ch;int len;HString;堆串賦值函數(shù):int StrA

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論