数据结构

STL——容器概述

老子叫甜甜 提交于 2020-04-07 02:23:26
在实际的开发过程中,数据结构本身的重要性完全不逊于算法的重要性,当程序中存在着对时间要求很高的部分时,数据结构的选择就显得更加重要。 试想:如同栈一样的一条死胡同里停车,这样的效率会很高吗? 经典的数据结构数量有限,但是在项目实战中,我们常常重复着一些为了存放不同数据结构类型而实现顺序表、链表等结构而重复编写的代码,这些代码都十分相似,只是为了适应不同数据类型的变化而在细节上有所出入。STL容器就为我们提供了这样的方便,它允许我们重复利用已有的实现,构造自己的特定类型下的数据结构,通过设置一些模板,STL容器对最常用的数据结构提供了支持,这些模板的参数允许我们指定容器中元素的数据类型,避免重复编码。 容器部分主要有:<vector> <list> <deque> <set> <map> <stack> <queue>组成。 下面是常用的一些容器,可以通过下表总结一下它们和相应头文件的对应关系。 来源: https://www.cnblogs.com/CooCoChoco/p/12650935.html

数据结构(C语言版)第九章:堆结构

不想你离开。 提交于 2020-04-06 21:31:42
9.1 最小-最大堆 双端优先队列是一种支持如下操作的数据结构: 1. 插入一个具有任意关键字值的元素. 2. 删除关键字值最大的元素. 3. 删除关键字值最小的元素. 当仅支持插入和其中的一种删除操作时,可以采用最大堆或者最小堆.而最小-最大堆可以同时支持上述全部操作. 定义:最小-最大堆是一个满足如下条件的完全二叉树:该二叉树不为空,其上的每个元素都有一个称为关键字的域.二叉树的各层交替为最小层和最大层,且根结点位于最小层.设x是最小-最大堆的任意一个节点,如果x位于最小层,那么x就是以x为根结点的二叉树中关键字最小的结点,称该结点为最小结点.类似地,如果x位于最大层,那么x就是以x为根结点的二叉树中关键字值最大的结点,称该结点为最大结点. 9.1.2 最小-最大堆插入 #include <stdio.h> #include <math.h> #include <string.h> #define MAX_SIZE 100 //备注:这里下标从1开始 void swap( int *px, int *py ); /*最小-最大堆的插入*/ void min_max_insert( int heap[], int len, int item ); /*判断父结点是在最小堆还是最大堆,若是最小堆返回0,最大堆返回1*/ int level( int parent ); /

Redis数据结构——skiplist

