数据结构

数据结构——复习九(排序)

微笑、不失礼 提交于 2020-03-08 06:37:30
排序 稳定排序和不稳定排序 假设Ri=Rj(0<=i,j<=n-1,i≠j),且在排序前的序列中Ri领先于Rj(即i<j),若在排序后的序列中Ri仍领先于Rj,则称所用的排序方法是稳定的,否则是不稳定的。 内部排序:待排序记录存放在内存 外部排序:排序过程中需对外存进行访问的排序 插入排序:直接插入排序、折半插入排序、希尔排序、表插入排序 交换排序:起泡排序、快速排序 选择排序:简单选择排序、堆排序 归并排序:2-路归并排序 分配排序 插入排序 直接插入排序 上面的过程很直观,挺简单的,对我来说比较好理解 //我自己写了一种,还有一种都是一样的,后面那种对理解shell排序比较有帮助 void straisort ( int r [ ] , int n ) { int i , j , k ; for ( i = 2 ; i <= n ; i ++ ) { r [ 0 ] = r [ i ] ; j = i - 1 ; for ( k = 1 ; k <= j ; k ++ ) { if ( r [ 0 ] < r [ k ] ) r [ k + 1 ] = r [ k ] ; else { r [ k + 1 ] = r [ 0 ] ; break ; } } } } void straisort ( int r [ ] , int n ) { int i , j ; for (

python数据结构之列表和元组的详解

烈酒焚心 提交于 2020-03-08 02:33:32
这篇文章主要介绍了python数据结构之列表和元组的详解的相关资料,希望通过本文能帮助到大家,让大家彻底理解掌握这部分内容,需要的朋友可以参考下 python数据结构之 列表和元组 序列:序列是一种数据结构,它包含的元素都进行了编号(从0开始)。典型的序列包括列表、字符串和元组。其中,列表是可变的(可以进行修改),而元组和字符串是不可变的(一旦创建了就是固定的)。序列中包含6种内建的序列,包括列表、元组、字符串、Unicode字符串、buffer对象、xrange对象。 列表的声明: mylist = [ ] 2.列表的操作: (1) 序列的分片: 用法:mylist [ startIndex:endIndex:step ] exam: mylist [ 2:10 ] 检索第2个字符到第10个字符,默认步长为1. mylist [ 2:10:2 ] 检索第2个字符到第10个字符,指定步长为2. mylist [ -2:-1:2 ] 正数索引是相对于首部的坐标,负数是相对于尾部的坐标。其实坐标一定要小于终止坐标,否则返回空的分片。 mylist [ -12:-2:-2 ] 步长也可以是负数,表示从右向左提取元素。 (2) 序列的索引: 用法:mylist [ index ] exam: mylist [ 2 ] mylist [ -2 ] ps:正数是相对于首部的坐标

Python实现数据结构与算法——和为s的连续正数序列

旧街凉风 提交于 2020-03-07 18:39:29
题目描述: 输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。 序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。 示例1: 输入:target = 9 输出: [ [ 2 , 3 , 4 ] , [ 4 , 5 ] ] 示例2: 输入:target = 15 输出: [ [ 1 , 2 , 3 , 4 , 5 ] , [ 4 , 5 , 6 ] , [ 7 , 8 ] ] 限制: 1 <= target <= 10 ^ 5 来源:力扣(LeetCode) 链接: https://leetcode-cn.com/problems/he-wei-sde-lian-xu-zheng-shu-xu-lie-lcof 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 解题思路: 连续正数序列的最大值不会超过target/2 等差序列求和公式,可以求得首末尾正数的关系,记作x和y 从1到int(target/2)遍历x,找出满足使y为整数的x,即x和y为序列的首尾数。代码如下: import math class Solution : def findContinuousSequence ( self , target : int ) : result = [ ] for i in range ( int (

数据结构-数组

你说的曾经没有我的故事 提交于 2020-03-07 17:46:50
  一、数组的概念   定义:数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。   从概念中可以知道一下几点: 数组是线性表。     所谓的线性表就是数据排成一排,想一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。当然除了数组,链表、队列、栈等也是线性表结构        连续的内存空间和形同类型的数据。    正因为有了上述两个特点,数组才能够有一个堪称“杀手锏”的特性:随机访问 数组实现下标随机访问   下面通过一个实际的例子来说明:   例如有一个长度为10的int数组,int[] a = new int[10].      计算机给数组a[10]分配了一块连续的内存空间1000~1039,其中,内存块的首地址为base_address = 1000.   计算机会为每个内存单元分配一个地址,计算机通过地址来访问内存中的数据。当计算即需要随机访问数组中的某个元素的时候,它会首先通过下面的寻址公式,计算该元素存存储的内存地址:            a[i]_address = base_address + i * data_type_size    其中data_type_size表示数组中每个元素的大小。例如,数组中存储的int类型的数据,所以,data_type_size就是4字节。 二、数组的操作  

Redis核心数据结构

