无向图的链式存储(代码)

# include <stdlib.h>
# include <iostream.h>

# define zhi 20//最都能存放结点的个数

int diannum;//存放顶点的个数

//存放顶点信息和跟该点有关系的下一个顶点的指针
struct dian
{
char data;//存放顶点的信息
struct bian *next;//存放边的地址
};

//存放顶点和顶点的关系的值
struct bian
{
int data;//存放该顶点在一维数组中的下标
struct bian *next;//存放边的地址
};

//初始化图
void chushihua(struct dian *&tu)
{
int i;
tu=(struct dian *)malloc(zhi * sizeof(struct dian));//为图开辟相应的空间

for(i=0;i<zhi;i++)
(tu+i)->next=NULL;//赋初值
}

//图信息的输入
void shuru(struct dian *&tu)
{
int i;
int k;
int j;//存放标志
struct bian *p;

cout<<"请输入要输入图的顶点的总数:";
cin>>diannum;

//顶点信息的输入操作
cout<<"\n";
for(i=0;i<diannum;i++)
{
cout<<"请输入第"<<i+1<<"顶点的信息:";
cin>>(tu+i)->data;
}
cout<<"顶点信息输入完毕!";

//顶点和顶点关系的输入
for(i=0;i<diannum;i++)
{
k=1;//一个标志
cout<<"\n\n请输入可以和第"<<i+1<<"个顶点相通的所有顶点的序号!\n";
cout<<"请输入第"<<k<<"个顶点的序号(0为退出):";
cin>>j;
while(j!=0)
{
if(k==1)//响应标志的操作
{
(tu+i)->next=(struct bian *)malloc(sizeof(struct bian));
p=(tu+i)->next;
p->data=j;
p->next=NULL;
}
else
{
p->next=(struct bian *)malloc(sizeof(struct bian));
p=p->next;
p->data=j;
p->next=NULL;
}

k=k+1;
cout<<"请输入第"<<k<<"个顶点的序号(0为退出):";
cin>>j;
}
}
cout<<"顶点和顶点的关系输入完毕!\n\n";
}

//图的信息的输出
void shuchu(struct dian *tu)
{
int i;
struct bian * p;
cout<<"图的信息的输出:\n";
//中心思想:从第一个顶开始,输出所有和第一个顶点直接相连的顶点
for(i=0;i<diannum;i++)
{
cout<<"顶点"<<(tu+i)->data<<"和那些顶点是直接相连的关系:";

p=(tu+i)->next;
while(p!=NULL)
{
cout<<(tu+i)->data<<"----"<<(tu+(p->data-1))->data<<" ";
p=p->next;
}
cout<<"\n";
}
}

//主函数
void main()
{
struct dian * tu;//定义图的头
int option;//存放用户的操作
chushihua(tu);//给图的头分配相应的空间,并给相应的项赋初值

option=0;
while(option!=3)
{
cout<<"\n 菜单\n\n";
cout<<" 1、图的输入\n";
cout<<" 2、图的输出\n";
cout<<" 3、退出\n\n";
cout<<"请选择操作:";
cin>>option;
switch(option)
{
case 1:
shuru(tu);
break;
case 2:
shuchu(tu);
break;
case 3:
break;
default:
break;
}
}

}


心得:标记的运用!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值