数据结构

PYTHON数据结构与算法学习笔记(四)

半腔热情 提交于 2020-03-01 02:31:48
目录 栈 栈结构实现 队列 队列的实现 双端队列 双端队列的实现 栈 栈(stack),也称堆栈,是一种容器,可存入数据元素、访问元素、删除元素,它的特点在于只能允许在容器的一端(称为栈顶端指标,英语:top)进行加入数据(英语:push)和输出数据(英语:pop)的运算。没有了位置概念,保证任何时候可以访问、删除的元素都是此前最后存入的那个元素,确定了一种默认的访问顺序。 由于栈数据结构只允许在一端进行操作,因而按照后进先出(LIFO, Last In First Out)的原理运作。 栈结构实现 栈可以用顺序表实现,也可以用链表实现。 栈的操作 Stack() 创建一个新的空栈; push(item) 添加一个新的元素item到栈顶; pop() 弹出栈顶元素; peek() 返回栈顶元素; is_empty() 判断栈是否为空; size() 返回栈的元素个数。 这里使用顺序表(即python中的list)举例 class Stack ( object ) : def __init__ ( self ) : self . items = [ ] 1、 push(item) 添加一个新的元素item到栈顶 def push ( self , item ) : self . items . append ( item ) 2、 pop() 弹出栈顶元素 def pop (

Python数据结构与算法(一)

▼魔方 西西 提交于 2020-03-01 02:26:31
Python数据结构与算法(一) 引 入 题目:如果a+b+c=1000且a^2+ b^2 =c^2,求出a,b,c可能组合。 方式一: import time start_time = time . time ( ) for a in range ( 0 , 1001 ) : for b in range ( 0 , 1001 ) : for c in range ( 0 , 1001 ) : if ( ( a + b + c ) == 1000 ) and ( a ** 2 + b ** 2 == c ** 2 ) : print ( 'a={},b={},c={}' . format ( a , b , c ) ) end_time = time . time ( ) print ( end_time - start_time ) print ( 'over' ) a=0,b=500,c=500 a=200,b=375,c=425 a=375,b=200,c=425 a=500,b=0,c=500 227.9280366897583 over 方式二: import time start_time = time . time ( ) for a in range ( 0 , 1001 ) : for b in range ( 0 , 1001 ) : c = 1000 - a

Redis——5种数据结构底层实现原理

放肆的年华 提交于 2020-03-01 01:51:32
目录 一、Redis 简介 Redis 的优点 Redis 的安装 测试本地 Redis 性能 二、Redis 五种基本数据结构 1)字符串 string SDS 与 C 字符串的区别 对字符串的基本操作 2)列表 list 链表的基本操作 3)字典 hash 渐进式 rehash 扩缩容的条件 字典的基本操作 4)集合 set 集合 set 的基本使用 5)有序列表 zset 有序列表 zset 基础操作 一、Redis 简介 "Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker." —— Redis是一个开放源代码(BSD许可)的内存中数据结构存储,用作数据库,缓存和消息代理。 (摘自官网) Redis 是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的 Web 应用程序。 Redis 也被作者戏称为 数据结构服务器 ,这意味着使用者可以通过一些命令,基于带有 TCP 套接字的简单 服务器-客户端 协议来访问一组 可变数据结构 。 (在 Redis 中都采用键值对的方式,只不过对应的数据结构不一样罢了) Redis 的优点 以下是 Redis 的一些优点: 异常快 -

leetcode-数据结构-栈和队列

