数据结构
文章平均质量分 93
用C语言实现数据结构中的链表,栈和队列,堆,二叉树等
一朵猫猫菇
一篇更比六篇强
展开
-
二叉树OJ题详解
第一题:单值二叉树力扣链接:力扣单值二叉树就是每一个节点存放的数据都相同,那么如何判断一棵树为单值二叉树呢?我们就拿最简单的一棵树为例子,比如根节点为1它的左子树和右子树也为1的一棵树,我们只需要比较根节点和它的左子树是否相等,根节点和它的右子树是否相等,也就是说判断一个二叉树是否为单值二叉树最重要的是判断父节点与左右子树的值是否相同。/** * Definition for a binary tree node. * struct TreeNode { * int val;原创 2022-12-04 12:00:41 · 762 阅读 · 0 评论 -
C语言实现顺序表
顺序表的实现与通讯录几乎一模一样,写过通讯录的来看看这篇文章就可以立马搞定顺序表。首先我们按照惯例创建三个文件,一个里面是本工程所需要的头文件,一个里面是存放测试代码的文件,最后一个是放函数具体实现代码的文件。如图所示:顺序表实际上是结构体里有一个你要存放数据类型的指针,每次增加数据都是给这个指针开辟空间,所以我们定义一个结构体变量,里面存放要保存什么类型的指针和一个记录位置的变量sz和记录空间容量的变量capcity。将结构体重命名为SeqList是为了后面更简单的使用结构体指针,将int重命原创 2022-10-30 23:13:46 · 2181 阅读 · 1 评论 -
怒肝20天用C语言写出的排序集合
文章目录排序的概念 一、常见的排序算法 二、代码实现 总结排序的概念排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次 序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。内部排序:数据元素全部放在内存中的排序。原创 2022-12-20 00:11:33 · 8806 阅读 · 26 评论 -
C语言单链表实现
前言链表是一种物理存储结构上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的一、链表的分类1.单向或双向2.带头或者不带头3.循环或者非循环最常用的两种链表结构:1.无头单向非循环链表:结构简单,一般不会单独用来存数据,实际中更多的是作为其他数据结构的子结构,如哈希桶,图的邻接表等等,另外这种结构在笔试面试中出现很多2.带头双向循环链表:结构最复杂,一般用来单独存储数据,实际中使用的链表数据结构,都是带头双向循环链表,另外这个原创 2022-11-05 20:12:51 · 438 阅读 · 3 评论 -
时间复杂度和空间复杂度及多道例题讲解
时间,空间复杂度介绍及例题讲解原创 2022-10-29 11:55:18 · 1812 阅读 · 2 评论 -
C语言链表中的“战斗机”
前言上篇文章我们介绍了链表的几种类型并且完整的讲解了单链表的实现过程,这期我们来介绍堪称链表中的战斗链表,那就是带头双向循环链表,众所周知,带头双向循环链表结构是链表中最为复杂的,但是代码实现起来也会复杂吗?答案是并不会,代码实现起来比单链表简单!一、双向循环链表的分类1. 无头单向非循环链表:结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结 构的子结构,如哈希桶、图的邻接表等等。另外这种结构在笔试面试中出现很多。2. 带头双向循环链表:结构最原创 2022-11-07 22:26:30 · 426 阅读 · 2 评论 -
C语言单链表面试题详解
第一题:力扣移除链表元素:力扣链接:力扣我解此题的思路是碰见要移除的链表元素就释放然后让前一个节点链接后一个节点。代码如图所示:/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* removeElements(struct ListNode* head, int val)原创 2022-11-11 20:47:56 · 690 阅读 · 0 评论 -
C语言二叉树详解
文章目录概念 一、二叉树的性质 二、实现二叉树 总结概念一棵二叉树是结点的一个有限集合,该集合:1. 或者为空2. 由一个根节点加上两棵别称为左子树和右子树的二叉树组成注意:1. 二叉树不存在度大于2的结点2. 二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树任意的二叉树都由下面几种情况组合而成:二叉树中有两个非常特别的存在:1.满二叉树:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就原创 2022-12-03 17:13:24 · 8842 阅读 · 6 评论 -
数据结构之栈和队列
在我们经过单链表以及双向带头循环链表的锻炼后我们写栈就是易如反掌,下面我们就用数组实现栈。实现栈我们只需要明白栈的特性就是后进先出。首先我们来看栈的头文件包含以及所需要实现的功能:#pragma once#include <stdio.h>#include <assert.h>#include <stdlib.h>#include <stdbool.h>typedef int StackDate;typedef struct Stack{原创 2022-11-19 15:30:47 · 309 阅读 · 0 评论 -
用数组实现堆(TopK及堆排序详解)
文章目录堆的介绍 一、树的表示 二、堆的实现 总结堆的介绍堆其实就是一颗完全二叉树,堆可以分为大堆和小堆。大堆:父节点大于孩子节点小堆:父节点小于孩子节点这里说到父节点和孩子节点,那么我们就来复习一下数的知识。如图:这是一棵树,下面介绍一下树的相关概念。节点的度:一个节点含有的子树的个数称为节点的度。例:A有6个节点,所以A节点的度为6叶节点或终端节点:没有子树的节点(度为0)称为叶子节点。如:B节点c节点等非终端节点或分支节原创 2022-12-02 18:02:23 · 755 阅读 · 1 评论 -
栈和队列面试题讲解
第一题:用队列实现栈 力扣链接:力扣此题考的是性质互换,我们画图来解决:如图所示就是永远保留一个队列为空,依靠这个空队列来转换出栈,下面来看代码。#define _CRT_SECURE_NO_WARNINGS 1#include <assert.h>#include <stdio.h>#include <stdlib.h>#include <stdbool.h>typedef int QueueData;typedef原创 2022-11-19 21:45:23 · 346 阅读 · 0 评论