数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
2.1. 定义与特点 定义 ? 具有相同数据类型的 \(n(n\geq0)\) 个数据元素的有限序列。\(n\) 是表长,当 \(n=0\) 时该线性表是一个空表。若用 \(L\) 表示线性表,一般表示为: \[ L=(a_1,a_2,...,a_i,a_{i+1},...,a_n) \] 特点 元素个数有限 元素具有逻辑上的顺序,有先后次序 元素都是数据元素,每个元素都是单个元素 元素数据类型都
ps:第一次用博客园写,记录第一次 一、数据结构第二章主要为:顺序表和链表的构造及其增删查改的一些基本操作,以及粗略计算它们的时间or空间的复杂度。       1、顺序表:                          (1)  特点:逻辑结构上相邻,物理存储上也是相邻的,属于随机存储;                          (2)  优点:便于使用下标进行查找,例如:查找某数组
【1】错误:H->next =NULL 或其他“让指针指向空”的语句运行报错:“ ‘NULL‘ : undeclared identifier”  、 “ ‘=‘ : cannot convert from ‘int‘ to ‘struct node *‘  ” 原因:未引入头文件 #include “stdio.h”  ,把NULL定义为一个空地址是在 stdio头文件中完成的。   【2】 s
Description \(n,q,V\leq 100000,w_i\leq 10^9\) Solution 又是一道大数据结构 由于有一个下取整,这就导致了不同时间的修改值是不能简单的直接加在一起的。 容易发现,1操作的影响只会影响到距离不超过log的点。 这样我们很容易得到一个\(q\log n\log ^2V\)的做法 同一深度的修改有一种套路是维护BFS序。 对于子树内的点,我们将log个
SortSet   有序的Set,其实在Java中TreeSet是SortSet的唯一实现类,内部通过TreeMap实现的;而TreeMap是通过红黑树实现的;而在Redis中是通过跳表实现的; SkipList   跳表,思想类似平衡二叉树,但又不一样;下面摘了一个介绍:   skiplist数据结构简介(摘自:https://www.cnblogs.com/Elliott-Su-Faith-c
堆栈 满足先进后出原则 1、python 描述 # 堆栈 先进后出原则 MAXSTACK = 10 global stack stack = [None] * MAXSTACK top = -1 def is_empty(): if top == -1: return True else: return False
T69293 维护队列 题目描述 Alice 给 Bob 布置了很多工作,他忙的不可开交,决定按照“先进先出(FIFO)”的顺序依次处理这些工作。但是处理过程中,Bob 意识到这种顺序可能不是最优的,因此他会选择性的把某些工作延后。 抽象来说,你需要维护一个队列,支持三种操作: 操作一:1 v,在队尾加入一个价值为 v 的任务。 操作二:2,如果当前队列为空,输出 -1;否则输出队头任务的价值,并
#include <stdio.h> #include "stdlib.h" #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSIZE 1000 // 定义线性表最大容量 typedef int Status; typedef int ElemType; // 定义静态链表的存储结构 t
  今天的内容是带修莫队。 例题:P1903 [国家集训队]数颜色 / 维护队列 题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问。墨墨会向你发布如下指令: 1、 Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔。 2、 R P Col 把第P支画笔替换为颜色Col。 为了满足墨墨的要求,你知道你需要干什么了吗? 输入格式 第1行两个
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSIZE 100 /* 存储空间初始分配量 */ typedef int Status;
  假设我们现在拿到了一个非常大的数组,对于这个数组里面的数字要反复不断地做两个操作。 1、(query)随机在这个数组中选一个区间,求出这个区间所有数的和。 2、(update)不断地随机修改这个数组中的某一个值。 时间复杂度: 枚举: 枚举L~R的每个数并累加。 query:O(n) 找到要修改的数直接修改。 update:O(1) 如果query与update要做很多很多次,query的O(
关于LinkedList的源码关注点 1.从底层数据结构,扩容策略 2.LinkedList的增删改查 3.特殊处理重点关注 4.遍历的速度,随机访问和iterator访问效率对比   1.从底层数据结构,扩容策略 构造函数不做任何操作,只要再add的时候进行数据初始化操作,以操作推动逻辑,而且linkedlist是一个双向链表,所以可以向前向后双向遍历 由于构造函数并没有任何操作,其实这里我们可
没什么别的,就希望自己记住那些函数 1>floyd+bitset优化 #include<cstdio> #include<cstdlib> #include<bitset> using namespace std; int n; const int N=2003; char s[N]; bitset <N> bs[N]; int main() { scanf("%d",&
【数据结构】Hash表 Hash表也叫散列表,是一种线性数据结构。在一般情况下,可以用o(1)的时间复杂度进行数据的增删改查。在Java开发语言中,HashMap的底层就是一个散列表。 1. 什么是Hash表 Hash表是一种线性数据结构,这种数据结构的底层一般是通过数组来实现的。在进行数据增删改查的时候,Hash表首先通过Hash函数对某个键值进行Hash操作,这个Hash操作会将这个键映射到数
点击下载 《数据结构》演示程序
  【基本算法】 假设有一个数组,需要找出某个值在该数组中的位置。 <? //二分查找 function bin_sch($array, $low, $high, $k){     if ($low <= $high){         $mid = intval(($low+$high)/2);         if ($array[$mid] == $k){             retur
 《数据结构》示范程序/图邻接矩阵表示   /*  用图邻接矩阵表示实现的一些基本运算*/   #define MAXVEX 20 #define null -1 typedef char VexType; typedef float AdjType; typedef struct {    VexType vexs[MAXVEX];                 /*  顶点信息 */    
       学习数据结构,对于各种数据结构要熟知其存储的类型,能够很快的写出其结构体, 结构体的成员变量和成员函数,并且能对各种数据结构的基本操作了熟于心,例如线形表、栈和队列,数组,字符串,广义表,树,图等。然后是一些基本的查找和排序,数和图的遍历等等。             暂时的记忆就是这些了。             我在想blog到底是给别人看还是自己用呢???
  1.数据:信息的载体,能被计算机识别、存储和加工处理。 2.数据元素:数据的基本单位,可由若干个数据项组成,数据项是具有独立含义的最小标识单位。 3.数据结构:数据之间的相互关系,即数据的组织形式。 它包括:1)数据的逻辑结构,从逻辑关系上描述数据,与数据存储无关,独立于计算机; 2)数据的存储结构,是逻辑结构用计算机语言的实现,依赖于计算机语言。 3)数据的运算,定义在逻辑结构上,每种逻辑结
