python之 算法和数据结构
什么是计算机科学?
--首先明确的一点就是计算机科学不仅仅是对计算机的研究,虽然计算机在科学发展的过程中发挥了重大的作用,但是它只是一个工具,一个没有灵魂的工具而已,所谓的计算机科学实际上是对问题,解决问题以及解决问题的过程中产生的解决方案的研究.
意义:
--数据结构和算法思想的通常性异常的强大,在任何语言中都被使用,它们将会是我们编程生涯张伴随我们最长久利器.
--数据结构和算法思想也可以帮助我们扩展和历练编码的思想,可以让我们更好的融入到编程世界的角角落落.
数据结构
栈
--特性:先进后出的数据结构
--栈顶,栈尾
- Stack() 创建一个空的新栈。 它不需要参数,并返回一个空栈。
- push(item)将一个新项添加到栈的顶部。它需要 item 做参数并不返回任何内容。
- pop() 从栈中删除顶部项。它不需要参数并返回 item 。栈被修改。
- peek() 从栈返回顶部项,但不会删除它。不需要参数。 不修改栈。
- isEmpty() 测试栈是否为空。不需要参数,并返回布尔值。
- size() 返回栈中的 item 数量。不需要参数,并返回一个整数
关键字
- class Stack():
- def __init__(self):
- self.items=[]
- def push(self,item):
- self.items.append(item)
- def isEmpty(self):
- return self.items==[]
- def pop(self):
- if self.isEmpty():
- return '空'
- else:
- return self.items.pop()
- def peek(self):
- return self.items[len(self.items)-1]
- def size(self):
- return len(self.items)
- a=Stack()
- a.push(1)
- a.push(2)
- print(a.peek())
- print(a.pop())
- print(a.size())
队列
--特性:先进先出
- Queue() 创建一个空的新队列。 它不需要参数,并返回一个空队列。
- enqueue(item) 将新项添加到队尾。 它需要 item 作为参数,并不返回任何内容。
- dequeue() 从队首移除项。它不需要参数并返回 item。 队列被修改。
- isEmpty() 查看队列是否为空。它不需要参数,并返回布尔值。
- size() 返回队列中的项数。它不需要参数,并返回一个整数。
关键字
- class Queue():
- def __init__(self):
- self.items=[]
- def enqueue(self,item):
- self.items.insert(0,item)
- def isEmpty(self):
- return self.items==[]
- def dequeue(self):
- if self.isEmpty():
- return '空'
- else:
- return self.items.pop()
- def size(self):
- return len(self.items)
- def travel(self):
- print(self.items)
- q=Queue()
- q.enqueue(1)
- q.enqueue(2)
- print(q.size())
- print(q.travel())
双端队列
--同列相比,两个头部和尾部.可以在双端进行数据的插入和删除,提供了单数据结构中栈和队列的特性
- Deque() 创建一个空的新 deque。它不需要参数,并返回空的 deque。
- addFront(item) 将一个新项添加到 deque 的首部。它需要 item 参数 并不返回任何内容。
- addRear(item) 将一个新项添加到 deque 的尾部。它需要 item 参数并不返回任何内容。
- removeFront() 从 deque 中删除首项。它不需要参数并返回 item。deque 被修改。
- removeRear() 从 deque 中删除尾项。它不需要参数并返回 item。deque 被修改。
- isEmpty() 测试 deque 是否为空。它不需要参数,并返回布尔值。
- size() 返回 deque 中的项数。它不需要参数,并返回一个整数。
关键字
- class Dequeue():
- def __init__(self):
- self.items = []
- def addFont(self,item):
- self.items.append(item)
- def addRear(self,item):
- self.items.insert(0,item)
- def isEmpty(self):
- return self.items == []
- def removeFont(self):
- if self.isEmpty():
- return None
- else:
- return self.items.pop()
- def removeRear(self):
- if self.isEmpty():
- return None
- else:
- return self.items.pop(0)
- def size(self):
- return len(self.items)
算法
冒泡排序
- list=[1,4,6,5,2,3]
- # def sort(alist):
- # length = len(alist)
- # for i in range(0,length-1):
- # for j in range(0,length-1-i): #6-1
- # print(list)
- # print(alist[j+1])
- # if alist[j] >alist[j+1]:
- # alist[j],alist[j+1]=alist[j+1],alist[j]
- #
- # sort(list)
- #
- #
- # print(list)
- #思想:每次比较来年各个相邻的元素,如果他们的顺序错误就把他们的位置交换
- #缺点:冒泡排序解决了桶排序浪费空间的问题,但是冒泡排序的效率特别低
选择排序
- list=[1,4,6,5,2,3]
- # def sort(alist):
- # length=len(alist)
- # for j in range(length-1,0,-1):
- # max_index= 0
- # for i in range(1,j+1):
- # if alist[max_index] < alist[i]:
- # max_index = i
- # print(alist[max_index] )
- # alist[max_index], alist[j] = alist[j], alist[max_index]
- #
- # sort(list)
- # print(list)
- #总结:先从列表中,第一个值的后面必需都比他小,,这个位置的值就会与最后一个最小的值交换位置
插入排序
- list=[1,4,6,5,2,3]
- # def sort(alist):
- # length =len(alist)
- # for j in range(1,length):
- # i=j
- # while i>0 :
- # if alist[i] < alist[i - 1]:
- # alist[i], alist[i - 1] = alist[i - 1], alist[i]
- # i -= 1
- # print(list)
- # else:
- # break
- # sort(list)
- # print(list)
- #结论:每回都是两个相邻的值对比,如果前面的值大于后面的值就交换,否则不交换,知道循环完
快排
- def sort(alist,start,end):
- low = start
- high = end
- if low >= high:
- return
- mid = alist[low]
- while low < high:
- while low < high:
- if alist[high] >= mid:
- high -= 1
- else:
- alist[low] = alist[high]
- break
- while low < high:
- if alist[low] < mid:
- low += 1
- else:
- alist[high] = alist[low]
- break
- alist[low] = mid ####
- #在mid左侧列表中递归调用该函数
- sort(alist,start,low-1)
- #mid右侧
- sort(alist,high+1,end)
- sort(list,0,len(list)-1)
- print(list)
python之 算法和数据结构的更多相关文章
- 使用python解决算法和数据结构--使用栈实现进制转换
可以将10进制数据转换成2进制,8进制,16进制等. 晚上练练算法和数据结构哈. # coding = utf-8 class Stack: def __init__(self): self.item ...
- 使用python解决算法和数据结构--使用栈实现符号匹配
现在要自己来实现这些数据结构和常用算法了. 把基础再打牢一些. 栈的作用很大,无须多言. 我尽量看了题目要求,自己来实现代码的. # coding = utf-8 class Stack: def _ ...
- problem-solving-with-algorithms-and-data-structure-usingpython(使用python解决算法和数据结构) -- 算法分析
1. 计算前n个整数的和 def sumOfN(n): theSum = 0 for i in range(1,n+1): theSum += i return theSum print(sumOfN ...
- problem-solving-with-algorithms-and-data-structure-usingpython(使用python解决算法和数据结构) -- 基本数据结构 -- 队列
1. 什么是队列? 队列是项的有序结合,其中添加新项的一端称为队尾,移除项的一端称为队首. FIFO:先进先出 2. 队列抽象数据类型 队列操作如下: Queue() 创建一个空的新队列. 它不需要参 ...
- Python算法与数据结构--求所有子数组的和的最大值
Python算法与数据结构--求所有子数组的和的最大值 玄魂工作室-玄魂 玄魂工作室秘书 玄魂工作室 昨天 题目:输入一个整形数组,数组里有正数也有负数.数组中连续的一个或多个整数组成一个子数组,每个 ...
- python算法与数据结构-算法介绍(31)
一.算法和数据结构 什么是算法和数据结构?如果将最终写好运行的程序比作战场,我们程序员便是指挥作战的将军,而我们所写的代码便是士兵和武器. 那么数据结构和算法是什么?答曰:兵法!故,数据结构和算法是一 ...
- python 下的数据结构与算法---2:大O符号与常用算法和数据结构的复杂度速查表
目录: 一:大O记法 二:各函数高阶比较 三:常用算法和数据结构的复杂度速查表 四:常见的logn是怎么来的 一:大O记法 算法复杂度记法有很多种,其中最常用的就是Big O notation(大O记 ...
- Python 基础算法
递归 时间&空间复杂度 常见列表查找 算法排序 数据结构 递归 在调用一个函数的过程中,直接或间接地调用了函数本身这就叫做递归. 注:python在递归中没用像别的语言对递归进行优化,所以每一 ...
- Python中的高级数据结构详解
这篇文章主要介绍了Python中的高级数据结构详解,本文讲解了Collection.Array.Heapq.Bisect.Weakref.Copy以及Pprint这些数据结构的用法,需要的朋友可以参考 ...
随机推荐
- web前端学习(四)JavaScript学习笔记部分(7)-- JavaScript DOM对象控制HTML元素详解
1.方法 getElementsByName() 获取name 可以获取一个数组类型数据(参数加引号) getElementsByTagName() 获取元素 getAttribute() 获取元 ...
- 组合数学起步-排列计数[ZJOI2010][BZOJ2111]
<题面> 数据范围:$1 \leq N \leq 10^6, P \leq 10^9 $ 这个题…… 以为是排列,其实是组合 题目中说是从所有排列中找到Magic的,就是 $p_{i/2} ...
- Codeforces 222B 数组行列交换操作
/*做完这题发现自己好水,太伤人了.... 不过还是学到一些,如果直接暴力模拟的话肯定是TLM.. 所以要用虚拟数组来分别保存当前数组的每行没列在初始数组中的位置...*/ #include<c ...
- 移动端“响应式布局”’--rem
使用目的:为了让移动设计稿在大部分的移动设备上看起来有一致的展示效果,我们使用rem的像素单位. 方法一: 1.在页面引入js,获取屏幕大小,更新rem基准. (function () { var c ...
- pycharm使用gitlab输错密码解决办法
在pycharm中使用http方式连接gitlab,在测试连接的时候提示输入用户名,密码.密码输错后,以后的每次test都是使用错误的密码,在删除pycharm后也是一样,解决方法是在控制面板\用户帐 ...
- 微服务开源生态报告 No.7
「微服务开源生态报告」,汇集各个开源项目近期的社区动态,帮助开发者们更高效的了解到各开源项目的最新进展. 社区动态包括,但不限于:版本发布.人员动态.项目动态和规划.培训和活动. 非常欢迎国内其他微服 ...
- 强强联合 阿里云 RDS for SQL Server 与 金蝶 K/3 WISE 产品实现兼容适配
强强联合 阿里云 RDS for SQL Server 与 金蝶 K/3 WISE 产品实现兼容适配,原K/3 WISE用户通过简单配置就可以无缝搭配RDS SQL Server使用,不需再费时费力自 ...
- excel一些常用的函数
函数分类: 关联匹配类 清洗处理类 逻辑运算类 计算统计类 时间序列类 一.关联匹配类 经常性的,需要的数据不在同一个excel表或同一个excel表不同sheet中,数据太多,copy麻烦也不准确, ...
- Windows 调用OpenProcess失败
OpenProcess 打开|获得进程句柄 函数原型: HANDLE OpenProcess(DWORD dwDesiredAccess,BOOL bInheritHandle,DWORD dwPro ...
- androidstudio如何用github多人开发
一.首先我们利用github作为代码库,有两种方法可以创建代码库 一定要配置好git环境和创建好github账号 检测git环境配置 检测github账号是否能登录 成功就会 (1)在github中直 ...