数据结构
文章平均质量分 87
float_com
程序员小菜鸟一枚
展开
-
线性表【双向链表基本定义与操作】(带头结点)
该结点前驱元素的next域指向自己;后继元素的prior域指向自己在双向链表中有些操作(如:ListLength、GetElem,ClearList,Destroy等),因仅涉及一个方向的指针,故它们的算法与单链表的相同。但在插入、删除时,则需同时修改两个方向上的指针,两者的操作的时间复杂度均为 O(n)。//1.双向链表的结构定义多一个指向前驱的指针域// 数据域//前驱和后继指针//DNode * 用来定义结点指针//DLinkList 用来定义链表指针。原创 2024-08-12 21:29:22 · 341 阅读 · 0 评论 -
C知识扫盲------悬挂指针及其处理方法
悬挂指针(Dangling Pointer)是指向已经释放或不再有效的内存区域的指针。这种指针虽然仍然持有原来的内存地址,但那块内存已经被释放或重新分配给其他对象。悬挂指针问题是内存管理中的一个常见问题,可能会导致程序崩溃、未定义行为或数据损坏。在某些情况下,局部变量的内存区域在函数返回后不会立即被操作系统回收或重用。这意味着,尽管该内存区域理论上已不再有效,但它的内容可能在一段时间内保持不变,因此程序仍然可以读取到旧的值。即使这样,读取这些值依然属于未定义行为。原创 2024-08-06 20:17:45 · 469 阅读 · 0 评论 -
线性表【单链表的实现】(带头结点)
/结点数据域//结点指针域//注意这里的LinkList为自定义的结构体指针类型,与LNode*等价,最好用来定义头指针用LNode*来定义链表中的每个结点指针LinkList p;LNode* p;//定义结点指针p:两种写法完全等价,但是推荐使用这种写法,以提高代码可读性;LinkList L;//定义链表L(头指针):两种写法完全等价,但是推荐使用这种写法,以提高代码可读性;LNode* L;//数据域的学号部分//数据域的姓名部分int score//数据域的分数部分。原创 2024-08-06 00:31:27 · 1059 阅读 · 0 评论 -
C知识扫盲------scanf() 和 scanf_s()与缓冲区
scanf() 和 scanf_s() 是 C 语言中用于从标准输入读取格式化数据的函数。它们通过指定格式说明符,从输入流中读取并解析数据,然后存储在对应的变量中。scanf() 和 scanf_s() 是用于读取标准输入的函数,但在使用时需要特别注意安全性。缓冲区溢出是常见的安全问题,scanf_s() 通过要求指定缓冲区大小来防止这种问题。了解缓冲区的作用和常见错误,以及使用 scanf_s() 等安全函数,可以有效避免程序中的安全漏洞,确保程序的安全性和稳定性。原创 2024-08-06 00:30:52 · 951 阅读 · 0 评论 -
C知识扫盲------函数参数传递
对于基本类型(如int、char、float等),传递的是变量的值的副本。因此,在函数内对参数的修改不会影响函数外的实际参数。x = 10;// 仅仅修改了副本 xint a = 5;Value(a);//传入变量a// 输出依然是5return 0;在上述代码中,函数Value中的参数x是a的一个副本,对x的修改不影响main函数中的变量a。这里我们可以将主函数中“被修改的指针变量”副本指针所指向的内存中的值当需要在函数中修改指针本身所存储的地址即需要函数能够修改。原创 2024-08-01 21:11:06 · 621 阅读 · 0 评论 -
线性表【链式存储结构】概念
对于每个数据元素ai数据元素信息后继元素的存储地址结点(Node)结点分为数据域和指针域两部分数据域:存储数据元素信息的域指针域:存储直接后继位置的域n个结点由指针链组成一个链表它是线性表的链式存储映像,称为线性表的链式存储结构。原创 2024-07-31 17:22:18 · 233 阅读 · 0 评论 -
线性表【顺序存储结构】
零个或多个数据元素的有限序列一般形式如a1, a2, a3, … , an表的大小为n,其中大小为0的表称为空表(empty list)元素ai在表中的位序为i(i从1开始取)表中的每个数据元素可以是简单类型(如整型),也可以是复合类型(如结构体类型)用一段地址连续的存储单元依次存储线性表的数据元素我们通常使用一维数组进行存储存储空间的起始位置:数组data(动态静态均可)表的最大容量:数组长度MaxSize线性表当前长度:lengh。原创 2024-07-28 18:38:27 · 585 阅读 · 0 评论 -
时间复杂度与空间复杂度
当我们把程序看做一辆马车时,时间复杂度就是衡量马车跑的快不快(程序的运行效率),空间复杂度就是衡量这匹马吃的多不多(程序所需的存储空间的规模)理想情况下我们需要的是**既不吃草还跑的快(时间复杂度和空间复杂度都很低)**的马车,但很显然这是很难做到的所以在程序设计中就有了时间换空间,空间换时间的概念那么什么是时间换空间呢,继续上面的比喻,这时我们就需要的是一辆**吃的少(省空间)且跑的慢(费时间)**的马车那么同理空间换时间,就是说我们需要一辆**吃得多(费空间)且跑的快(省时间)**的马车而在具体的程序设原创 2024-07-24 16:08:08 · 690 阅读 · 2 评论 -
数据结构与算法分析——引言
结构定义:通俗来讲就是某个数据结构在我们的程序中是怎么实现的---------比如链表的结构定义就是一种物理存储单元上非连续、非顺序的存储结构;数据元素 的逻辑顺序是通过链表中的指针链接次序实现的。结构操作:即某个数据结构都支持什么样的操作---------比如链表的插入,删除,遍历,查找等操作对于某个数据结构,虽然我们可能不知道这个数据结构是怎么实现的,但是只要我们了解了这个数据结构的相关性质,我们就可以去使用这个数据结构去进行一些相关的操作如图,存入和取出---------我们每次存入或者取出数据时会存原创 2024-07-22 23:40:03 · 354 阅读 · 0 评论