数据结构课程设计图 指针的指针Word格式.docx
- 文档编号:21290741
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:23
- 大小:30.23KB
数据结构课程设计图 指针的指针Word格式.docx
《数据结构课程设计图 指针的指针Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计图 指针的指针Word格式.docx(23页珍藏版)》请在冰豆网上搜索。
→…
入端地址
→…
2..设计要点
(1)Netins_V(Net*G,charv)//插入顶点
(2)Netins_E(Net*G,charu,charv,floatc)//插入边
(3)NetDeleteEdge(Net*G,charVertex1,charVertex2)//删除边
(4)NetDeleteVertex(Net*G,charVertex)//删除顶点
(5)voidout1(Net*G)//输出
(6)voidout2(Net*G)//输出
(7)Netcreat1(Net*G)//创建图
(8)Netcreat2(Net*G)//创建图
(9)NetDFS(Net*G,charVertex)//广度优先遍历
(10)NetBFSM(Net*G,vnode&
_ver)//深度优先遍历
(11)NetDFSL(Net*G)//深度优先遍历以邻接表存储的图G
3.存储要点
(1)创建图Netcreat1(Net*G)//创建
Netp=newvnode;
(2)插入顶点:
Netins_V(NetG,charv):
通过扫描图的顶点链表,找到链表的尾部,在尾部添加一个顶点。
(3)插入边:
Netins_E(NetG,charu,charv):
找到边顶点的地址,在相应的顶点下,将地址添加到链表中,一般追加到链表的尾部。
四源程序
#include<
iostream>
usingnamespacestd;
typedefstructvnode//顶点结构
//顶点信息
//指向下一个顶点
//遍历过程中访问标记
structlnode//邻接表结点结构
//出端地址
structQNode//图的广度优先遍历,用到队列,再次定义队列
{
vnode*Ver;
QNode*Next;
structLQNode
QNode*front;
QNode*rear;
classQueue
public:
Queue();
~Queue();
boolEmptyQueue();
voidAddQueueNodeVertex(QNode**NV);
vnode*DeleteQueueNodeVertex();
private:
LQNode*LQ;
Queue:
:
Queue(){this->
LQ=NULL;
}
~Queue(){}
boolQueue:
EmptyQueue()
if(this->
LQ==NULL)
return1;
else
return0;
voidQueue:
AddQueueNodeVertex(QNode**NV)
QNode*P;
P=newQNode;
P->
Ver=(*NV)->
Ver;
Next=NULL;
LQ==NULL)
{
this->
LQ=newLQNode;
LQ->
front=P;
rear=P;
}
rear->
Next=P;
vnode*Queue:
DeleteQueueNodeVertex()
EmptyQueue())
cout<
<
"
对空!
!
endl;
if(this->
front==this->
rear)
{
vnode*Q;
Q=this->
front->
deletethis->
front;
LQ;
this->
returnQ;
}
else
QNode*P=this->
front=this->
Next;
Q=P->
deleteP;
Netins_V(Net*G,charv)//插入顶点
Net_G=*G;
if(*G==NULL)
Netp=newvnode;
p->
next=*G;
*G=p;
(*G)->
h=0;
d=v;
ch='
0'
;
while(_G->
d!
=v&
&
_G->
next!
=NULL)
_G=_G->
next;
if(_G->
next==NULL)
Netp=newvnode;
p->
*G=p;
(*G)->
cout<
节点重复,请按任意键推出:
getchar();
exit
(1);
return*G;
Netins_E(Net*G,charu,charv,floatc)//插入边
Netp=*G,q=*G;
lnode*r;
while(p&
p->
d!
=u)p=p->
while(q&
q->
=v)q=q->
r=newlnode;
r->
next=p->
h;
a=q;
p->
h=r;
voidout1(Net*G)//输出
Netp=*G;
lnode*q;
while(p){
顶点"
d<
出端:
"
q=p->
if(q){cout<
a->
'
'
q=q->
while(q){cout<
p=p->
voidout2(Net*G)//输出
Netcreat1(Net*G)//创建图
*G=ins_V(G,'
d'
);
c'
b'
a'
*G=ins_E(G,'
'
8);
7);
6);
5);
Netcreat2(Net*G)//创建图
p'
l'
q'
n'
m'
9);
4);
voidVisit(charVertex)
cout<
Vertex<
boolJudgementInDegree(vnode&
ver1,vnode&
ver2)//判断ver1是否是ver2的入度接点
if(&
ver1==&
ver2)
if(ver1.h==NULL)
return0;
lnode*NE=NULL;
NE=ver1.h;
while(NE->
=NULL&
NE->
a!
=&
{
NE=NE->
}
if(NE->
a==&
return1;
else
return0;
NetDFS(Net*G,charVertex)
//ver1指向当前接点所在
vnode*ver1=NULL;
vnode*ver=*G;
while(ver->
=Vertex&
ver->
=NULL)
ver=ver->
if(ver->
next==NULL&
=Vertex)
输入顶点数据错误,程序退出!
ver1=ver;
structnode
vnode*Ver;
node*next;
};
node*M=NULL;
node*N=NULL;
lnode*NE=NULL;
if(ver1->
h==NULL)
M=NULL;
{
NE=ver1->
//M指向邻接点链表的头结点
M=newnode;
M->
Ver=NE->
a;
next=NULL;
N=M;
while(NE->
node*L=newnode;
L->
next->
N->
next=L;
N=L;
NE=NE->
ver=*G;
while(ver!
if(ver!
=ver1)
if(JudgementInDegree(*ver,*ver1))
node*LL=newnode;
LL->
Ver=ver;
if(N==NULL)
{
N=LL;
M=N;
}
else
N->
next=LL;
node*k;
k=M;
ver1->
ch='
1'
Visit(ver1->
d);
for(k=M;
k!
=NULL;
k=k->
next)
if(k->
Ver->
ch=='
)
DFS(G,k->
NetBFSM(Net*G,vnode&
_ver)
vnode*_g=*G;
do
_g->
_g=_g->
}while(_g!
=NULL);
QueueQue;
vnode*H;
Visit(_ver.d);
_ver.ch='
QNode*P=newQNode;
Ver=&
_ver;
Que.AddQueueNodeVertex(&
P);
while(Que.EmptyQueue()!
=1)
H=Que.DeleteQueueNodeVertex();
QNode*M=NULL;
QNode*N=NULL;
vnode*ver;
lnode*NE=NULL;
if(H->
M=NULL;
{
NE=H->
//M指向邻接点链表的头结点
M=newQNode;
M->
N=M;
/*N->
Vnext=NE->
Enext->
Edge;
N=NE->
Enext;
*/
QNode*L=newQNode;
L->
N->
Next=L;
N=L;
ver=*G;
while(ver!
if(ver!
=H)
if(JudgementInDegree(*ver,*H))
QNode*LL=newQNode;
LL->
if(N==NULL)
{
N=LL;
M=N;
}
else
N->
Next=LL;
ver=ver->
QNode*A;
//QNode*B;
A=M;
while(A!
if(A->
ch=='
Visit(A->
A->
Que.AddQueueNodeVertex(&
A);
A=A->
NetDeleteEdge(Net*G,charVertex1,charVertex2)
vnode*NA=NULL;
vnode*NB=NULL;
lnode*EA=NULL;
lnode*EB=NULL;
//NA指向当前Vertex1接点
NA=*G;
while(NA->
=Vertex1)
NA=NA->
//起始接点的边集
EA=NA->
//第一个接点是目标接点
if(EA->
d==Vertex2)
//第一种情况为边集next为空
if(EA->
deleteEA;
NA->
h=NULL;
//第二种情况为边集next不为空
h=EA->
//第一个接点不是目标接点
//EA是目标接点
//EB是前驱接点
EB=EA;
while(EA->
=Vertex2)
EB=EA;
EA=EA->
if(EA->
EB->
deleteEA;
if(EA->
EB->
next=EA->
deleteEA;
NetDeleteVertex(Net*G,charVertex)
vnode*ver=*G;
vnode*Q=ver;
Q=ver;
node*K=NULL;
node*C=NULL;
/*N->
N=NE->
K=N;
C=N;
C=LL;
node*A=NULL;
node*B=NULL;
A=M;
while(A!
=K)
DeleteEdge(G,Vertex,A->
A=A->
while(C!
DeleteEdge(G,C->
d,Vertex);
C=C->
Q->
next=ver1->
if(ver1==*G)
*G=ver1->
deletever1;
voidmain()
charv1;
charv2;
charv3;
NetG1=0;
//structvnode*G
图1的输出如下:
G1=creat1(&
G1);
out1(&
NetG2=0;
endl<
图2的输出如下:
G2=creat2(&
G2);
out2(&
\n\n图1的深度优先遍历结果:
DFS(&
G1,'
\n\n图1的广度优先遍历结果:
BFSM(&
G1,*G1);
\n\n请输入删除的点:
cin>
>
v3;
DeleteVertex(&
G1,v3);
\n\n请输入删除的边:
v1;
v2;
DeleteEdge(&
G1,v1,v2);
getchar();
/*
d
bc
顶点a出端:
c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构课程设计图 指针的指针 数据结构 课程 设计图 指针