
数据结构
文章平均质量分 73
yyyyeahhhhhh
腾讯测试开发工程师
展开
-
排序
排序排序的概念及其运用1.1排序的概念排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。内部排序:数据元素全部放在内存中的排序。外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外原创 2021-02-03 13:21:43 · 498 阅读 · 1 评论 -
二叉树OJ
二叉树OJ1.单值二叉树题目描述/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: bool i原创 2021-01-28 13:20:01 · 470 阅读 · 0 评论 -
有关树的代码操作
有关树的代码操作二叉树的概念回顾二叉树的遍历所谓遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问题。遍历是二叉树上最重要的运算之一,是二叉树上进行其它运算之基础。...原创 2020-11-25 16:33:46 · 374 阅读 · 0 评论 -
堆的认识
堆的认识首先需要说明一点的问题是,这里我们所说的堆和使用malloc开辟的内存空间的那个堆,是完全不一样的,使用malloc的哪个堆,相当于是一块内存空间,而我们这里所说的堆,其实是一种数据结构,也是二叉树顺序存储最明显的一个例子堆的概念及结构如果有一个关键码的集合K = {k0,k1, k2,…,kn-1},把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足:Ki <= K2i+1 且 Ki<= K2i+2 (Ki >= K2i+1 且 Ki >= K原创 2020-10-21 17:58:32 · 500 阅读 · 0 评论 -
树和二叉树的概念与介绍
树和二叉树的概念与介绍树树的概念树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个结有零个或多个子结点;没有父结点的结点称为根结点;每一个非根结点有且只有一个父结点;除了根结点外,每个子结点可以分为多个不相交的子树 。树是一种非线性结构,它与线性结构是不相同的,线性结构具有一对一的特性,元素具有唯一的前驱以及唯一的后继(除了第一个结点以及最后一个结点外),树的这种非原创 2020-08-15 12:41:07 · 1289 阅读 · 0 评论 -
队列的应用实例
队列的应用实例原创 2020-07-14 14:50:48 · 2336 阅读 · 0 评论 -
栈的应用实例
栈的应用实例一.有效的括号题目描述解题思路:根据问题分析,若要判断当前左括号是否存在一个右括号与之对应。则需要判断该括号右边字符串的左括号是否有对应。根据这样的原则,可以使用栈。栈的一大特点是后进先出(last-in first-out),这样可以先判断最右边的左括号。故遍历字符串,将所有左括号压入栈底,当遇到右括号时拿出栈中顶端元素进行判断。若不能匹配则该字符串不满足要求,匹配则推出栈顶元素。在遍历完字符串后,判断栈是否为空。为空则满足,否则不满足。我们可以对所给出的括号序列进行遍历的操作原创 2020-07-11 17:13:55 · 1570 阅读 · 0 评论 -
数组和广义表
数组和广义表什么是数组存储结构前面学习数据结构的过程中,总是使用数组作为顺序表的底层实现,给我们一种 “数据结构中,数组的作用就是实现顺序表” 的错误认识。其实,数组的作用远不止于此。现在,我们将从数据结构的角度讲解数组存储结构。现在所讲的数组,要将其视为一种存储结构,与平时使用的数组基本数据类型区分开。从本质上讲,数组与顺序表、链表、栈和队列一样,都用来存储具有 “一对一” 逻辑关系数据的线性存储结构。只因各编程语言都默认将数组作为基本数据类型,使初学者对数组有了 “只是基本数据类型,不是存储结原创 2020-05-20 14:37:55 · 583 阅读 · 1 评论 -
二叉树的基本操作
二叉树的基本操作BinTree.h#pragma once #include<stdio.h>#include<stdlib.h>#include<assert.h>typedef int BTDataType;typedef struct BinTreeNode{ struct BinTreeNode* left; struct Bi...原创 2020-04-27 14:47:39 · 372 阅读 · 0 评论 -
队列的实现
队列队列是一种特殊的线性结构,在其一段进行数据的插入操作,这一端称为对尾,在另外一段,进行数据的删除操作,这一端称为对头。特性队列具有先进先出(FIFO),后进后出的特性(LILO)要存储元素的话,底层就必须要有空间,那么现有的两种存储元素的空间分别为顺序的和链式的,那么就需要选择一种结构去表示队列的存储。如果采用顺序结构的话,那么就会给出一段连续的空间,最开始,队列中是没有元素的,所以...原创 2020-04-19 12:57:58 · 251 阅读 · 0 评论 -
栈的实现
栈和队列特殊的顺序表:栈和队列栈栈是特殊的线性表,只能在其一端进行数据插入(栈顶),另一端称为栈底。栈的特性:先进后出(FILO),后进先出(LIFO)栈的例子:手枪放子弹的顺序,第一个放进去的子弹,最后一个被打出来,所以符合先进后出的特性。有关栈的操作Stack.h#pragma once#include<stdio.h>#include<std...原创 2020-04-17 15:29:41 · 242 阅读 · 0 评论 -
带头结点双向循环链表的实现
DList.h//带头节点的双向循环链表//为什么要带头//原因是因为如果不带头的话,那么头插或者头删会比较麻烦//而且不带头的话需要传递二级指针,带头的话,只需要传递一级指针//为什么给成双向的?//(有一个理由是可以逆向打印链表)//也就是对有些操作会简单一些#pragma once // 保证头文件不会被重复包含#include<stdlib.h>#...原创 2020-04-07 13:14:05 · 991 阅读 · 1 评论 -
顺序表和链表的区别
顺序表和链表的区别顺序表和链表的优缺点顺序表优点:(1)空间利用率高。(局部性原理,连续存放,命中率高)(2)存取速度高效,通过下标来直接存储。缺点:(1)插入和删除比较慢,比如:插入或者删除一个元素时,整个表需要遍历移动元素来重新排一次顺序。(2)不可以增长长度,有空间限制,当需要存取的元素个数可能多于顺序表的元素个数时,会出现"溢出"问题.当元素个数远少于预先分配的空间时,空...原创 2020-03-02 13:39:35 · 551 阅读 · 0 评论 -
不带头结点的单链表的实现
SList.h//不带头结点的单链表 //不带头结点的话,那么链表表中的第一个节点一顶存储的是有效元素#pragma once //保证头文件不被重复包含#include<assert.h>#include<stdlib.h>#include<stdio.h>//如果想要对链表进行操作,那么首先需要一个结点的结构体typedef i...原创 2020-02-25 20:39:09 · 1388 阅读 · 1 评论 -
顺序表的介绍和实现
程序的实现大致分为三个部分SeqList.h#pragma once //防止文件被重复包含#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<string.h>//#define MAXSIZE 20#define DefaultCapacity 20 ...原创 2020-02-17 15:55:36 · 569 阅读 · 0 评论 -
数据结构&复杂度
时间复杂度和空间复杂度算法效率时间复杂度空间复杂度算法效率算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,空间效率被称为空间复杂度。时间复杂度衡量的是一个算法的运行速度,而空间复杂度主要是衡量一个算法所需要的额外空间。时间复杂度(说白了,就是一个函数表达式)时间复杂度的定义:算法的时间复杂度是一个函数,它定量描述了该算法的运行时间,一个算法执行...原创 2020-02-14 19:58:38 · 564 阅读 · 1 评论