数据结构与算法
C 语言实现的数据结构与算法
TheWindOfJune
这个作者很懒,什么都没留下…
展开
-
2.5 数据结构与算法之——递归专题【待更新】
递归定义一个函数直接或者间接调用自己先来看一段写的很好的话“当在一个函数运行期间调用另一个函数时,在运行被调函数之前,系统需要完成三件事:(1)将所有的实参、返回地址等信息传递给被调函数保存(2)为被调函数的局部变量分配存储区(3)依照被调函数保存的返回地址将控制转移到调用函数当有多个函数构成嵌套调用时,按照后调用先返回的原则,上述函数之间的信息传递和控制转移必须通过栈来实现,即系统将整个程序运行时所需要的的数据空间安排在一个栈中,每当调用一个函数时,就为它在栈顶分配一个存储区,原创 2020-07-21 09:45:15 · 116 阅读 · 0 评论 -
1.0 数据结构与算法预备知识之——绪论
数据结构与算法的定义:把现实中大量而复杂的问题以特定的数据类型和特定的存储结构保存到主存储器上,以及在此基础上为实现某个功能(如查找、删除和排序)而执行的操作,这个相应的操作叫算法。1. 数据结构 = 个体的存储 + 个体之间关系的存储2. 算法 = 对存储数据的操作衡量算法的标准1. 时间复杂度:程序大概执行次数2. 空间复杂度:程序大概占用的最大内存3. 难易程度4. 健壮性预备知识1. 指针2结构体数组动态内存分配...原创 2020-06-04 17:03:34 · 132 阅读 · 0 评论 -
1.1 数据结构与算法预备知识之——指针(指针与数组的奇妙操作 & 指针的基本使用技巧)
在 C语言中定义了一个这样的一维数组,总共存储了5个数据值:int a[5] ={1,2,3,4,5}在一维数组中,索引与内容的对应方式是:a[0] = 1a[1] = 2a[2] = 3a[3] = 4a[4] = 5我们都知道数组名就是数组中第一个元素的地址,也就是说a == &a[0]这一点毋庸置疑,但是这时候新的问题来了,那么数组名 a 的地址又是什么呢,我们把 a 的地址 &a 拿出来看一看:#include <stdi...原创 2020-06-01 16:02:36 · 314 阅读 · 0 评论 -
1.2 数据结构与算法预备知识之——结构体
为什么会出现结构体我们需要复杂的数据组合在一起形成一个新的数据类型Java 的类与 C 语言的结构体的qub什么叫结构体如何使用结构体结构体的注意事项原创 2020-06-02 11:00:04 · 473 阅读 · 0 评论 -
1.3 数据结构与算法预备知识之——动态内存分配
关于一维数组要知道的预备知识#include <stdio.h>int main(void){ int a[5] = { 2, 8, 4, 7, 5 }; printf("%d\n", *a); // a 本身指向第一个元素,输出结果与 a[0] 相同 printf("%d\n", *(a + 2)); // 这里就指向第三个元素,输出结果与 a[3] 相同 return 0;}动态内存的初步理解凡是使用 malloc() 函数分配的内存,就是动态内存,否则就是静原创 2020-06-04 16:36:54 · 188 阅读 · 0 评论 -
1.4 数据结构与算法预备知识之——typedef的用法
为什么需要 typedef()在遇到一些自己定义的结构体啊这种名字很长的自定义变量类型时(系统定义变量类型也一样),可以利用这个 typedef() 去给它多起一个别名来简化,避免一直进行很复杂的名字的输入怎么使用 typedef()#include <stdio.h>#include <string.h>typedef struct Student ST;struct Student{ int sid; char name[100]; int age原创 2020-06-07 00:14:19 · 386 阅读 · 0 评论 -
2.0 数据结构与算法之——线性结构概述
什么是线性结构?直观来说,线性结构就是可以把所有的结点都可以用一根直线串起来的结构线性结构可以包含两大类:1. 连续存储2. 离散存储回顾之前学到的两种数组简单存储方式1. 静态内存分配int a[10];2. 动态内存分配int * pArr = (int *)malloc(sizeof(int *)*len) // len为数组的长度...原创 2020-06-05 10:51:12 · 99 阅读 · 0 评论 -
2.1 数据结构与算法之——连续存储【数组】
什么叫数组?内部元素类型相同,大小相等数组的优缺点(与链表比较)【待更新】代码实操内容问题描述:利用结构体构建一个数组,使其具有初始化、添加元素到末尾、插入、删除、排序和显示等等功能1. 首先实现数组初始化的功能,这里的指针使用是个难点,尤其是存储数组第一个元素那里需要重点分析# include <stdio.h># include <malloc.h>// 定义了一个复合的数据类型,数据类型名字叫 struct Arrstruct Ar..原创 2020-06-05 13:06:13 · 272 阅读 · 0 评论 -
2.2 数据结构与算法之——离散存储【链表】
链表在数据结构中的地位链表是数据结构的基础单元,树和图的数据结构都要用到链表的基础知识,所以链表一定要学会链表的定义n个节点离散分配,彼此通过指针相连接,除了首尾节点每个节点只有一个前驱节点和一个后续节点链表中的专业术语首节点:第一个有效节点尾节点:最后一个有效节点,但是其指针域为空头节点:首节点前加的一个节点,只有指针域,不存放有效数据,但是其数据类型和其它结点的数据类型是一样的,加头节点是因为可以方便链表操作头指针:指向头结点的指针,它存放了头节点的地址尾指针:指向尾原创 2020-06-07 11:43:02 · 165 阅读 · 0 评论 -
2.3 数据结构与算法之——栈
引言之前在讲到C语言中的内存分配时提到栈这个名词了,内存分为两种:静态内存和动态内存其中,静态内存是在栈中分配的,动态内存是在堆中分配的一个不规范的代码举例:#include <stdio.h>#include <malloc.h>void f(int k){ int m; double * q = (double *)malloc(200);}int main(void){ int i = 10; int * p = (int *)mall原创 2020-06-28 12:11:45 · 94 阅读 · 0 评论 -
2.4 数据结构与算法之——队列
队列的定义:一种可以实现“先进先出”的存储结构,类似于排队去买票,先排的先进去;可以在两端进行操作,但是只能固定在一端插入固定在一端删除;而栈只能在一端进行插入和删除的操作队列的分类:链式队列【用链表实现】—— 很简单了,跟之前没啥区别,我们就不讲了静态队列【用数组实现】—— 静态队列通常都必须是循环队列,算是有点难度了循环队列讲解:(1)静态队列为什么必须是循环队列如果是传统的数组的话,出队要从 Front 出,那它只能加,入队要从 Rear 入,它也只能加,那你下面的空间都浪原创 2020-06-30 16:34:53 · 166 阅读 · 0 评论