数据结构初级
time~travel
这个作者很懒,什么都没留下…
展开
-
笔试面试----经典排序算法详解
排序1.排序的概念1.1排序的概念排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。内部排序:数据元素一次性全部放在内存中的排序。外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内原创 2020-07-10 18:11:57 · 184 阅读 · 0 评论 -
二叉树经典OJ题
1 单值二叉树如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回 false。_isUnivalTree(struct TreeNode*root, int value) { if(root == NULL) return true; if(root->val != value) return false; return _isUnivalTree(roo原创 2020-06-27 09:08:24 · 320 阅读 · 0 评论 -
二叉树顺序和链式结构及实现(图文版)
1.树的概念及结构树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。有一个特殊的结点,称为根结点,根节点没有前驱结点除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,其中每一个集合Ti(1<= i<= m)又是一棵结构与树类似的子树。每棵子树的根结点有且只有一个前驱,可以有0个或多个后继因此,树是递归定义的节点的度:一个节点含有的子树的个数称原创 2020-06-19 21:20:03 · 2356 阅读 · 0 评论 -
用两个队列实现栈(C语言)
使用队列实现栈的下列操作:push(x) – 元素 x 入栈pop() – 移除栈顶元素top() – 获取栈顶元素empty() – 返回栈是否为空typedef int QDataType;//队列底层使用链表中节点的结构typedef struct QNode{ struct QNode* next; QDataType val;}QNode;typedef struct Queue{ struct QNode* head; struct Q原创 2020-06-12 22:57:15 · 698 阅读 · 1 评论 -
栈和队列的模拟实现——图文详解(C语言)
栈1.栈的概念及结构栈:一种特殊的线性表,只允许在固定的一段进行插入和删除元素操作。进行数据插入和删除操作的一段称为栈顶,另一端称为栈底。栈中的数据元素遵守先进后出的原则。压栈:栈的插入操作叫做进栈\压栈,入数据在栈顶。**出栈:**栈的删除操作叫做出栈,出数据也在栈顶。2.栈的应用: 1.改变元素的次序 2.括号的匹配 3.用栈将递归转换为循环3.栈的基本操作:typedef int SData;//栈中没有任意位置的插入和删除,若要使用,使用顺序表 栈不需要遍历//动态栈 type原创 2020-06-12 20:55:55 · 1260 阅读 · 0 评论 -
链表中经典OJ面试题图文详解
删除链表中等于给定值 val 的所有节点添加链接描述输入: 1->2->6->3->4->5->6, val = 6输出 : 1->2->3->4->5struct ListNode* removElements(struct ListNode* head, int val){ struct ListNode* cur = head; struct ListNode* prev = NULL; while (cur) {.原创 2020-06-05 22:45:47 · 342 阅读 · 0 评论 -
顺序表和链表的增删查改操作
1. 线性表线性表(linear list)是n个具有相同特色的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常用的线性表:顺序表、链表、栈、队列、字符串…线性表在逻辑上是线性结构,也就是说是连续的一条直线。但在物理结构上并不是连续的,线性表在物理上存储时,通常以数组和链表结构的形式存储。**2.顺序表2.1概念及结构顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。顺序表一般分为:1.静态顺序表:使用定长数组存原创 2020-05-27 22:07:41 · 830 阅读 · 0 评论 -
时间复杂度+空间复杂度超级详细介绍(二分查找 流程图分析 一看就懂)
引入首先看一个菲波那契数列的算法int Fib(int N){ if (N < 3) return 1; else return Fib(N - 1) + Fib(N-2);}写完这个算法后,首先思考一下这个算法是不是最好的?不是,是否还有什么可以改进的地方,其实,衡量一个算法的好坏,是用算法的复杂度来衡量的。正文1.算法效率算法效率分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,二空间效率被称为空间复杂度。时间复杂度主要衡量的是一个算原创 2020-05-19 15:05:11 · 3322 阅读 · 0 评论 -
递归法的流程图和时间复杂度分析
递归函数的时间复杂度:递归总次数 * 单词递归时间复杂度Fac(5) = 120;在每次递归中添加一条循环语句,所以:时间复杂度 = O(N+1) * O(N) = O(N^2)原创 2020-05-18 18:58:16 · 847 阅读 · 2 评论 -
二分查找画图详述细节问题(边界值问题+中间值溢出+复杂度问题手写的照片)
二分查找:引用网上大神的一句话:Although the basic idea of binary search is comparatively straightforward, the details can be surprisingly tricky...这句话可以这样理解:思路很简单,细节是魔鬼。所以本文中讲述的都是二分查找的细节问题。定义二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中..原创 2020-05-17 23:36:21 · 823 阅读 · 0 评论