数据结构(C语言)图的基本操作及应用

图的基本操作及应用

  • 用邻接表法创建无向图
  • 以邻接表形式打印无向图
  • 深度遍历无向图并打印
  • 利用队列知识实现广度遍历无向图并打印
  • 取各顶点在表中序号

头文件及数据

  • 头文件定义及所需数据
#include <iostream>
using namespace std;
#define MAX 100     //最大顶点数

图存储结构

  • 边结点的存储结构:这个边所指向的顶点的位置、指向连接这个顶点的下一条边的指针(比如这个顶点为1,则nextB第一个指向边12,nextB下一个则会指向边13,再下一个则指边14)、这条边的相关信息(如权值)
    在这里插入图片描述
typedef struct BNode
{
   
    int pointPosite;             //该边所指向顶点的位置
    struct BNode *nextB;         //指向下一条边的指针
    int info;            		 //和边相关的信息
}BNode;
  • 顶点的存储结构:存放顶点的数据域、指向连接这个顶点的第一条边(这个有些不好理解,如下图:比如顶点为1,则顶点1的firstB为边12,若在循环里下一个firstB则指向边25)
    在这里插入图片描述
typedef struct DNode
{
   
    string data;                   //存放顶点信息
    BNode *firstB;              //指针指向第一条依附该顶点的边
}DNode,AdjList[MAX];//AdjList表领接表类型``
 - [ ] ***邻接表的存储结构***
 

```cpp
typedef struct
{
   
    AdjList vertices;           //顶点向量
    int DNum, BNum;             //图的当前顶点数和边数
}TGraph;

队列的存储表示

  • 顺序队列的存储表示(先进先出)
typedef struct
{
   
    string *base;  	//存储空间的基地址
    int front;		//头指针
    int rear;		//尾指针
}SqQueue;

队列的初始化、入队、出队、判空

  • 队列的初始化
void InitQueue(SqQueue &Q)
{
   //构造一个空队列
    Q.base = new string[MAX];	
    if(!Q.base)
    {
   
        cout<<"内存分配失败"<<endl;
    }
    Q.front = Q.rear = 0;
}
  • 入队
void EnQueue(SqQueue &Q, string e)
{
   
    if((Q.rear+1)%MAX 
  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值