拈花ヽ惹草 提交于 2020-04-06 19:53:51
跳跃表(skiplist)是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。 跳跃表支持平均O(logN),最坏O(N)复杂度的节点查找,还可以通过顺序性操作批量处理节点。 在大部分情况下,跳跃表的效率可以和平衡树相媲美,并且因为跳跃表的实现比平衡数要来得更为简单,所以有不少程序都使用跳跃表来代替平衡树。 redis 使用跳跃表作为有序集合键的底层实现之一,如果一个有序集合包含的元素数量比较多,又或者有序集合中元素的成员(member)是比较长的字符串时,Redis就会使用跳跃表作为有序集合键的底层实现。 和链表,字典等数据结构被广泛地应用在Redis内部不同,Redis只有两个地方用到了跳跃表,一个是实现有序集合键,另一个是在集群节点中用作内部数据结构,除此之外,跳跃表在Redis里面没有其他用途。 /* ZSETs use a specialized version of Skiplists */ typedef struct zskiplistNode { robj *obj; //成员对象 double score; //分值 struct zskiplistNode *backward; //后退指针 struct zskiplistLevel { //层 struct zskiplistNode *forward; /

数据结构1-05-树9 Huffman Codes

泪湿孤枕 提交于 2020-04-06 19:07:45
1 #include<stdio.h> 2 #include<string.h> 3 #define MAXN 1001 4 struct node{ 5 int data,left,right,parent; 6 node(){ 7 data = -1; 8 left = -1; 9 right=-1; 10 parent=-1; 11 } 12 }; 13 struct node huffT[MAXN],testT[MAXN]; 14 char c[MAXN],a[MAXN]; 15 int f[MAXN],heap[MAXN],m,n,WPL; 16 void read(); 17 void insert(int x); 18 int del(); 19 void Cwpl(); 20 int test(); 21 int main(){ 22 int i; 23 24 read(); 25 for(i=1;i<=m;i++){ 26 if(test()==1) printf("Yes\n"); 27 else printf("No\n"); 28 } 29 return 0; 30 } 31 void read(){ 32 int i; 33 scanf("%d",&n); 34 heap[0] =0; 35 for(i=1;i<=n;i++){ 36 getchar();

数据结构之顺序表的实现

瘦欲@ 提交于 2020-04-06 19:02:41
数据结构之顺序表的实现 一、原理 1.定义 顺序表是在计算机中以数组形式保存的。 2.特点 在计算机中占用连续的一段内存 一旦声明,空间大小一般不变 二、初始化相关操作 包括: 结构体的定义 顺序表的创建 顺序表清空 判断顺序表是否为空 1.结构体定义 即定一个满足顺序表定义的结构体,其中包含 数组、存储长度、总长度。 typedef int ElemType; //将int抽象为ElemType,表明顺序表也可以存储其他类型(如将int改为char) struct List { ElemType *list; //声明数组用于给顺序表存储数据,等价于以下声明方式 //ElemType[] list; int length; //用于记录顺序表存储的数据长度 int MaxSize; //用于记录顺序表最大长度(即最多存储数据) } 2.初始化 对顺序表进行初始化,包括分配自定义长度的数组空间,设定存储长度为0,存储长度为规定值 //初始化,传入需要初始化的顺序表和初始化长度 void InitList(struct List *L,int maxSize){ //初始化长度合法性判断 if(maxSize<0){ printf("初始化长度非法!\n"); exit(1); //退出程序 } //对顺序表长度进行赋值 L->MaxSize = maxSize; /

北京大学公开课《数据结构与算法Python版》

不羁的心 提交于 2020-04-06 18:48:09
之前我分享过一个数据结构与算法的课程,很多小伙伴私信我问有没有Python版。 看了一些公开课后,今天特向大家推荐北京大学的这门课程:《数据结构与算法Python版》。 课程概述 很多同学想要转行机器学习,也确实掌握了一些机器学习模型原理并具备基础的编程功底,但是在笔试、面试的时候还会掉链子,大概率是数据结构和算法知识薄弱。数据结构和算法是程序员的内功心法和基本功。无论是人工智能还是其它计算机科学领域,掌握扎实的数据结构和算法知识,往往会助力不少! 北京大学公开课《数据结构与算法Python版》,面向具有Python语言程序设计基础的大学生和社会公众,介绍常见的基本数据结构以及相关经典算法,强调问题-数据-算法的抽象过程,关注数据结构与算法的时间空间效率,培养学生编写出高效程序,从而解决实际问题的综合能力。 这门课程在中国大学MOOC正在进行第二次开课,已进行至第五周,心急的同学也可以直接看第一次开课的完整版,变化不大。 慕课: http://www.icourse163.org/course/0809PKU068-1206307812 B站: https://www.bilibili.com/video/BV1h7411m7BK/ 去B站围观陈斌老师 本课程主讲是陈斌老师,陈老师是北京大学地球与空间科学学院教师,博士,副教授,硕士生导师。主讲本科生课程《数据结构与算法

数据结构期末总结

谁说胖子不能爱 提交于 2020-04-06 17:03:31
数据结构期末总结 16周的学习结束了,在这16周里,我体验到了一种新的学习方式。对我来说,课堂上的重点难点重温,以及小组间的“画一画”环节对我的帮助挺大的。让我对线性表、栈、链表以及二叉树等有了更深刻的了解。回想起来,最后课上利用纸牌理解排序方式的学习方法,我有很深的印象。 一开始的线性表我是在好奇中学习的,一种全新的上课方式,我感到很新奇。而到后来,课下看视频预习也成了一种习惯,虽然有好几次都没有按时把本周所有的视频都仔细看完,但了解到了大体的基础知识以后,在课上就不至于太被动的接受知识,而是巩固,提高。 对于本学期对数据结构的学习,到现在为止,我的总体感觉就是掌握的还不够系统,我还需要把所有的知识系统化的学习一遍,课件以及视频应该会给我很大的帮助。 也挺感谢老师给了我们小组成员间合作的机会,让我们在交流中更高效的学习。各个数据库的应用我是在课后实践中熟悉的,几次变换,竟能如此灵活的应用,很受启发。我会将这种积极的态度继续保持下去,对我今后的学习生活应该会有很大的帮助。 目前,我对一些算法掌握的并不是很好,我希望通过我的期末复习,我会把遗留下的疑点解决好。这一学期通过对数据结构的学习,我知道了算法的重要性,相信在今后的实际应用中会起到非常重要的作用。 对于排序算法的学习,我掌握的不够好,我会加强练习的。 点赞 收藏 分享 文章举报 qq_39837019 发布了45 篇原创文章

【数据结构与算法】动态规划——最小路径和(普通矩阵、三角形两题)

◇◆丶佛笑我妖孽 提交于 2020-04-06 13:00:27
最小路径和 LeetCode: 最小路径和 题目描述: 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例: 输入: [ [1,3,1], [1,5,1], [4,2,1] ] 输出: 7 解释: 因为路径 1→3→1→1→1 的总和最小。 思想: 动态规划,可以用原数组作为dp数组 代码: class Solution { public int minPathSum(int[][] grid) { int i=0,j=0; for(i=0;i<grid.length;++i){ for(j=0;j<grid[0].length;++j){ if(i>0&&j>0){ grid[i][j]+= Math.min(grid[i-1][j],grid[i][j-1]); }else{ grid[i][j]+= (i==0?0:grid[i-1][j]) + (j==0?0:grid[i][j-1]); } } } return grid[i-1][j-1]; } } 三角形最小路径和 LeetCode: 三角形最小路径和 题目描述: 给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。 如果你可以只使用 O(n) 的额外空间(n 为三角形的总行数)来解决这个问题

数据结构概述

≡放荡痞女 提交于 2020-04-06 10:36:34
数据结构 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。 常用结构 数组: 在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。 栈: 是只能在某一端插入和删除的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。 队列: 一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列是按照“先进先出”或“后进后出”的原则组织数据的。队列中没有元素时,称为空队列。 链表: 是一种物理存储单元上非连续、非顺序的存储结构,它既可以表示线性结构,也可以用于表示非线性结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成

Redis 简介

蓝咒 提交于 2020-04-06 09:30:49
Redis 是一种基于键值对(key-value)的NoSql 数据库。Redis 中的值可以是由string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)、HyperLogLog、GEO(地理信息定位)等多种数据结构和算法组成,因此Redis 可以满足很多场景的应用。而且,因为Redis 会将所有数据都存放在内存中,所以它的读写性能非常惊人。不仅如此,Redis 还可以将内存的数据利用快照和日志的形式保存到硬盘上,这样在发生类似断电或者机器故障的时候,内存中的数据不会 “丢失” 。除了上述功能以外,Redis 还提供了键过期、发布订阅、事务、流水线、Lua 脚本等附加功能。 Redis 特性 1.速度快 官方给出的数字是读写性能可以达到10万/秒,当然这也取决于机器的性能。大致归纳速度快的四点原因如下: # Redis 的所有数据都是放在内存中的,这也是最主要的原因; # Redis 是用C 语言实现的,“距离” 操作系统更近,执行速度相对会更快; # Redis 使用了单线程架构,预防了多线程可能产生的竞争问题; # 源代码精细,集性能与优雅与一身; 2.基于键值对的数据结构服务器 与很多键值对数据库不同的是,Redis 中的值不仅可以是字符串,而且还可以是具体的数据结构,这样不仅便于在许多应用场景开发