数据结构----图(邻接表代码)

注释如文中所示,如对图的概念不清楚,可以转至https://blog.csdn.net/qq_44937699/article/details/123531764?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167810740216800226541640%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167810740216800226541640&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-2-123531764-null-null.142^v73^insert_down3,201^v4^add_ask,239^v2^insert_chatgpt&utm_term=%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%9B%BE&spm=1018.2226.3001.4187

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<algorithm>
using namespace std;


//插入节点的结构体,数据是节点出度的各个节点
typedef struct node
{
    int data;
    struct node* next;
}NODE;

//图结构体,储存的是每个节点的first指针
typedef struct gragh
{
    NODE* head[100];  //head[i]储存的是指向node类型的指针
}GRAGH;

//进行插入操作的函数
NODE* Insert(NODE* head, int y); //返回first头指针,y是下一个节点表示的序号
void Delete(NODE* head);  //释放内存

int main(void)
{
    GRAGH* gragh = new GRAGH;
    int n, m; //n个节点,m条边
    cin >> n >> m;
    int begin, end; //从哪指向哪

    //初始化
    for (int i = 1; i <= n; i++)
        gragh->head[i] = NULL;

    //输入,插入数据
    for (int i = 1; i <= m; i++)
    {
        cin >> begin >> end;
        gragh->head[begin] = Insert(gragh->head[begin], end);
    }


    //打印
    for (int i = 1; i <= n; i++)
    {
        if (gragh->head[i] == NULL) continue; //为空,即没有出度,就继续进行下一个节点

        cout << i;//第i个节点
        //p用于遍历的指针
        for (const NODE* p = gragh->head[i]; p != NULL; p = p->next)
            cout << "->" << p->data;
        cout << endl;
    }

    //delete
    for (int i = 1; i <= n; i++)
        Delete(gragh->head[i]);
    return 0;
}


NODE* Insert(NODE* head, int y)
{
    NODE* node = new NODE;
    node->data = y;
    if (head == NULL)
    {
        head = node;     //前一个节点 <- 新节点(head)
        head->next = NULL;
        return head;
    }
    node->next = head;
    head = node;
    return head;
}

void Delete(NODE* head)
{
    if (head == NULL) return;
    NODE* p = head;
    while (p != NULL)
    {
        NODE* temp = p;
        p = p->next;
        delete temp;
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值