数据结构初阶
文章平均质量分 74
C语言实现基础数据结构
ScarboroughFair#
这个作者很懒,什么都没留下…
展开
-
排序课后练习题
力扣排序数组1.堆排序/** * Note: The returned array must be malloced, assume caller calls free(). */ void Swap(int*a,int*b) { int t; t = *a; *a = *b; *b = t; return; } void AdjustDown(int*nums,int numsSize,int...原创 2022-04-20 15:30:41 · 1043 阅读 · 0 评论 -
常见排序算法(下)
1.交换排序1.1交换排序的基本思想基本思想:所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。1.2冒泡排序基本思想以升序为例,每一趟的冒泡排序都是把一个最大的数放到最后面,如果 a[i-1]>a[i],我们将i-1,i的值进行交换,依次循环反复。时间复杂度:最坏的情况:O(N^2)最好的情况:O(N)冒泡排序和插入排序相比,...原创 2022-03-31 16:49:41 · 4103 阅读 · 4 评论 -
常见排序算法(上)
1.插入排序1.1插入排序的思想把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。 1.2直接插入排序基本思想把一个数插入到有序区间,保持这个区间有序,当前第n+1个数插入到前面,前面的arr[0]到arr[n-1]已经排好序,此时用arr[n]与前面的arr[n-1], arr[n-2]…的值。进行比较找到合适的位置将arr[n]进行插入,原来位置上的元素顺序后移实现了插入 先尝试单趟排序..原创 2022-03-27 17:23:03 · 484 阅读 · 0 评论 -
二叉树基本代码实现
目录1.二叉树的链式结构2.二叉树的遍历2.1先序遍历2.2中序遍历2.3后序遍历3.二叉树的基本操作3.1求二叉树结点个数3.1.1全局遍历3.1.2递归的思想分治3.1.3局部变量3.2求二叉树叶子结点个数3.3求二叉树第K层结点个数3.4求二叉树的深度/高度3.5查找二叉树中值为x的结点3.6二叉树的销毁3.7运用队列实现广度优先的层序遍历1.二叉树的链式结构typedef int BTDataType;typ原创 2022-03-30 20:41:51 · 4478 阅读 · 0 评论 -
树与二叉树基本概念、结构特点及性质
目录1树的概念及结构1.1树的特点1.2树的相关概念1.3树的表示2二叉树2.1概念2.3特殊的二叉树2.4二叉树的性质1树的概念及结构树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因 为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的有一个特殊的结点,称为根结点,根节点没有前驱结点 除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、……、T...原创 2022-03-21 20:35:44 · 1371 阅读 · 0 评论 -
堆的简单理解和代码实现
1.堆的概念及结构 普通的二叉树是不适合用数组来存储的,因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结构存储。现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统虚拟进程地址空间中的堆是两回事,一个是数据结构,一个是操作系统中管理内存的一块区域分段1.1概念堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵完全二叉树的数组对象。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见.原创 2022-03-30 20:19:02 · 1069 阅读 · 0 评论 -
3.26栈和队列相关练习题
1. 括号匹配问题左括号入栈,右括号出栈若用C语言,栈的操作相关函数需要在前面单独写出bool isValid(char * s){ Stack st; StackInit(&st); while(*s) { //左括号入入栈 //右括号找最近的左括号匹配 if(*s == '['||*s == '('||*s == '{') { StackPus..原创 2022-03-20 10:13:28 · 1112 阅读 · 0 评论 -
队列的基本操作
目录1.1队列的定义1.2队列的特点2.1队列存储的说明2.2队列的定义2.3队列的初始化2.4队列的判空操作2.5队列的入队操作2.6队列的出队操作2.7 队列的获取队首元素操作2.8 队列的获取队尾元素操作2.9 队列的计算队列元素数量操作2.10 队列的销毁操作3,测试代码1.1队列的定义队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In First...原创 2022-03-18 23:55:56 · 10171 阅读 · 2 评论 -
栈的基本操作
目录1.1栈的概念1.2栈的实现2.1栈的结构2.2栈的初始化2.3栈的销毁2.4入栈操作2.5出栈操作2.6栈的读取栈顶操作2.7栈的判空操作2.8栈的读取元素数量操作3.测试程序1.1栈的概念栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。**进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。**栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈..原创 2022-03-18 22:07:40 · 5715 阅读 · 0 评论 -
带头双向循环链表
目录1.1双向链表的结点结构1.2双向链表的创建1.3双向链表的初始化1.4双向链表的尾插1.5双向链表的打印1.6双向链表的头插法1.7双向链表的尾删法1.8双向链表的头删法1.9双向链表查找值1.10双向链表的插入(前插)1.11双向链表的删除1.12判断双向链表是否为空(空返回1,非空返回0)1.13求双链表长度1.14销毁双链表1.1双向链表的结点结构typedef int LTDataType;typedef st...原创 2022-03-17 22:34:15 · 1093 阅读 · 0 评论 -
链表练习题2
1.给定一个链表,判断链表中是否有环。快慢指针,即慢指针一次走一步,快指针一次走两步,两个指针从链表其实位置开始运行,如果链表 带环则一定会在环中相遇,否则快指针率先走到链表的末尾。...原创 2022-03-17 16:26:07 · 656 阅读 · 0 评论 -
链表练习题1
目录1. 删除链表中等于给定值 val 的所有节点。扩展:链表有头结点的情况2. 反转一个单链表。2.1思路1:直接使用三个指针反转(迭代)2.2思路2:头插法(迭代)(此处的头不创建新结点)2.3思路3:递归法3. 给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。4. 输入一个链表,输出该链表中倒数第k个结点。5. 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的...原创 2022-03-16 19:40:24 · 1571 阅读 · 0 评论 -
单链表基本操作
原创 2022-03-13 22:52:53 · 1525 阅读 · 0 评论 -
3.9 顺序表题目练习
目录1移除元素1.1传统解法1.2思路21.3思路3(双指针)2.删除有序数组中的重复项2.1双指针2.2方法二(时间复杂度O(N))3.合并两个非递减数组(要求:时间复杂度O(N))3.1归并的思路3.2不开额外的数组1移除元素1.1传统解法依次挪动数据覆盖查找到每一个val空间复杂度O(1)时间复杂度O(N^2)最坏情况:全是val1.2思路2把不是val的值拷贝到新数组时间复杂度O(N)空...原创 2022-03-12 11:02:49 · 222 阅读 · 0 评论 -
3.7 顺序表
原创 2022-03-09 22:41:24 · 305 阅读 · 0 评论 -
3.7空间复杂度
void BubbleSort(int* a, int n) { assert(a); for (size_t end = n; end > 0; --end) { int exchange = 0; for (size_t i = 1; i < end; ++i) { if (a[i-1] > a[i]) { ...原创 2022-03-07 20:46:30 · 499 阅读 · 1 评论 -
3.5 时间复杂度
原创 2022-03-07 19:25:43 · 162 阅读 · 0 评论