偶尔善良 提交于 2020-03-07 14:32:16
五种数据结构 字符串String 哈希Hash 列表List 集合set 有序集合zset 字符串 常用操作 存入字符串键值对 SET key value 批量存储字符串键值对 MSET key value [key value ...] 存入一个不存在的字符串键值对 SETNX key value 获取一个字符串键值 GET key 删除一个键 DEL key [key ....] 设置一个键的过期时间(单位秒) EXPORE key seconds 原子加减 key中存储的数字加1 incrby key key中存储的数字减1 decr key key中存储的数字加n incrby key increment 将key所存储的值减去decrment decrby key decrment 例子: 单值缓存 SET key value get key 来源: CSDN 作者: nier6088 链接: https://blog.csdn.net/qq_35779815/article/details/104711410

数据结构笔记:双端队列

守給你的承諾、 提交于 2020-03-07 11:22:14
原文地址 分类目录——数据结构笔记 双端队列(deque,double-ended queue),是一种具有队列和栈的性质的数据结构。 双端队列中每一端,都可以进行存入和取出,去其中一段,都像一个栈一样。 存取也只限定在两端,不能在中间 双端队列的实现 通过线性表实现 class Dequeue ( object ) : def __init__ ( self ) : '''初始化一个空队列''' self . __list = [ ] def add_front ( self , item ) : '''从队列首添加''' self . __list . insert ( 0 , item ) def add_rear ( self , item ) : '''从队列尾添加''' self . __list . append ( item ) def pop_front ( self ) : '''从队列首删除''' return self . __list . pop ( 0 ) # 时间复杂度O(n) def pop_rear ( self ) : '''从队列尾删除''' return self . __list . pop ( ) def is_empty ( self ) : '''是否空''' return not self . __list def size (

数据结构:矩阵程序C++实现

百般思念 提交于 2020-03-07 08:27:59
#include " SMatrix.h " #include " convert.h " #include < iostream > #include < fstream > #include < string > #include < vector > #include < typeinfo > using namespace std; template < class Type > void Convert( const string & s, Type a[]) { string separate = " ,| " ; vector < Type > vec; int pos = 0 ; int pos2 = 0 ; while ( string ::npos != pos) { pos = s.find_first_of(separate, pos2); if (pos == s.find_last_of(separate)) { if (strcmp(typeid(Type).name(), " int " ) == 0 ) { vec.push_back(atoi(s.substr(pos2, pos - pos2).c_str())); vec.push_back(atoi(s.substr(pos + 1 ).c_str())); } break ; } if (

mysql索引数据结构

你。 提交于 2020-03-07 07:00:55
什么是索引?索引就是排好序的数据结构,可以帮助我们快速的查找到数据 推荐一个网站,可以演示各种数据结构:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html --------------------------------------------------------------- 图解几种数据结构: 二叉树:如果数据是单边增长的情况 那么出现的就是和链表一样的数据结构了,树高度大 红黑树:在二叉树的基础上多了树平衡,也叫二叉平衡树,不像二叉树那样极端的情况会往一个方向发展。 同样我们查找6,在二叉树中我们需要经过6个节点才能找到(1-2-3-4-5-6),红黑树中我们只需要3个节点(2-4-6),但是mysql索引的数据结构并不是红黑树,因为如果数据量大了之后,树的高度就会很大。 B树:在红黑树的基础上,每个节点可以存放多个数据 这个时候我们查找6 只需要2个节点就可以了,而且树的高度也比红黑树矮。 B+树:B树的变种 你会发现非叶子节点是会重复的,就像上面4,在叶子节点上面也出现了4,这是为什么呢?因为它需要在叶子上面存放数据。那又是怎么存放数据的呢? --------------------------------------------------------------- mysql索引为什么用B

数据结构之链表与数组(三)-单向链表上的简单操作

北战南征 提交于 2020-03-07 06:07:18
4 反转单向链表(非递归实现) 思路: 图1 非递归反转链表 如图1所示,假设已经反转了前面的若干节点,且前一段链表的头节点指针为pre,则现在要做的事情是首先保存当前节点cur后面的链表,然后让当前节点cur的指针与后面的节点断开(step1),接下来再将当前节点的next指针指向前一段链表的头节点pre (step2)。处理完当前节点的连接反转后,所有的指针都向后移一位。开始处理下一个节点。 注意点: 1,反转后原来的头节点就变成了反转链表的尾节点,要注意将此结点next指针设为空,否则可能会产生死循环等问题 2,要记得处理链表中没有节点或只有一个的情况。 代码实现: //反转链表(非递归的方式) //输入参数:单链表的头指针 //输出参数:无 //返回值:反转后的单链表指针 SingleList* Reverse_NRecu(SingleList *head) { SingleList *pre,*cur,*lat; //链表中没有节点或只有一个节点 if((head == NULL)||(head->next == NULL)) { return head; } pre = head; cur = head->next; head->next = NULL;//在链表中应该注意边界情况的处理,尾结点一定要为空 lat = cur->next; while(lat !=