自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 资源 (4)
  • 收藏
  • 关注

原创 tensorflow问题:AttributeError: module ‘tensorflow‘ has no attribute ‘placeholder‘

AttributeError: module ‘tensorflow’ has no attribute ‘placeholder’以前遇到了一个问题,tensorflow 1.x和2.x代码不兼容,写下来记录,万一以后用到了。其实这是tensorflow版本问题,在2.x使用了1.x版本的库。所以需要转换一下。查到的一种解决方法是:用下面的代码替换原来的“import tensorflow as tf”。import tensorflow.compat.v1 as tftf.disable_

2020-12-10 09:41:54 3239 1

原创 RuntimeError: Trying to backward through the graph a second time, but the saved intermediate results

在Pytorch练习求梯度时出现错误错误:RuntimeError: Trying to backward through the graph a second time, but the saved intermediate results have already been freed. Specify retain_graph=True when calling backward the first time.因为pytorch求梯度时累加的,所以为了看第二次的梯度需要把以前的清零。x.grad

2020-11-07 17:29:54 10125 12

原创 Python读取csv文件出现解码错误UnicodeDecodeError: ‘utf-8‘ codec can‘t decod

其实是读取文件时默认的编码和解码方式对csv文件中的数据不适用导致的。df = pd.read_csv('catering_sale.csv', encoding = 'gb2312')把encoding换成对应语言的编码方式即可。链接编码方式参考:参考

2020-10-24 10:30:53 1784

原创 Tensorflow版本1.0到2.0版本遇到的问题

