首页 > 其他分享 >12月24日总结

12月24日总结

时间:2025-01-10 19:25:21浏览次数:1  
标签:24 总结 12 链表 访问 算法 遍历 邻接 顶点

今日踏入数据结构中 “图” 的奇妙世界,相较于之前学习的线性结构和树结构,图更为复杂且充满多样性,带来了全新的知识挑战与思维拓展。
概念上,图由顶点(vertex)和边(edge)组成,顶点代表图中的节点,边则用于连接这些顶点,体现它们之间的关系。根据边是否有方向,图可分为有向图和无向图。有向图的边带有箭头,表明顶点之间的单向连接关系,例如社交网络中用户的关注关系,A 关注 B 并不意味着 B 一定关注 A;无向图的边没有方向,意味着顶点间的连接是双向的,就像朋友关系,若 A 是 B 的朋友,那么 B 也是 A 的朋友。此外,图还存在带权图的概念,即边上带有权重值,可用于表示距离、成本等实际意义,如交通网络中道路的长度或通行费用。
学习图的操作时,遍历是基础且关键的环节。深度优先搜索(DFS)类似于树的深度优先遍历,从一个起始顶点出发,沿着一条路径尽可能深地探索下去,直到无法继续,再回溯到上一个有未探索分支的顶点,重复该过程。它常借助栈来实现,通过将访问过的顶点入栈,方便回溯操作,适用于查找连通分量、判断图是否连通等场景。广度优先搜索(BFS)则从起始顶点开始,逐层向外扩展访问,先访问起始顶点的所有邻接顶点,再依次访问这些邻接顶点的邻接顶点,借助队列来维护访问顺序,确保按层推进,常用于求最短路径(无权图情况下)、寻找连通块等问题。
在图的存储表示方面,常见有邻接矩阵和邻接表两种方式。邻接矩阵是一个二维数组,若顶点 i 和顶点 j 之间有边相连,则矩阵中对应位置的值为 1(或边的权重,对于带权图),否则为 0,这种方式简单直观,判断顶点间是否有边的时间复杂度为 O (1),但对于稀疏图(边较少的图)会浪费大量存储空间。邻接表则是为每个顶点建立一个链表,链表中存储该顶点的所有邻接顶点,这种存储方式节省空间,尤其适合稀疏图,但查询两顶点间是否有边时,最坏情况需要遍历链表,时间复杂度较高。
实践过程中遇到诸多难题。由于图的结构复杂,在实现遍历算法时,容易出现重复访问顶点或遗漏某些顶点的情况,需要精心设计标记数组来记录顶点的访问状态。在存储结构选择与应用上,若对图的特性判断失误,如稀疏图选用邻接矩阵,会导致空间浪费甚至程序效率低下。对于带权图的一些算法,如求最短路径的 Dijkstra 算法、Floyd 算法,理解算法思路和边界条件颇为吃力,调试过程复杂。
明日计划深入学习图的经典算法,像最小生成树算法(Prim 算法、Kruskal 算法),进一步掌握图在解决实际问题中的强大功能,通过大量实例练习巩固今日所学,提升运用图解决复杂问题的能力,力求在数据结构领域更上一层楼。

标签:24,总结,12,链表,访问,算法,遍历,邻接,顶点
From: https://www.cnblogs.com/Genghao11/p/18664547

相关文章

  • 12月25日总结
    今日主要学习了图的两种遍历方法:深度优先遍历和广度优先遍历深度优先搜索(DFS)include<stdio.h>include<stdlib.h>defineMAX_VERTICES100//图的结构体,使用邻接表存储typedefstructGraph{intnumVertices;structAdjListNode**adjLists;int*visited;}Graph;//......
  • 12月26日总结
    今日主要学习了图中寻找最短路径的算法:迪杰斯特拉算法和弗洛伊德算法迪杰斯特拉算法:include<stdio.h>include<stdlib.h>include<limits.h>include<stdbool.h>//找到未确定最短路径的顶点中距离源点最近的顶点intminDistance(intdist[],boolsptSet[],intnumVerti......
  • 12月17日每日总结
    今日主要学习了图中寻找最小生成树的算法:克鲁斯卡尔算法和普利姆算法克鲁斯卡尔算法:构建边结构体:用于存储图中的边信息,包括边的两个端点以及边的权值。typedefstructEdge{intsrc;intdest;intweight;}Edge;对边进行排序:可以使用C语言标准库中的qsort函数来实现......
  • vscode配latex,用于latex排版,花了几个小时终于研究明白了(已总结)
    掉坑里了,切记texlive必须要安装,不然就是下面这样子步骤一:texlive安装链接:https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/Images/下载完后双击ISO文件,再双击install-tl-windows.bat双击install-tl-windows.bat之后会自动跳转1-2个页面到下面这个页面......
  • 12月25日
    泛型的类型参数泛型的类型参数可以是任何有效的Java类型,但不能是基本数据类型。可以使用类、接口或自定义类型作为类型参数。类型参数的限制可以使用extends关键字对类型参数进行限制,表示类型参数必须是某个类的子类或实现某个接口的类。例如:javapublicclassBox{private......
  • 12月20日总结
    今日学习了队列的相关操作:定义:defineMAX_SIZE100//假设队列最大容量为100typedefstructQueue{intdata[MAX_SIZE];intfront;intrear;}Queue;初始化:voidinitQueue(Queue*q){q->front=0;q->rear=0;}入队操作:voidenqueue(Queue*q,intvalue){i......
  • 2024-12-1-#{}与¥{}的区别-response
    {}与¥{}的区别response实现重定向response响应字符数据response响应字节数据以及导入工具类实现响应......
  • 12月14日总结
    今日学习了,单链表的基本操作:定义:typedefstructListNode{intdata;structListNode*next;}ListNode;初始化:voidinsertAtHead(ListNode**head,intvalue){ListNode*newNode=(ListNode*)malloc(sizeof(ListNode));newNode->data=value;......
  • 12月15日总结
    今日全身心投入到数据结构中双链表的学习,相较于之前接触的单链表,双链表有着独特的魅力与复杂性。概念上,双链表的每个节点不仅包含指向后继节点的指针(如同单链表),还增设了指向前驱节点的指针。这一设计使得链表在双向遍历上独具优势,无论是从表头向表尾推进,还是反向操作,都能轻松实现......
  • 12月16日总结
    今日学习了双链表的相关操作:一、创建双链表创建双链表的第一步是定义节点结构体,它包含数据域、指向前驱节点的指针prev和指向后继节点的指针next。//双链表节点结构体定义typedefstructDoubleListNode{intdata;structDoubleListNode*prev;structDoubleListNode......