人生有时候就是充满了这种悖论。 读书的时候,我们不知道那些课程有用,工作的时候,我们知道了。但已经没有精力去深入学习了。 《数据结构和算法分析》就是这种对开发人员有用的课程。 我毕业之后还购买过一本图书,来深入的学习。 纵观过去的十多年,这门课程的用处可以说无处不在。重要性堪称计算机学科的第一名。 不过,我们开始学习的时候,却很难体会。 有些东西,需要逐步体验。 比如对计算机的定义,实际上,从认知
实验七:排序 一.我的实验选题:排序算法 二.实验主要内容和目的: 将输入的n个数用插入排序、快速排序、选择排序分别重新排列成按一个数据元素某个项值有序的序列。 本实验的目的在于:对于每一种排序,要深刻理解它的思想,熟练掌握排序过程,时间和空间复杂度,最好情况和最坏情况,稳定性如何,适用于什么样的初始序列。掌握重要排序的算法和排序过程,插入排序,快速排序,选择排序。 三.概要设计: (主要模块及相
以前没学过数据结构,找人要了本黄皮的殷人昆《数据结构》。原因有三: 一来和严蔚敏的C语言实现版本(没考虑过外文书,主要英文功底差,不想被语言描述打乱思路)比,C++的面向对象编程确实要方便直观许多; 二来以前没用C++编过程(学点皮毛,没动过手),打算利用学数据结构的时候过一遍最基本的C++知识点; 三来这本书久经中国学生考验,遇到问题网上应该能(我猜的)找到对应的答案。对我这样自己啃的人(每人讨
ftp://202.106.156.143/down/computer/数据结构C语言版视频教程01.rar ftp://202.106.156.143/down/computer/数据结构C语言版视频教程02.rar ftp://202.106.156.143/down/computer/数据结构C语言版视频教程03.rar ftp://202.106.156.143/down/computer
原文来自:http://www.rupeng.com/forum/thread-9132-1-1.html             有同学自学《数据结构》,由于《数据结构》的知识比较多、难点也比较多,但是对于不以通过考试为目的、而已加强软件开发技能的自学者来说,不是所有章节都需要学习,因此下面为这些同学划定一下重点。 针对的教材是《数据结构(C语言版)》(严蔚敏,吴伟民 编著) 下载 (42.32
#include<stdio.h> #include<stdlib.h> #include<conio.h> #define QueueSize 100 typedef char DataType; typedef struct cirqueue {  DataType data[QueueSize];  int front;  int rear;              }CirQueue;
本哈希表类以及相关类属于作者智能内核项目的一个组成部分。为了实现计算机智能化,  需要在超巨量的空间内快速地存储、检索、匹配和修改数据,传统的哈希表算法根本不适用,  而且在很多应用场合需要一种按整数方式自然排序的哈希树容器,但可惜数据结构理论和 实践中都没有。因此作者一直在思索构造适用于这一目的的算法和容器。  我相信,人的大脑神经网络中一定存在一种类似的容器,不同的是基于某种多进制分叉运算的,
冒泡排序的思想与代码描述 思想:它是计算机程序设计中的一种排序方法,在每一次的排序过程中总有一个最大的值被移到后面,值小的就像是水泡一样浮到水面上。 冒泡排序是从最低层的元素开始,用它和它紧挨着的上一个元素比较,如果下面的元素小于上面的元素,就交换它们,否则保持。     代码如下: public class Demo {      public static void main (String
Hi,all。 最近打算把数据结构再好好看一遍,做个总结。 算是给自己提个醒吧。 这里先mark一下~~ 预期:做个简明扼要的总结,希望能把最本质的总结出来          并结合具体的C++实例,方便记忆 有什么意见或建议欢迎提出啊~~~ 共同进步
    线性表(n个数据元素的有限集合)是一种逻辑结构,它的特点:         (1)存在唯一的一个被称做“第一个”的数据元素;         (2)存在唯一的一个被称做“最后一个”的数据元素;         (3)除第一个之外,集合中的每个数据元素均只有一个前驱;         (4)除最后一个之外,集合中每个数据元素均只有一个后继。     线性表的存储结构包括两种:顺序存储、链式存
//Bintree.h #include<stdio.h> #include<malloc.h> typedef struct Binnode{//二叉树结点结构体     char data;     struct Binnode *lchild;     struct Binnode *rchild;   }; typedef Binnode *Bintree ; typedef struct