遇到的第一个问题就是不同版本代码的不兼容问题。比如:module ‘tensorflow’ has no attribute ‘placeholder’?还有很多2.x版本中没有1.x模块的搜了很多博客,都说的是import tensorflow.compat.v1 as tftf.disable_v2_behavior()但是我这里提示是没有这个compat模块,后来查找到资料说是把代码中调用模块的代码部分tf换成tf.compat.v1,比如下面的。tf.placeholder(type

2020-10-17 11:36:32 720

原创 树结构之节点链接法实现Python

树结构之节点链接法实现Python除了链表嵌套法实现树,最形象就是节点链接法了。每个节点就相当于树的节点,树的节点是要连接的,并且有左子树和右子树,所以就和链表那样,用节点的某个变量保存下一个节点(两个子树),其实树是一个递归的数据结构。首先定义一个树类,并初始化树。只有一个根节点,节点的值为定义时传进来的。因为需要左右两个子树,所以准备两个变量用于保存左右子树的引用。class bin_tree(object): def __init__(self, root_value):

2020-09-06 17:20:10 1764

原创 树结构之嵌套列表法实现Python

树结构之嵌套列表法实现除了队列,栈等数据结构,树也是另一种数据结构。最常见的树结构就是家谱了,从祖先开始,若干个儿子,孙子等等。文件系统也是树结构的应用之一。树用递归的定义来说就是,树有一个根节点,然后(可有可无)有若干个分支(子树),每个子树其实也是一棵树,也有若干个子树。如果每个节点最多有两个分支,那就是二叉树,如果最多有n个分支,那就是n叉树。我才用列表嵌套的方式实现了二叉树。从递归的形式上说树的列表形式是[根节点,左子树,右子树],而每个子树也是一棵树,所以每棵子树也是一个列表。这样的话,初

2020-09-05 12:50:34 550

原创 映射抽象数据类型实现Python

映射抽象数据类型实现映射抽象数据类型是散列的应用之一,因为其散列函数与存储空间的关联,使得查找效率大大提高,但随之而来的是空间利用率的下降。准确的说是一种空间换时间。其实字典也是映射抽象数据类型,因为映射函数的关系,使得存储的数据是无序的。我就简单实现了一下,包括put方法,get方法和dels方法,有了增删改查,其他方法的就简单多了。因为要存储键和值,而又要用到散列,所以散列肯定是和键key有关,对其计算散列值,并将其存储。那么值value怎么存储呢,因为key和value是有关系的,我们可以用

2020-09-05 08:54:11 166

原创 哈希表(散列表)简单介绍

哈希表(散列表)简单介绍参考散列表

2020-09-04 08:13:37 131

原创 排序算法之快速排序Python

排序算法之快速排序介绍一种新的排序算法,快速排序。前面一片文章中介绍了归并排序,简单的说,归并排序是物理意义上的分治法,就是把前面几个位置(下标)上的元素看成一个子序列,后面几个位置(下标)上的元素看成一个子序列。然后再将每个子序列继续分而治之,直到每个子序列只有一个元素,这样作为有序序列向上归并。那么这样做的时间复杂度为O(nlogn),但是空间上需要多备份一份,作为新的序列,空间复杂度为O(n),如果需要排序的数据集特别大,这时候就要仔细考虑一下了。可以思考一种逻辑意义上的分治法,或者说是内容上

2020-09-03 21:05:05 149

原创 排序算法之归并排序Python

排序算法之归并排序介绍一种新的排序算法,归并排序。总的来说,前面介绍了两种排序算法,冒泡排序(选择排序)和插入排序(希尔排序)。冒泡排序是依次两两对比,选取较大的进行比较,时间复杂度均为O(n2);插入排序是依次选取一个元素,将其插入到排好序的有序表中(类似于有序链表的插入操作)。插入排序的是按复杂度也是O(n2)。希尔排序在选择最优的间隔序列后,时间复杂度为O(n^(3/2))归并排序是一种基于分治策略的排序算法。将总的待排序列分成若干个小的子序列,然后分别对其进行排序。排完序后对子序列逐步进行归

2020-09-03 09:18:15 354

原创 排序算法之希尔排序Python

排序算法之希尔排序参考希尔排序和详解希尔排序前面的文章中提到,冒泡排序因为其无用的交换次数比较多,所以改进了一下,采用记忆化方法,即选择排序。那么在插入排序中,可以看出来,如果一个列表是逆序的,其比较次数比较多,相应的赋值次数也比较多(O(n^2)),比如[5,4,3,2,1],第一次插入排序时,5移动到4的位置,第二次插入排序时,5又从4移动到3的位置(同时4从5移动到4的位置),以此类推,直到5移动到1的位置,4移动到2的位置。其实一方面插入排序每次只能一步一步的移动一个位置,另一方面,某些移动

2020-09-02 17:18:11 188

原创 排序算法之插入排序Python

排序算法之插入排序介绍一种新的排序算法,插入排序。先想想一下在玩扑克牌时的动作,当刚开始发完牌时,每个人都需要整理手中的牌,那么我们排序时,就需要从乱序中的牌中拿出一张牌,将这张牌和已经排好序的牌进行比较,从而放到正确的位置。以此类推,直到排好所有的牌。比如,手中有5张牌,无序。首先从这五张牌中随便拿出一张,因为最开始都没有序,所以就直接放(当然实际情况是把最左边的一张牌当做有序的,从四张牌中随便选出一张进行比较)。然后从四张牌中随便拿出一张,和已经排好序的一张牌进行比较,从而形成两张牌的有序列。之后

2020-09-01 18:16:45 139

原创 排序算法之选择排序Python

排序算法值选择排序之前那篇文章的冒泡排序是比较容易理解的,但是实际情况下正常人一般不会这么做的。因为做了太多的无用工作,交换工作。因为并不能确定那个数最终就在那个位置,所以替换工作根本就不需要做。一种改进的思路就是比较完大小之后只需要记住较大的数值的下标即可(当然这适用于顺序表,链表下感觉不是很行得通,因为链表记住后还得逐步遍历,不划算),不用交换。一轮循环完之后,主需要把最后的元素和记住的下标元素进行交换即可。虽然时间复杂度还是O(n^2),但是交换工作不需要做了,还是优化了一点点的。# 选择排

2020-09-01 17:09:46 127

原创 排序算法之冒泡排序Python

排序算法之冒泡排序排序算法主要是对给定的顺序表进行元素排序,升序或者降序。最简单的思路就是两两对比,找出最大的,放到位置上,然后继续在剩下的元素中找出次大的放到位置上,如此往复。这就是冒泡的思想,两两对比,就像水中的一个气泡,逐步浮出水面。接下来详细分析一下,第一次冒泡时,加入有N个元素,那么就需要对比N-1次,找到最大的元素;第二次冒泡时,因为最大的已经找到了,剩下的是N-1个元素,所以需要比较N-1-1次,找到次大的元素,以此类推。那么当找到倒数第二大的元素时(也就是次小元素),还剩下一个元素,

2020-09-01 12:57:21 329 1

原创 查找算法之二分查找(折半查找)Python

查找算法之二分查找(折半查找)对于顺序表中已经排好序的表来说,除了上篇文章中的可以比较大小外,还可以有另外一种思路,就是二分查找。因为已经排好序了,可以直接比较中间值(中位数),如果中位数比要查找的数大,那么要查找的数可能在前半部分(至少不可能在后半部分),因为后半部分一定比中位数大,也一定比要查找的数大。继续,把前半部分当做一个新的有序表,进一步比较中位数,直到找到要查找的数或者不存在。def binary_search(alist, item): first = 0 last

2020-09-01 11:19:03 187

原创 查找算法之顺序查找Python

查找算法之顺序查找查找算法中最直观最容易理解的就是顺序查找了,思路比较简单,就是在顺序表(包括链表)中按次序逐个比较,直到找到或者遍历完线性表。关键点是顺序遍历。def sequentialSearch(alist, item): pos = 0 found = False while pos < len(alist) and not found: if alist[pos] == item: found = True

2020-09-01 10:08:44 419

原创 找零问题之动态规划法求解Python

找零问题之动态规划法求解递归是从后往前逐步判断求解,17元有哪个和哪个组成,而哪个又由–和--组成,其实除了递归求解,也可以换种思路,从前往后逐步递推。从小到大都求出来最优解,逐步递推。而大的最优解一定包含某个小的最优解(注意是某一个,这个是不确定的,用反证法),如果不包含,那必定还有一个解,这个解和最优解一定有一个是最优的,无论哪个都把之前的前提能够推翻。比如,找零17元,面值有1,5,10,25四种金额。和递归一样,只不过是从小到大逐步求解(可以看成是递归的非递归形式)。先求出找零1元的最优解,

2020-08-29 11:25:32 572

原创 找零问题之递归算法求解改进Python

找零问题之递归算法求解改进写在前面,一定要弄清楚,字典的传递传的是引用,是地址!,这个小问题浪费了我将近两个小时。等号复制,dict.copy()和copy模块的deepcopy()方法,这三个要搞清楚。前面提到了递归方法解决找零问题,但是当数值非常大,或者纸币面值种类很多时,程序跑起来就会花费很多时间。我的笔记本配置比较低,面值[1,5,10,25]的,找零63元,需要5分钟所有的时间。其实可以想象,这种递归非常浪费时间。比如拿上一篇文章中的17元来说,简单说一下可以分成一张10元和找零7元

2020-08-28 10:35:18 342

原创 找零问题之递归算法求解Python

找零问题之递归算法求解其实贪心算法得出的结果并不一定是最优解。拿上篇文章中的找零问题来说,如果是找零6元,并且面值为[1,3,4],那么依据算法结果应该是一张4元,两张1元,一共三张。但是实际上两张3元即可。所以贪心算法的到的结果不一定是最优解,取决于实际数据。(实际是“每次选取面值大的纸币不一定使得最终的纸币数量少”)。所以用贪心算法来做是不完美的。简单粗暴的方法就是枚举出所有的方案,对比得出最优的方案。直接枚举而不用递归,暂时想不出来┭┮﹏┭┮。还是用递归吧。思路2:也可以用递归的思想来枚举

2020-08-27 20:31:29 972

原创 找零问题之贪心算法求解Python

找零问题之贪心算法求解贪心算法是基于局部最优原理,将问题分割成若干个小的子问题,然后求解子问题的最优解,这样归并子问题的解,从而求得整个问题的解。当然这个解并不是最优解,只能说是近似最优解,因为局部最优的合并并不一定是全局最优。(贪心算法还有验证解的步骤,这个比较简单,就是把解带入即可)找零问题,比如说售货员需要找给顾客11元,那么当前有10元,5元和1元面值的纸币,如何找给顾客,使得纸币数量最少。思路:显而易见,找的纸币面值越大,那么在(找钱)数值一定的情况下,纸币数量越少。所以,问题就是使

2020-08-26 20:40:06 1469

原创 递归应用之谢尔宾斯基三角形解法2Python

递归应用之谢尔宾斯基三角形解法2上一种方法是逆向思维,将挖掉后的图形看成是三个呈品字形摆放的小三角形,然后递归做。那么如果就正常思路做呢?其实也是比较容易想到的,就是先绘制出大三角形,然后再画出挖掉的图形即可。那么如何如何绘制挖掉的三角形呢?可以看出来,0阶的没有(挖掉的)三角形,一阶的就只有一个三角形,二阶就是在一阶的基础上的每个三角形内有一个三角形。和上一篇文章一样,二阶就是在一阶的基础上每个新生成的三角形,三阶就是在二阶的基础上继续。。。因为是在零阶的基础上画三角形(或者说至少是0阶的),所以一

2020-08-25 20:45:34 495

原创 递归应用之谢尔宾斯基三角形颜色增强Python

递归应用之谢尔宾斯基三角形颜色增强在上一篇文章中介绍了谢尔宾斯基三角形的解法,但是仅仅是黑白色的,不太容易观察,所以可以填充点颜色。比如在绘制三角形的时候填充。def drawTriangle(points): t.fillcolor('yellow') t.penup() t.goto(points['top']) t.pendown() t.begin_fill() t.goto(points['left']) t.goto(points['r

2020-08-25 16:43:50 353

原创 递归应用之谢尔宾斯基三角形Python

递归应用之谢尔宾斯基三角形谢尔宾斯基三角形,就是在一个三角形中挖掉由每条边重点组成的三角形,进而继续再新生成的三个小三角形中继续挖,如此循环。可以想象,如果无线挖下去,极限情况下,最终整个图形周长是正无穷的,面积为0。当然,也可以是立体三维图像,挖掉由每个面的中心组成的三棱锥,这样极限情况下,面积为正无穷,体积为0。谢尔宾斯基三角形如图所示。这是一个五阶的。零阶的就是一个三角形,一阶的就是挖掉一个三角形。其实最开始我是做不出来这道题的,看了教程,看懂了源代码。换种思路想,与其说挖掉一个三角形,不

2020-08-25 16:11:07 2593

原创 递归应用之汉诺塔问题Python

递归应用之汉诺塔问题汉诺塔问题,源于一个印度传说,一位神僧在寺庙里有三个柱子,一个柱子上有64个圆形碟子,要求把64个碟子移动到第三个柱子上,每次只能移动一个碟子,并且小碟子只能在大碟子上面。移动完成之后就是世界末日。其实这个问题,如果是64个碟子,需要移动 2^64-1 次,如果每秒移动一次,需要5千亿多年。那时候世界末不末日就不得而知了。那么简化一下,如果移动3个碟子呢,5个,7个等等?该怎么求解呢?汉诺塔问题可以说是递归中的经典问题了,横向切割问题,将数据集划分成小的规模进而求解。和分治法不

2020-08-24 21:10:40 207

原创 递归应用之分形树构建Python

递归应用之分形树构建分形树,顾名思义,每一支树都是一样的,类似于完全二叉树,子树和母树完全一样。所以可以用递归来实现。思路:所以画一棵树时,画完主干话分支,因为是一样的,所以画分支的过程和画主干的过程完全一样,其实就是一个缩小版的主干。这样一层层递归,直到达到终止条件。先简单的思考一棵树,只有两层,即只有两个分支。过程是:先画主干,画完主干,则再画右分支,画完右分支,退回到分叉点,然后再画左分支。t.forward(branch_len)# 此时海龟的方向为垂直向上,所以右分支只需向右转20度

2020-08-24 10:01:55 442

原创 递归应用之求和、进制转换Python

递归应用之求和、进制转换1.求和:给出一个列表,用递归的方式求和。其实求和也是两个数相加,然后再相加,直到求和完毕。所以可以用递归的方式,每次调用求和函数,直到列表中的数字还有一个,返回即可。def resum(lists): if len(lists) == 1: return lists[0] else: return lists[0] + lists[1:]2.进制转换:进制转换即10进制转换成任意进制。在数学中就是除n取余法,余数逆序排列即可。那么什么时候结束呢,即什么时

2020-08-24 08:46:44 262

原创 队列应用之打印任务Python

队列应用之打印任务题目描述:多人共享一台打印机。在一个实验室内,每一个小时内,平均在场10名学生,每名学生在这一个小时内平均发起两次打印,每次打印的1~20页(概率相同)。打印机打印模式有两种,以草稿模式打印,每分钟打印10页;以标准模式打印(打印质量较好),每分钟打印5页。那么怎么设定打印机的模式,使得大家在不会等太久的情况下提升打印质量?题目分析:这种题可以看出来是不能直接给出结论的,需要一次次模拟程序,不断执行,通过对比结果而得出最终结论。首先来简单看一下题目,分析几个关键点。问题是如何设置打印机

2020-08-20 10:43:26 1063

原创 有序表的实现Python

有序表的实现有序表和无序表类似,唯一的区别就是有序表内存的数据是有序的(可比较大小的,按大小进行排序好的)。那么既然要求是排序好的,所以在增加元素时,就需要额外的操作了,不能像无序表那样直接插入。也就是需要和当前表内的元素比较一下并排序。当然不是全部比较,因为表内的数据已经有序了(假设是从小到大排序),所以只需要找到比要增加的元素大的那个元素位置即可(后面的元素不用再比较了,一定比当前元素大,所以不可能插入到那里),并保留上一个元素的位置,将当前元素插入到两个元素之间即可。 def add(

2020-08-19 14:45:25 303

原创 无序表的实现Python

无序表的实现无序表是一种线性结构,对比有序表(元素的位置是根据其值的大小而设定的),无序表的元素位置不是因为其值的大小而改变。类似于Python中的List。Python中的List是以顺序存储的方式实现的,本文以链式存储的形式实现无序表,所以元素互称为前驱元素,后继元素。无序表的方法主要有增加元素、删除元素、查找元素、无序表大小、是否非空等等。简单实现了几个方法(和c语言实现的方法类似)。以链表的形式实现,就需要有节点node,节点中有两个变量,一个存储当前节点的值,另一个存储下一个节点的对象(

2020-08-19 09:09:44 424

原创 队列应用之热土豆传递问题Python

队列应用之热土豆传递问题热土豆传递问题:假设有N个人,有一个热土豆在这N个人中传递,每经过一个人称为传递一次,假设传递m次,最后在哪个人的手中,该人就出去,然后自动落到下一个人手中。如此往复下去,求最后剩下的那个人(因为只有一个人了,所以不可能再传递下去)?其实这道题就是一个循环判断问题。每次循环时将此时第m个位置的人去掉即可,然后将第m+1个人作为第一个人,继续循环。这个问题用循环队列比较简单。因为在复习队列,所以直接用队列做了。这里换个角度思考一下,因为土豆是传递的,所以它的位置是不断变化的,

2020-08-18 20:36:01 1285 3

原创 双端队列应用之回文词检测Python

双端队列应用之回文词检测回文词就是给定一个字符串,从正序和逆序看是对称的。如“上海自来水来自海上”,“山东落花生花落东山”,“asdfdsa”,“123454321”等等。因为是对称的,一种方法就是判断正序和逆序遍历结果是否一样;另一种方法就是从两端同时读取,判断是否一样,一样则继续深入读取,继续判断,直到遍历完(偶数个字符),或者还剩下中间的那个字符。本文采用第二种方法,应用双端队列的特性进行实现。首先将字符串读入队列,然后双向读取并判断是否相同。(双向队列的实现参考上一篇)def palch

2020-08-18 17:58:00 398

原创 双端队列的实现Python

双端队列的实现双端队列也叫双向队列。也就是两端既可以入队,也可以出队。不过同队列一样,仅仅是在两端进出。同样采用Python的列表来实现双端队列。以list的尾部(逆序下标为-1的位置)作为双端队列的头部,这样,入队就直接append,出队就直接pop;以list的头部(正序下标为0的位置)作为双端队列的尾部,这样入队就insert(0, item),出队就pop(0)。class Deque(object): def __init__(self): self.lt = [

2020-08-18 16:43:57 101

原创 队列的实现Python版

队列实现队列是一个数据结构,它的特性是“线性的”,“只能在一端进入”,“只能在一端输出”。简单而言就是“线性的,一端进(队尾),另一端出(队首)的数据结构”。它主要由入队,出队,是否非空,队列大小四个方法。我用Python列表实现了一下。这里需要注意的是,和实现栈一样,列表也有两端,究竟是哪端作为队首,哪端作为队尾。我是用list的尾部作为队尾,头部作为队首。这样在入队时,直接append即可,复杂度为O(1);出队是list.pop(0),复杂度为O(n)。当然也可尾部作为队首,头部作为队尾,这样入队

2020-08-17 16:16:44 97

原创 后缀表达式求值Python

后缀表达式求值给出一个后缀表达式,用程序求出值后缀表达式就是操作符再操作数的后面,因此可以在扫描字符串的过程中,遇到数字就先保存,遇到操作符,就取出最近的两个操作数,进行计算。因为本次计算可能是其他计算所需要的操作数,所以计算好后要先保存起来。接着继续扫描,直到扫描完成。因为每遇到操作符,就需要提取最近的两个操作数,可以用栈后进先出的特性来做。def postfixeval(postfixExpr): operandStack = Stack() tokenList = postfi

2020-08-17 15:00:26 1068

原创 中缀表达式转后缀表达式Python

中缀表达式转后缀表达式参考的文章就是直接给出了算法,但是算法如何推导出来的还没有弄明白,简单记录下我自己的理解,强行解释一下。后缀表达式就是操作符再操作数的后面,并且计算机能够根据简单的优先级就能进行运算。之前介绍手动形式转换中缀表达式的时候,首先需要把括号按照计算顺序添加完整,形成全括号表达式。如((a+b)*c),然后再向外层移动。可以看出来最终的结果ab+c*,操作数的相对位置是没有改变的。而操作符是仅仅跳出了本层括号。因此对于操作数,可以直接按原顺序排放,对于操作符,先保存起来,(当然,

2020-08-17 10:52:04 304 2

原创 中缀表达式及转换前后缀

这三个表达式的称呼是依据表达式中操作符相对操作数的位置来决定的。例如:a+b+c,这种加号的两个操作数是在加号的两端,这就是中缀表达式;而ab+c+,这种加号的两个操作数在加号的前面(即加号在两个操作数的后面),是后缀表达式;++abc,这种加号在两个操作数的前面,就是前缀表达式。中缀表达式方面人们阅读,但是由于规则和优先级太复杂,计算机如果要读懂中缀表达式就会很麻烦,所以引入了前缀和后缀表达式。能够根据操作符直接进行运算。至于如何引入的,我还没有弄明白,以后再更新。那么计算机如何根据后缀表达式进.

2020-08-16 21:04:24 130

原创 栈应用之十进制转N进制Python

十进制转N进制这个问题比较简单,转换成N进制,就是短除法,即除N取余法,余数逆序排列之后即为最终的结果,也就是最后得到的余数,是最终结果的高位,最开始得到的余数,是最终结果的低位。这样用栈来做比较容易,当然用别的类型也可以,不过下标取值时麻烦点。主要有二进制,八进制和十六进制。需要注意的是,二进制有0和1两个数字,八进制有0~7八个数字,十六进制有0~F十六个数字。首先用Python实现栈。def Stack(object): def __init__(self): self.lt = []

2020-08-16 15:05:01 527

原创 栈应用之括号匹配Python

括号匹配括号匹配就是判断一个字符串中括号是否配对如 “((()))”,“(({([])}))”等等这样就是匹配的。而“())”,“{[}]”这样就不是匹配的。也就是必须成对出现,且没有交叉。那么怎么解决这个问题呢?一个想法就是分别计算各自左右括号的数量,分别对比是否相等。但这样会将括号交叉时的情况误判为正常匹配。进一步观察可以发现,右括号一定是和距离它最近的左括号是一对,否则就是括号交叉了,必定不匹配(比如[{]})。因此,当遇到右括号时,就向回查看,离他最近的一个左括号是否和他属于统一类型的括号,直

2020-08-16 14:44:06 517

原创 栈的实现Python

栈是一种数据结构,它的特性是“线性的”,“只能在一端进行操作”,“后进先出LIFO”可以把栈想象成一座楼,楼的底部就是栈底,顶部就是栈顶。比如说我们在盖一座楼的时候,从一楼开始盖,然后逐步盖二楼,三楼。。。每盖一座楼就相当于入栈,也叫压栈。(换句话说,就是你在入栈的时候,一定是先把数据放在底部,然后逐步向上“叠加”)。(假设拆楼只能从顶楼开始拆),拆楼的时候,拆完顶楼,才能拆次顶楼。也就是只能先把最上面的拆了,逐步向下拆,这个过程就叫出栈,也就弹栈。还有一个形象的例子就是弹夹,装子弹和打枪的时候就相当于

2020-08-15 20:16:15 92

原创 结尾非零数的奇偶性Python

结尾非零数的奇偶性题目描述给你一个正整数列表 L, 判断列表内所有数字乘积的最后一个非零数字的奇偶性。如果为奇数输出1,偶数则输出0.。例如:L=[2,8,3,50]则输出:0思路最简单的方法就是累乘,最后根据结果判断非零数的奇偶性。但是这样和结尾0的个数该题犯了一样的内存错误。其实可以和这道题一样,发现问题的本质。一个数是由许多个因子相乘而来,那么所有的数都可以分解成若干个不能再分解的因子,也就是奇数和偶数(更具体的说是质数相乘)。比如10可以分成1*10,但是10又可以继续再分,所以最终是2

2020-08-12 21:20:23 537

StudentManagerSystem.zip

主要是为了练习Python的基础语法,利用文件作为存储数据库。采用面向对象的思想进行练习,利用了列表字典等数据类型。

2020-08-09

stu_manager.py

大一大二额简单的信息管理系统,控制台程序,主要为了练习Python语法,没有用数据库。用到了列表、异常、循环、分支

2020-07-15

编译原理三级项目pl0扩展

扩展了一些功能,++,--,*=,/=,取反,取余,一维数组,for循环,while循环,write包含换行,可以输出文本等功能,里面有具体的测试例子

2019-04-05

操作系统课程设计生产者消费者

生产者和消费者问题,三个缓冲池,可以自己设置生产者和消费者的个数

2019-04-05

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除