資源簡介
一、 題目:圖的抽象數據類型實現
利用VC++的工作環境實現教材里圖的基本抽象數據類型。按照課本的要求運用c語言以及數據結構課程所學的知識,設計合理的數據存儲結果,實現圖的基本操作。
二、 抽象數據類型定義以及各基本操作的簡要描述
ADT MGraph{
數據對象:n=n是具有相同特征的數據元素集合,稱為頂點集。
數據關系:DR={|v,w∈n且表示從v指向w的弧}
基本操作:
CreateMGraph
初始條件:n是圖的頂點集,e是圖的邊集
操作結果:按和n的e定義構造圖G
DestroyGraph
初始條件: 圖G存在
操作結果: 銷毀圖G
GetVex
初始條件: 圖G存在,v是G中某個頂點
操作結果: 返回v的值
LocateVex
初始條件:圖G存在,v和G中頂點有相同特征
操作結果:若G中存在頂點v,則返回該頂點再圖中的位置;否則返回空
PutVex
初始條件: 圖G存在,v是G中某個頂點
操作結果: 對v賦值u
FirstAdjVex
初始條件: 圖G存在,v是G中某個頂點 */
操作結果: 返回的第一個鄰接頂點。若頂點在G中沒有鄰接頂點,則返回空
NextAdjVex
初始條件: 圖G存在,v是G中某個頂點,w是v的鄰接頂點
操作結果: 返回v(相對w)的下一個鄰接頂點。若w是v的最后一個鄰接點,則返回空
InsertVex
初始條件: 圖G存在,v和圖G中頂點有相同特征
操作結果: 在圖G中增添新頂點v(不增添與頂點相關的邊,留待InsertArc()去做)
DeleteVex
初始條件: 圖G存在,v是G中某個頂點
操作結果: 刪除G中頂點v及其相關的弧
InsertArc
初始條件: 圖G存在,v和W是G中兩個頂點
操作結果: 在G中增添弧
DeleteArc
初始條件: 圖G存在,v和w是G中兩個頂點
操作結果: 在G中刪除弧
DFSTraverseM
初始條件:圖G存在
操作結果:對圖進行深度優先遍歷
BFSTraverseM
初始條件:圖G存在
操作結果:對圖進行廣度優先遍歷
}ADT MGraph

