
数据结构与算法
文章平均质量分 55
数据结构与算法
神迹小卒
大学,大学,大不了自学
展开
-
数据结构高频面试题
链表专题合并两个有序单链表,要求合并后依旧有序https://blog.youkuaiyun.com/aiqq136/article/details/117224184查找单链表的倒数第K个节点https://blog.youkuaiyun.com/aiqq136/article/details/117263858判断两个单链表是否相交?若相交,求出交点https://blog.youkuaiyun.com/aiqq136/article/details/117279788判断单链表是否带环?若带环,求出环的长度?原创 2021-06-28 11:55:35 · 292 阅读 · 0 评论 -
0627-c-数据结构-块链串实现代码
#include<stdio.h>#include<stdlib.h>#include<string.h>#define linkNum 3//全局设置链表中节点存储数据的个数typedef struct Link { char a[linkNum]; //数据域可存放 linkNum 个数据 struct Link* next; //代表指针域,指向直接后继元素}link; // nk为节点名,每个节点都是一个 link 结构体link.原创 2021-06-27 20:41:59 · 298 阅读 · 1 评论 -
C语言数据结构-排序-数组合并
数组合并假设有 n 个长度为 k 的已排好序(升序)的数组,请设计数据结构和算法,将这 n 个数组合并到一个数组,且各元素按升序排列。即实现函数: void merge_arrays(const int* arr, int n, int k, int* output);其中 arr 为按行优先保存的 n 个长度都为 k 的数组,output 为合并后的按升序排列的数组,大小为 n×k。时间要求(评分规则),当 n > k 时:满分:时间复杂度不超过 O(n×k×log(n))原创 2021-06-27 10:51:46 · 2155 阅读 · 0 评论 -
C语言数据结构-排序-堆化
堆化二叉堆一般用数组来表示。例如,根节点在数组中的位置是0,第n个位置的子节点分别在2n+1和 2n+2。 因此,第0个位置的子节点在1和2,1的子节点在3和4。以此类推。这种存储方式便于寻找父节点和子节点。在二叉堆上可以进行插入节点、删除节点、取出值最小的节点、减小节点的值等基本操作。“最小堆”的定义如下:typedef struct _otherInfo{ int i; int j;}OtherInfo;typedef struct _minHeapNode{原创 2021-06-27 10:32:41 · 419 阅读 · 0 评论 -
C语言数据结构-排序-堆元素插入
堆元素插入二叉堆一般用数组来表示。例如,根节点在数组中的位置是0,第n个位置的子节点分别在2n+1和 2n+2。 因此,第0个位置的子节点在1和2,1的子节点在3和4。以此类推。这种存储方式便于寻找父节点和子节点。在二叉堆上可以进行插入节点、删除节点、取出值最小的节点、减小节点的值等基本操作。“最小堆”的定义如下:typedef struct _otherInfo{ int i; int j;}OtherInfo;typedef struct _minHeapNode原创 2021-06-27 10:09:42 · 602 阅读 · 0 评论 -
C语言数据结构-排序-堆初始化
堆初始化二叉堆一般用数组来表示。例如,根节点在数组中的位置是0,第n个位置的子节点分别在2n+1和 2n+2。 因此,第0个位置的子节点在1和2,1的子节点在3和4。以此类推。这种存储方式便于寻找父节点和子节点。在二叉堆上可以进行插入节点、删除节点、取出值最小的节点、减小节点的值等基本操作。“最小堆”的定义如下:typedef struct _otherInfo{ int i; int j;}OtherInfo;typedef struct _minHeapNode{原创 2021-06-27 09:48:33 · 639 阅读 · 0 评论 -
C语言数据结构-排序-堆辅助函数
堆辅助函数二叉堆是完全二叉树或者是近似完全二叉树。二叉堆有两种:最大堆和最小堆。最大堆(大顶堆):父结点的键值总是大于或等于任何一个子节点的键值,即最大的元素在顶端; 最小堆(小顶堆):父结点的键值总是小于或等于任何一个子节点的键值,即最小的元素在顶端。 二叉堆子结点的大小与其左右位置无关。二叉堆一般用数组来表示。例如,根节点在数组中的位置是0,第n个位置的子节点分别在2n+1和 2n+2。 因此,第0个位置的子节点在1和2,1的子节点在3和4。以此类推。这种存储方式便于寻找父节点和子节点。在原创 2021-06-27 09:41:16 · 703 阅读 · 2 评论 -
C语言数据结构-查找-AVL添加
AVL添加平衡二叉树,是一种二叉排序树,其中每个结点的左子树和右子树的高度差至多等于1。它是一种高度平衡的二叉排序树。现二叉平衡树结点定义如下:typedef struct node{ int val; struct node *left; struct node *right; struct node *parent; int height;} node_t;请实现平衡二叉树的插入算法://向根为 root 的平衡二叉树插入新元素 val,原创 2021-06-27 07:26:52 · 487 阅读 · 0 评论 -
C语言数据结构-查找-哈希表添加
哈希表添加哈希表(Hash Table,也叫散列表),是根据键(Key)而直接访问在内存存储位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做哈希函数,存放记录的数组称做哈希表。哈希表相关定义如下:typedef enum{ HASH_OK, HASH_ERROR, HASH_ADDED, HASH_REPLACED_VALUE, HASH_ALREADY_ADDED,原创 2021-06-27 07:26:15 · 947 阅读 · 1 评论 -
C语言数据结构-查找-哈希表创建
哈希表创建哈希表(Hash Table,也叫散列表),是根据键(Key)而直接访问在内存存储位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做哈希函数,存放记录的数组称做哈希表。哈希表相关定义如下:typedef enum{ HASH_OK, HASH_ERROR, HASH_ADDED, HASH_REPLACED_VALUE, HASH_ALREADY_ADDED,原创 2021-06-27 07:25:33 · 1352 阅读 · 0 评论 -
《数据结构》速成
绪论线性表原创 2021-06-26 11:34:16 · 2417 阅读 · 1 评论 -
C语言数据结构-第九章排序-电大同步进度
第九章内容简介当进行数据处理时,经常需要进行查找操作, 而为了查得快找得准,通常要求待处理的数据按关键字大小有序排列,以便采用效率较高的查找方法。可见,排序是计算机程序设计中的一种基础性操作,研究和掌握各种排序方法非常重本章介绍排序的基本概念并讨论五类重要的排序方法。l 插入类排序l 交换类排序l 选择类排序l 归并类排序l 分配类排序这些精彩的算法展示了重要的程序设计思想与高超的程序技巧,为创新方法提供了重要基础。第1讲.排序的基本概念【本讲要点】...原创 2021-06-17 21:47:27 · 399 阅读 · 2 评论 -
C语言数据结构-第八章查找-电大同步进度
第八章查找——内容简介在非数值运算问题中,数据存储量一般很大,为了在大量信息中找到某些值,需要用到查找技术,为了提高查找效率,需要对一些数据进行排序。因而查找和排序是重要的处理技术。【本章要点】l 查找基本概念l 基于线性表的查找l 基于树表的查找l 计算式查找第1讲、查找的基本概念——内容简介【本讲要点】l 查找的基本概念l 查找的方法第1讲、查找的基本概念——教学讲义一、查找有关的基本概念列表:由同一类型的数据元素(或记录)构...原创 2021-06-17 21:38:01 · 2122 阅读 · 1 评论 -
数据结构C语言代码实战
数据结构前言https://blog.youkuaiyun.com/aiqq136/article/details/113721642时间复杂度_空间复杂度https://blog.youkuaiyun.com/aiqq136/article/details/113721841顺序表和链表https://blog.youkuaiyun.com/aiqq136/article/details/113727327栈和队列https://blog.youkuaiyun.com/aiqq136/article/details/1137原创 2021-06-16 11:28:06 · 321 阅读 · 0 评论 -
数据结构C语言代码实战03-顺序表和链表--原地移除数组中所有的元素val
1. 原地移除数组中所有的元素val,要求时间复杂度为O(N),空间复杂度为O(1)。OJ链接https://leetcode-cn.com/problems/remove-element/给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。说明:为什么返回数值是整数,但输出的答案是原创 2021-06-16 10:50:02 · 460 阅读 · 0 评论 -
C语言数据结构-图-邻接表2-试在邻接表存储结构上实现图的基本操作 del_vertex
邻接表2试在邻接表存储结构上实现图的基本操作 del_vertex,相关定义如下:typedef int VertexType;typedef enum{ DG, UDG}GraphType;typedef struct ArcNode{ int adjvex; InfoPtr info; struct ArcNode nextarc;}ArcNode;typedef struct VNode{ VertexType data; Ar原创 2021-06-02 16:37:31 · 1197 阅读 · 1 评论 -
高频面试题之链表专题-逆置一个单链表
逆置一个单链表OJ链接:https://leetcode-cn.com/problems/reverse-linked-list/description/高频考察的大厂云图题目:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。示例 1:输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]示例 2:输入:head = [1,2]输出:[2,1]示例 3:输入:head = []输出:[]提示: ...原创 2021-05-27 11:53:24 · 320 阅读 · 1 评论 -
高频面试题之链表专题-判断单链表是否带环?若带环,求出环的长度?若带环求出环的入口点
4.判断单链表是否带环?若带环,求出环的长度?若带环求出环的入口点OJ链接:https://leetcode-cn.com/problems/linked-list-cycle/高频考察的大厂云图:题目:给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行原创 2021-05-27 11:12:32 · 193 阅读 · 1 评论 -
高频面试题之链表专题-判断两个单链表是否相交?若相交,求出交点
3.判断两个单链表是否相交?若相交,求出交点OJ链接:https://leetcode-cn.com/problems/intersection-of-two-linked-lists/description/高频考察的大厂云图:题目:编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA原创 2021-05-26 10:03:00 · 383 阅读 · 0 评论 -
高频面试题之链表专题-查找单链表的倒数第K个节点
2.查找单链表的倒数第K个节点OJ链接:https://www.nowcoder.com/practice/529d3ae5a407492994ad2a246518148a?tpId=13&tqId=11167&rp=2&ru=%2Factivity%2Foj&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking&tab=answerKey高频考察的大厂云图:题目:输入一个链表,输出该链表中倒数第k个结点。原创 2021-05-25 21:05:37 · 149 阅读 · 0 评论 -
高频面试题之链表专题-合并两个有序单链表,要求合并后依旧有序
1、合并两个有序单链表,要求合并后依旧有序。OJ链接:https://leetcode-cn.com/problems/merge-two-sorted-lists/description/高频考察的大厂云图:题目:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]原创 2021-05-24 16:19:46 · 432 阅读 · 4 评论 -
通过代码快速上手C语言数据结构-查找(单函数_单头文件版本)
算法8.1设置监视哨的顺序查找法int SeqSearch(RecordList l, KeyType k)/*在顺序表l中顺序查找其关键字等于k的元素,若找到,则函数值为该元素在表中的位置,否则为0*/{ int i; l.r[0].key=k; i=l.length; while (l.r[i].key!=k) i--; return(i);}算法8.2不设置监视当的顺序查找法int SeqSearch(RecordList l, KeyType k)/*不原创 2021-05-13 17:35:30 · 696 阅读 · 0 评论 -
C语言数据结构-图-邻接表1-试在邻接表存储结构上实现图的基本操作 insert_vertex 和 insert_arc
邻接表1试在邻接表存储结构上实现图的基本操作 insert_vertex 和 insert_arc,相关定义如下:typedef int VertexType;typedef enum{ DG, UDG}GraphType;typedef struct ArcNode{ int adjvex; InfoPtr *info; struct ArcNode *nextarc;}ArcNode;typedef struct VNode{ Ve原创 2021-05-12 19:08:34 · 2662 阅读 · 3 评论 -
C语言数据结构-图-邻接矩阵-试在邻接矩阵存储结构上实现图的基本操作 matrix_insert_vertex 和matrix_insert_arc
邻接矩阵试在邻接矩阵存储结构上实现图的基本操作 matrix_insert_vertex 和matrix_insert_arc,相关定义如下:typedef int VertexType;typedef enum{ DG, UDG}GraphType;typedef struct{ VertexType vertex[MAX_VERTEX_NUM]; //顶点向量 int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; //邻接矩阵原创 2021-05-12 17:14:48 · 2781 阅读 · 1 评论 -
C语言数据结构-第七章、 图单元测试-电大同步进度
1单选(5分)在一个图中,所有顶点的度之和是所有边数的 ( )倍。 A.2 B.3 C.1/2 D.1 2单选(5分)在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的( )倍。 A.1 B.2 C.4 D.1/2 3单选(5分)一个有n个顶点的无向图最多有( )条边。 A.n*(n-1) B.2*n ...原创 2021-05-11 21:09:05 · 1807 阅读 · 0 评论 -
通过代码快速上手C语言数据结构-内部排序
9.1直接插入排序9.2折半插入排序9.3希尔排序9.4冒泡排序法9.5快速排序9.6—趟快速排序9.7简单选择排序9.8调整堆9.9建初堆9.10堆排序9.11相邻两个有序子序列的合并9.12归并排序的递归9.13归并排序的初始调用过程9.14链式基数排序9.15荷兰国旗问题...原创 2021-05-11 15:59:44 · 275 阅读 · 0 评论 -
通过代码快速上手C语言数据结构-查找
8.1设置监视哨的顺序查找法8.2不设置监视哨的顺序查找法8.3折半查找法8.4二叉排序树查找的递归8.5二叉排序树查找的非递归8.6二叉排序树插入的递归8.7二叉排序树插入的非递归8.8创建二叉排序树8.9在二叉排序树中删除结点8.10平衡二叉排序树的插入操作8.11在B_树中查找关键字为k的元素8.12在B_树中寻找小于等于关键字k的关键字序号8.13B 树的插入8.14在B_树的指定位置插上key8.15B_树的分裂8.16哈希表的查找曲型题原创 2021-05-11 15:56:08 · 541 阅读 · 0 评论 -
通过代码快速上手C语言数据结构-图
7.1采用邻接矩阵表示法创建有向图7.2创建图的十字链表7.3深度优先遍历图7.4深度优先遍历v0所在的连通子图7.5采用邻接矩阵的DepthFirstSearch7.6采用邻接表的DepthFirstSearch7.7非递归形式的DepthFirstSearch7.8广度优先搜索图g中v0所在的连通子图7.9深度优先找出从顶点u到v的简单路径7.10普里姆算法7.11拓扑排序算法7.12求入度算法7.13修改后的拓扑排序算法7.14关键路径算法7.1原创 2021-05-11 15:53:02 · 507 阅读 · 0 评论 -
通过代码快速上手C语言数据结构-数组和广义表
5.1稀疏矩阵转置经典5.2稀疏矩阵“列序”递增转置5.3稀疏矩阵“”—次定位快速转置”5.4建立稀疏矩阵的十字链表5.5求广义表的表头5.6求广义表的表尾5.7求广义表的长度5.8求广义表的深度5.9-1统计广义表中原子数目方法5.9-2统计广义表中原子数目方法5.10复制广义表...原创 2021-05-10 19:44:18 · 570 阅读 · 0 评论 -
通过代码快速上手C语言数据结构-串
4.1顺序串插入函数4.2顺序串删除函数4.3顺序串复制函数4.4顺序串判空函数4.5顺序串比较函数4.6顺序串求串长函数4.7顺序串清空函数4.8顺序串连接函数4.9顺序求子串函数4.10顺序串的简单模式匹配函数4.11堆串赋值函数4.12堆串插入函数4.13堆串删除函数曲型例题链串模式匹配...原创 2021-05-10 19:35:40 · 720 阅读 · 0 评论 -
C语言数据结构-树和二叉树-树转二叉树-使用队列,编写transfrom函数,将普通树转换成对应的二叉树
树转二叉树使用队列,编写transfrom函数,将普通树转换成对应的二叉树。二叉树的相关定义如下:typedef int DataType;typedef struct Node{ DataType data; struct Node* left; struct Node* right;}BiTNode, *BiTree;普通树节点的定义如下:#define MAX_CHILDREN_NUM 5struct _CSNode{ DataType原创 2021-05-10 17:30:09 · 905 阅读 · 0 评论 -
C语言数据结构-树和二叉树-共同祖先 假设二叉树采用二叉链表方式存储, root指向根结点,p所指结点和q所指结点为二叉树中的两个结点,编写一个计算它们的最近的共同祖先
共同祖先假设二叉树采用二叉链表方式存储, root指向根结点,p所指结点和q所指结点为二叉树中的两个结点,编写一个计算它们的最近的共同祖先,函数定义如下:BiTNode * nearest_ancestor(BiTree root, BiTNode *p, BiTNode *q);其中 root 指向二叉树的根结点,p 和 q 分别指向二叉树中的两个结点。提示:在完成本题时,可利用 path 函数获取p和q两个结点到根结点之间的路径,之后再计算两条公共路径得出最近的共同祖先。path函数及原创 2021-05-10 16:57:36 · 3634 阅读 · 0 评论 -
C语言数据结构-树和二叉树-路径-假设二叉树采用二叉链表方式存储, root指向根结点,node 指向二叉树中的一个结点,编写函数 path,计算root到 node 之间的路径
路径假设二叉树采用二叉链表方式存储, root指向根结点,node 指向二叉树中的一个结点,编写函数 path,计算root到 node 之间的路径,(该路径包括root结点和 node 结点)。path 函数声明如下:bool path(BiTNode* root, BiTNode* node, Stack* s);其中,root指向二叉树的根结点,node指向二叉树中的另一结点,s 为已经初始化好的栈,该栈用来保存函数所计算的路径,如正确找出路径,则函数返回 true,此时root在栈底原创 2021-05-10 16:48:59 · 2871 阅读 · 1 评论 -
C语言数据结构-树和二叉树-先序遍历-已知二叉树按照二叉链表方式存储,利用栈的基本操作写出先序遍历非递归形式的算法
先序遍历已知二叉树按照二叉链表方式存储,利用栈的基本操作写出先序遍历非递归形式的算法:void pre_order(BiTree root);在遍历过程中,pre_order函数需要调用 visit_node 函数来实现对结点的访问,该函数声明如下:void visit_node(BiTNode *node);二叉树的相关定义如下:typedef int DataType;typedef struct Node{ DataType data; struc原创 2021-05-10 16:36:34 · 2440 阅读 · 1 评论 -
通过代码快速上手C语言数据结构-栈与队列
3.1初始化顺序栈3.2顺序栈进栈运算3.3顺序栈出栈运算3.4顺序栈取栈顶元素运算3.5双端顺序栈初始化3.6双端顺序栈进栈操作3.7双端顺序栈出栈操作3.8链栈进栈操作3.9链栈出栈操作3.10第i号栈进栈操作3.11第i号栈出栈操作3.12括号匹配算法3.13无括号算术表达式处理算法3.14汉诺塔递归算法3.15汉诺塔非递归算法示意3.16斐波那契数列的非递归算法3.17求n!非递归算法3.18链队列初始化3.19链队列入队操作算原创 2021-04-24 01:06:08 · 362 阅读 · 0 评论 -
通过代码快速上手C语言数据结构---树
6.1-6.3遍历二叉树6.1先序遍历二叉树6.2中序遍历二叉树6.3后序遍历二叉树#include <stdio.h>#include <malloc.h>#include <conio.h>typedef char DataType;typedef struct Node{ DataType data; struct Node* LChild; struct Node* RChild;}BiTNode, * BiTree;原创 2021-04-24 01:05:50 · 798 阅读 · 0 评论 -
C语言数据结构-第六章、树和二叉树单元测试-电大同步进度
第六章 单元测验11单选(5分)已知一算术表达式的中缀形式为 A-B/C+D*E,前缀形式为+-A/BC*DE,其后缀形式为( )。 A.ABC/-DE*+ B. A-BC/DE*+ C.AB/C-D*E+ D. ABCDE/-*+ 2单选(5分)有关二叉树下列说法正确的是( )。 A.二叉树中每个结点的度都为2 B.一棵二叉树的度可以小于2 C.二叉树中任何一个结点的度都为2 D.二叉树中至...原创 2021-04-24 01:05:40 · 2787 阅读 · 1 评论 -
C语言数据结构-第七章图-电大同步进度
第七章图 内容简介图结构中结点之间的关系是任意的,每个元素都可以和其他任何元素相关,即元素之间是多对多的关系。图作为一种非线性数据结构,被广泛应用于多个技术领域,例如系统工程、化学分析、统计力学、遗传学、控制论、人工智能、编译系统等领域。在离散数学中侧重于对图的理论的研究。【本章要点】l 图的基本概念l 图的存储结构l 图的遍历l 图的连通性l 有向无环图应用——拓扑排序、关键路径l 最短路径l 总结与提高第1讲 图的基本概念——内容简介【本...原创 2021-04-23 08:23:17 · 1105 阅读 · 0 评论 -
通过代码快速上手C语言数据结构-线性表
知识点+练习=快速上手数据结构目录知识点+练习=快速上手数据结构线性表的查找运算在顺序表L中第i个数据元素之前插入一个元素e。 插入前表长n=L->last+1,i的合法取值范围是 1≤i≤L->last+2在顺序表L中删除第i个数据元素,并用指针参数e返回其值。i的合法取值为1≤i≤L.last+1【顺序表应用举例】有序表合并问题用头插法建立单链表方法1方法2用尾插法建立单链表在带头结点的单链表L中查找第i个结点,若找到(1≤i≤n),则返回该结点的原创 2021-04-23 08:23:06 · 5537 阅读 · 0 评论 -
C语言数据结构-数组广义表-十字链表-实现十字链表的初始化操作-实现十字链表的删除操作
十字链表十字链表相关定义如下:typedef int ElemType;// 非零元素结点结构typedef struct OLNode{ int row,col; ElemType value; struct OLNode *right,*down;}OLNode,*OLink;// 十字链表结构typedef struct{ OLink *rowhead,*colhead; int rows,cols,nums;}CrossList,原创 2021-04-15 16:57:19 · 1877 阅读 · 0 评论