风格不统一 提交于 2020-02-29 23:31:53
232 用栈实现队列 栈的顺序为后进先出,而队列的顺序为先进先出。使用两个栈实现队列,一个元素需要经过两个栈才能出队列,在经过第一个栈时元素顺序被反转,经过第二个栈时再次被反转,此时就是先进先出顺序。 class MyQueue { private Stack < Integer > a ; // 输入栈 private Stack < Integer > b ; // 输出栈 public MyQueue ( ) { a = new Stack < > ( ) ; b = new Stack < > ( ) ; } public void push ( int x ) { a . push ( x ) ; } public int pop ( ) { // 如果b栈为空,则将a栈全部弹出并压入b栈中,然后b.pop() if ( b . isEmpty ( ) ) { while ( ! a . isEmpty ( ) ) { b . push ( a . pop ( ) ) ; } } return b . pop ( ) ; } public int peek ( ) { if ( b . isEmpty ( ) ) { while ( ! a . isEmpty ( ) ) { b . push ( a . pop ( ) ) ; } } return b . peek (

数据结构(一)

浪尽此生 提交于 2020-02-29 22:14:10
数据结构是什么? 数据结构使指数据之间的关系,包含有逻辑结构和存储结构。 逻辑结构分为线性(一对一),树状(一对多),图状(多对多),集合(无明显对应) 存储要正确反应逻辑 常见的存储类型有vector,list,deque等等 数据结构初入门(排序算法) 推荐几个排序总结博客 各种排序算法总结 排序算法总结——时间复杂度与稳定性 关于排序稳定性的定义 通俗地讲就是能保证排序前两个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。在简单形式化一下,如果Ai = Aj,Ai原来在位置前,排序后Ai还是要在Aj位置前。 1.冒泡排序 先码上代码 # include <iostream> # include <cstdio> # include <cmath> # include <ctime> # include <time.h> # include <algorithm> # include <cstring> using namespace std ; void BubbleSort ( int arr [ ] , int length ) { clock_t start , end ; start = clock ( ) ; for ( int i = 0 ; i < length ; i ++ ) { for ( int j = 0 ; j < length -

数据结构:顺序表的实现

为君一笑 提交于 2020-02-29 21:27:19
#include <stdio.h> #include <stdlib.h> #include <string.h> #define N 10 // 链表元素个数最大值 #define ElemType int // 链表数据类型 typedef struct{ ElemType *data; int MaxSize; int length; }SeqList; // 初始化顺序表 void InitList(SeqList &list, int initSize) { list.data = (ElemType*) malloc(sizeof(ElemType) * initSize); for(int i = 0; i < N; i++){ list.data[i] = 0; // 初始化所有数据为0 } list.MaxSize = initSize; list.length = 0; } // 增加顺序表的长度 len void IncreaseList(SeqList &list, int len) { ElemType* tmp = list.data; list.data = (ElemType*) malloc(sizeof(ElemType) * (list.MaxSize + len)); for(int i = 0; i < list.length; i++)

紫薇星上的数据结构(10)

怎甘沉沦 提交于 2020-02-29 16:46:53
终于来到最后一部分了,算法,这篇文章的出现也意味着这个系列就结束了,向着最后的胜利冲冲冲! 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。 这一部分我们要整理的算法一般都是前人已经完善好的,大家如果不能理解其原理,那就学会如何使用就可以了。 简单来说算法就是解决特定问题的求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令都表示一个或者多个操作。这里要注意:同一个问题可能有多种不同的解决算法;没有一个通用算法可以解决所有问题。 一个算法应该具有以下 五个重要的特征 : 有穷性(Finiteness):算法的有穷性是指算法必须能在执行有限个步骤之后终止; 确切性(Definiteness):算法的每一步骤必须有确切的定义; 输入项(Input):一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件; 输出项(Output):一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的; 可行性

数据结构与算法作业——合并两个有序数组

安稳与你 提交于 2020-02-29 14:14:15
题目:给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。 解题算法: class Solution { public : void merge ( vector < int > & nums1 , int m , vector < int > & nums2 , int n ) { int a = m - 1 ; int b = n - 1 ; int l = m + n - 1 ; while ( a >= 0 && b >= 0 ) nums1 [ l -- ] = nums1 [ a ] > nums2 [ b ] ? nums1 [ a -- ] : nums2 [ b -- ] ; while ( b >= 0 ) nums1 [ l -- ] = nums2 [ b -- ] ; //nums2内剩下的元素有序排在新数组的最前面 } } ; 来源: CSDN 作者: SuperF? 链接: https://blog.csdn.net/weixin_46338672/article/details/104571592

数据结构与算法-编写实例

末鹿安然 提交于 2020-02-29 14:02:24
这篇算是学习过程中的备忘录,之前没有好好敲过这门课的代码,现在开始把每节课敲的代码记录下来,方便期末复习和以后使用。 第一节课:线性表的基本操作 #include <cstdio>//C++的编译 #include <cstdlib> #include <iostream>//c++输入输出 using namespace std;//命名空间 #define MAXSIZE 100 #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int Status;// 状态 是个整型 typedef int ElemType; typedef struct{ ElemType *elem;//数据的基地址 int length;//实际长度 }SqList; //1.初始化操作 Status InitList(SqList &L){ //不引用的话,创建可以成功, 但是申请空间给了形参。对参数的值有改变则需要引用,否则都行。 L.elem = new int[MAXSIZE];//MAXSIZE个整形空间 if(L.elem==NULL)//没有申请空间成功,失败 { // printf("fail!"); return ERROR;//exit(OVERFLOW); } L.length=0; return OK; } /

数据结构与算法系列六(栈)

我只是一个虾纸丫 提交于 2020-02-29 13:49:08
1.引子 1.1.为什么要学习数据结构与算法? 有人说,数据结构与算法,计算机网络,与操作系统都一样,脱离日常开发,除了面试这辈子可能都用不到呀! 有人说,我是做业务开发的,只要熟练API,熟练框架,熟练各种中间件,写的代码不也能“飞”起来吗? 于是问题来了:为什么还要学习数据结构与算法呢? #理由一: 面试的时候,千万不要被数据结构与算法拖了后腿 #理由二: 你真的愿意做一辈子CRUD Boy吗 #理由三: 不想写出开源框架,中间件的工程师,不是好厨子 1.2.如何系统化学习数据结构与算法? 我想好了,还是需要学习数据结构与算法。但是我有两个困惑: 1.如何着手学习呢? 2.有哪些内容要学习呢? 学习方法推荐: #学习方法 1.从基础开始,系统化学习 2.多动手,每一种数据结构与算法,都自己用代码实现出来 3.思路更重要:理解实现思想,不要背代码 4.与日常开发结合,对应应用场景 学习内容推荐: 数据结构与算法内容比较多,我们本着实用原则,学习经典的、常用的数据结构、与常用算法 #学习内容: 1.数据结构的定义 2.算法的定义 3.复杂度分析 4.常用数据结构 数组、链表、栈、队列 散列表、二叉树、堆 跳表、图 5.常用算法 递归、排序、二分查找 搜索、哈希、贪心、分治 动态规划、字符串匹配 2.考考你 你还记得在数组那一篇中,我们说过基于线性表的数据结构有哪些吗?它们是:数组