代碼片段和文件信息
#include
#include
#define?MaxLen?10
#define?False?0
#define?True?1
#define?Error?printf
#define?QueueSize?30
#define?Null?0
#define?OK?1
typedef?struct
{
char?vexs[MaxLen];
int?edges[MaxLen][MaxLen];
int?ne;
}MGraph;
int??visited[10];
void?CreateMGraph(MGraph?&G);
void?DestroyGraph(MGraph?&G);
int?LocateVex(MGraph?Gchar?v);
int?GetVex(MGraph?G);
int?PutVex(MGraph?&Gchar?vchar?u);
int?FirstAdjVex(MGraph?Gchar?v);
int?NextAdjVex(MGraph?Gchar?vchar?w);
void?InsertVex(MGraph?&Gchar?v);
int?DeleteVex(MGraph?&Gchar?v);
int?InsertArc(MGraph?&Gchar?vchar?w);
int?DeleteArc(MGraph?&Gchar?vchar?w);
void?BFSTraverseM(MGraph?G);
void?DFSTraverseM(MGraph?G);
void?DFsM(MGraph?Gint?i);
void?BFSM(MGraph?Gint?i);
typedef?struct
{
int?front;
int?rear;
int?count;
int?data[QueueSize];?
}CirQueue;
void?InitQueue(CirQueue?*Q)
{
Q->front=Q->rear=0;
Q->count=0;
}
int?QueueEmpty(CirQueue?*Q)
{
????return?Q->count=QueueSize;
}
int?QueueFull(CirQueue?*Q)
{
????return?Q->count==QueueSize;
}
void?EnQueue(CirQueue?*Qint?x)
{
if?(QueueFull(Q))
Error(“Queue?overflow“);
else
{
Q->count++;
Q->data[Q->rear]=x;
Q->rear=(Q->rear+1)%QueueSize;
}//else???
}//EnQueue(CirQueue?*Qint?x)
int?DeQueue(CirQueue?*Q)
{
????int?temp;
????if(QueueEmpty(Q))
????{
Error(“Queue?underflow“);
return?Null;??????????????
????}//if(QueueEmpty(Q))
????else?{
temp=Q->data[Q->front];
Q->count--;
Q->front=(Q->front+1)%QueueSize;
return?temp;
}//else
}//DeQueue(CirQueue?*Q)
int?main()
{
printf(“\t**************************************************************\n“);
printf(“\t???*計算機學院網絡工程三班*--------*張菲*--*學號3107007062*\n“);
printf(“\t**************************************************************\n“);
MGraph?Ga;
char?muvw;
int?ijk;
G=a;
printf(“\n*建立一個有向圖的鄰接矩陣表示*\n“);
CreateMGraph(G);
printf(“\n已建立一個圖的鄰接矩陣存儲\n“);
for(i=0;i {??for(j=0;j printf(“%10d“G.edges[i][j]);
printf(“\n“);????????????????
}//for(i=0;i printf(“\n“);
system(“pause“);?
getchar();
m=‘y‘;
while?(m==‘y‘)
{
printf(“\n\n\n\n\n\n\t\t圖子系統\n“);
printf(“\t\t計算機學院網絡工程三班--------張菲\n“);
printf(“\t\t**********************************************\n“);
printf(“\t\t*?????????1-----重建鄰接矩陣?????????????????*\n“);
printf(“\t\t*?????????2-----銷毀圖???????????????????????*\n“);
printf(“\t\t*?????????3-----查找頂點v位置????????????????*\n“);
printf(“\t\t*?????????4-----返回頂點v的值????????????????*\n“);
printf(“\t\t*?????????5-----對頂點v賦值??????????????????*\n“);
printf(“\t\t*?????????6-----返回頂點v的第一個鄰接點??????*\n“);
printf(“\t\t*?????????7-----返回v相對w的下一個鄰接點?????*\n“);
printf(“\t\t*?????????8-----插入頂點v????????????????????*\n“);
printf(“\t\t*?????????9-----刪除頂點v????????????????????*\n“);
printf(“\t\t*?????????10----插入邊???????????????????????*\n“);
printf(“\t\t*?????????11----刪除邊???????????????????????*\n“);
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????505856??2009-07-03?00:12??課程設計報告.doc
?????文件??????78112??2009-07-02?20:15??課程設計報告.docx
?????文件?????135453??1998-06-15?00:00??analysing\analy\1.cpp
?????文件?????????33??2009-06-29?19:11??analysing\analy\1.txt
?????文件??????77093??1998-06-15?00:00??analysing\analy\2.CPP
?????文件??????89786??1998-06-15?00:00??analysing\analy\3.CPP
?????文件??????91269??1998-06-15?00:00??analysing\analy\4.CPP
?????文件?????109417??1998-06-15?00:00??analysing\analy\5.CPP
?????文件?????115208??1998-06-15?00:00??analysing\analy\6.CPP
?????文件?????115208??1998-06-15?00:00??analysing\analy\7.cpp
?????文件???????3667??2009-07-02?23:56??analysing\analy\analy.c
?????文件???????4328??2009-06-25?21:55??analysing\analy\analy.dsp
?????文件????????535??2009-06-05?21:57??analysing\analy\analy.dsw
?????文件???????5997??2009-07-02?23:04??analysing\analy\analy.h
?????文件??????41984??2009-06-29?22:10??analysing\analy\analy.ncb
?????文件??????49664??2009-06-29?22:10??analysing\analy\analy.opt
?????文件???????1321??2009-07-02?23:56??analysing\analy\analy.plg
?????文件?????135453??1998-06-15?00:00??analysing\analy\Debug\1.CPP
?????文件??????70167??1998-06-15?00:00??analysing\analy\Debug\10.cpp
?????文件??????64028??1998-06-15?00:00??analysing\analy\Debug\11.cpp
?????文件??????77093??1998-06-15?00:00??analysing\analy\Debug\2.CPP
?????文件??????91269??1998-06-15?00:00??analysing\analy\Debug\4.CPP
?????文件?????109417??1998-06-15?00:00??analysing\analy\Debug\5.CPP
?????文件?????115208??1998-06-15?00:00??analysing\analy\Debug\6.CPP
?????文件?????115208??1998-06-15?00:00??analysing\analy\Debug\7.cpp
?????文件??????72980??1998-06-15?00:00??analysing\analy\Debug\8.cpp
?????文件??????61600??1998-06-15?00:00??analysing\analy\Debug\9.cpp
?????文件??????58368??2009-06-29?21:13??analysing\analy\Debug\analy.bsc
?????文件?????196715??2009-07-02?23:56??analysing\analy\Debug\analy.exe
?????文件?????203160??2009-07-02?23:56??analysing\analy\Debug\analy.ilk
............此處省略45個文件信息
評論
共有 條評論