Python程序设计教程第8章课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《Python程序设计教程第8章课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Python 程序设计 教程 课件
- 资源描述:
-
1、第第8章章 Python 数据结构数据结构数据结构是计算机存储数据结构是计算机存储和组织数据的方式,指和组织数据的方式,指相互之间存在一种或多相互之间存在一种或多种特定关系的数据元素种特定关系的数据元素的集合。数据结构往往的集合。数据结构往往与高效的检索算法和索与高效的检索算法和索引技术有关。本节介绍引技术有关。本节介绍PythonPython中的一些常用数中的一些常用数据结构的用法,包括栈、据结构的用法,包括栈、队列、树、链表、队列、树、链表、bitmapbitmap和图。和图。本章知识点本章知识点p数据结构基础数据结构基础p队列队列pbitmapbitmapp栈栈p链表链表p图图8.1 P
2、ython数据结构概述数据结构概述8.1.1 8.1.1 什么是数据结构什么是数据结构8.1.2 8.1.2 数据结构和算法的关系数据结构和算法的关系8.1.1 什么是数据结构什么是数据结构p 一个程序里面必然会有数据存在,同样的一个或几个数据要组织一个程序里面必然会有数据存在,同样的一个或几个数据要组织起来,可以有不同的组织方式,也就是不同的存储方式。不同的起来,可以有不同的组织方式,也就是不同的存储方式。不同的组织方式就是不同的结构,我们把这些数据组织在一起的结构称组织方式就是不同的结构,我们把这些数据组织在一起的结构称之为数据的结构,也叫做数据结构。比如,有一个字符串是之为数据的结构,也
3、叫做数据结构。比如,有一个字符串是abcabc,我们将其重新组织一下,比如通过,我们将其重新组织一下,比如通过list()list()函数将函数将abcabc变成变成a,b,ca,b,c,那么这个时候数据就发生了重组,重组之后数据,那么这个时候数据就发生了重组,重组之后数据的结构就变了。的结构就变了。a,b,ca,b,c这种形式的数据的结构被称为列表这种形式的数据的结构被称为列表。也就是说列表是一种数据结构,除此之外,还有元组、字典、。也就是说列表是一种数据结构,除此之外,还有元组、字典、栈、树等数据结构。栈、树等数据结构。p PythonPython的数据结构有很多类型。其中有的数据结构有很
4、多类型。其中有PythonPython系统自己定义好的系统自己定义好的,不需要我们自己去定义。这种数据结构被称为,不需要我们自己去定义。这种数据结构被称为PythonPython的内置数的内置数据结构,比如列表、元组、字典等。而有些数据组织方式,据结构,比如列表、元组、字典等。而有些数据组织方式,PythonPython系统里面没有直接定义,需要我们自己去定义实现,这些系统里面没有直接定义,需要我们自己去定义实现,这些数据组织方式称为数据组织方式称为PythonPython扩展数据结构,比如栈和队列。扩展数据结构,比如栈和队列。8.1.1 弹出消息框弹出消息框使用使用showinfo()sho
5、winfo()函数可以弹出提示消息框,方法函数可以弹出提示消息框,方法如下如下showinfo(title=showinfo(title=标题标题,message=,message=内容内容) )8.1.2 数据结构和算法的关系数据结构和算法的关系数据结构和算法有着密切的联系。因为数据结构数据结构和算法有着密切的联系。因为数据结构是数据的组织方式,也就是数据的存储方式。算是数据的组织方式,也就是数据的存储方式。算法是指运算方法,通俗地讲,算法就是思维。数法是指运算方法,通俗地讲,算法就是思维。数据结构是静态的,我们编写的程序是动态的。程据结构是静态的,我们编写的程序是动态的。程序要对数据进行运
6、算,运算的方法很多,不同的序要对数据进行运算,运算的方法很多,不同的运算方法就是不同的算法。当然算法不是凭空出运算方法就是不同的算法。当然算法不是凭空出来的,它必须建立在数据的基础上,所以数据结来的,它必须建立在数据的基础上,所以数据结构是算法的基础,但同一个数据结构运用不同算构是算法的基础,但同一个数据结构运用不同算法的效率是不同的。法的效率是不同的。8.2 栈栈p8.2.1 8.2.1 栈的工作原理栈的工作原理p8.2.2 8.2.2 利用利用PythonPython列表实现栈的数据结列表实现栈的数据结构构8.2.1 栈的工作原理栈的工作原理栈是一种经典的数据结构,但它并不是栈是一种经典的
7、数据结构,但它并不是PythonPython的内置数据结构,而是属于扩展数据的内置数据结构,而是属于扩展数据结构。栈相当于一端开口、一端封闭的容器结构。栈相当于一端开口、一端封闭的容器。栈支持出栈和进栈。栈支持出栈和进栈2 2种操作。数据移动到栈种操作。数据移动到栈里面的过程叫做进栈,也叫做压栈、入栈;里面的过程叫做进栈,也叫做压栈、入栈;数据进入到栈里面后,就到了栈顶,同时占数据进入到栈里面后,就到了栈顶,同时占了栈的一个位置。当再进入一个数据时,新了栈的一个位置。当再进入一个数据时,新的数据就占据了栈顶的位置,原来的数据就的数据就占据了栈顶的位置,原来的数据就被新的数据压入到栈顶的下一个位
8、置里。栈被新的数据压入到栈顶的下一个位置里。栈只能对其栈顶的数据进行操作,所以这个时只能对其栈顶的数据进行操作,所以这个时候原来的数据就不能被操作。候原来的数据就不能被操作。 初始化时的栈初始化时的栈将数据将数据A执行进栈操作执行进栈操作再将数据再将数据B执行进栈操作执行进栈操作8.2.2 利用利用Python列表实现栈的数据结构列表实现栈的数据结构1. 1. 构造函数构造函数首先,在构造函数中定义一个列表首先,在构造函数中定义一个列表itemsitems用用于实现栈的容器,代码如下:于实现栈的容器,代码如下:#coding:utf8#coding:utf8class Stack:class
9、Stack: 模拟栈模拟栈 defdef _ _initinit_(self):_(self): self.itemsself.items = = 2. isEmpty()函数函数defdef isEmptyisEmpty(self):(self): return return lenlen( (self.itemsself.items)=0 )=0 3. push()函数函数def push(self, item):def push(self, item): self.items.append(item) self.items.append(item)4. pop()函数函数 def pop
10、(self): def pop(self): return self.items.pop() return self.items.pop() 5. peek()函数函数 def pop(self): def pop(self): return self.items.pop() return self.items.pop() 6. size()函数函数 def size(self): def size(self): return len(self.items) return len(self.items) 【例例8-1】s=Stack() #s=Stack() #创建栈对象创建栈对象print(
11、s.isEmpty() #print(s.isEmpty() #打印栈是否为空打印栈是否为空s.push(DataA) #s.push(DataA) #进栈进栈DataADataAs.push(DataB)#s.push(DataB)#进栈进栈DataADataAprint(s.peek()#print(s.peek()#打印栈顶元素打印栈顶元素s.push(DataC)#s.push(DataC)#进栈进栈DataCDataCprint(s.size()#print(s.size()#打印栈的大小打印栈的大小print(s.isEmpty() #print(s.isEmpty() #打印栈是
12、否为空打印栈是否为空s.push(DataD)#s.push(DataD)#进栈进栈DataDDataDprint(s.pop()#print(s.pop()#出栈出栈print(s.pop()#print(s.pop()#出栈出栈print(s.size()#print(s.size()#打印栈的大小打印栈的大小) )8.3 队列队列队列是一种经典的数据结构,它也不是队列是一种经典的数据结构,它也不是PythonPython的的内置数据结构,而是属于扩展数据结构。队列相内置数据结构,而是属于扩展数据结构。队列相当于两边都开口的容器。但是一边只能进行删除当于两边都开口的容器。但是一边只能进行删
13、除操作,而不能进行插入操作;另一边只能进行插操作,而不能进行插入操作;另一边只能进行插入操作,而不能进行删除操作。进行插入操作的入操作,而不能进行删除操作。进行插入操作的这一端叫做队尾,进行删除操作的这一端叫做队这一端叫做队尾,进行删除操作的这一端叫做队首。所以,队列中的数据是从队尾进队首出的。首。所以,队列中的数据是从队尾进队首出的。队列的数据元素又称为队列元素。在队列中插入队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列一个队列元素称为入队,从队列中删除一个队列元素成为出队。元素成为出队。初始化时的队列初始化时的队列将数据将数据A执行入队操作执行入队操作
14、将数据将数据B执行入队操作执行入队操作再将数据再将数据C执行进栈操作执行进栈操作再将数据再将数据C执行进栈操作执行进栈操作将数据将数据A执行出队操作执行出队操作8.3.2 利用利用Python列表实现队列的数列表实现队列的数据结构据结构本节介绍一个本节介绍一个PythonPython自定义类自定义类QueueQueue,它的功能,它的功能是利用是利用PythonPython列表实现队列的数据结构。列表实现队列的数据结构。1. 构造函数构造函数#coding:utf8#coding:utf8class Queue(object) :class Queue(object) : def _init_
15、(self) : def _init_(self) : self.queue = self.queue = 2. isempty()函数函数isemptyisempty()()函数用于判断队列是否为空。如果函数用于判断队列是否为空。如果队列为空,则队列为空,则isemptyisempty()()函数返回函数返回TrueTrue,否则,否则返回返回FalseFalse。isemptyisempty()()函数的代码如下:函数的代码如下: defdef isemptyisempty(self) :(self) : return return self.queueself.queue = = 3.
16、enqueue()函数函数 def enqueue(self, item) : def enqueue(self, item) : self.queue.append(item) self.queue.append(item)4. dequeue()函数函数 def dequeue(self) : def dequeue(self) : if self.queue != : if self.queue != : return self.queue.pop(0) return self.queue.pop(0) else : else : return None return None5. he
17、ad ()函数函数head ()head ()函数用于返回队首元素,但并不删函数用于返回队首元素,但并不删除该元素。代码如下:除该元素。代码如下: defdef head(self) : head(self) : if if self.queueself.queue != : != : return return self.queueself.queue00 else : else : return None return None 6. tail ()函数函数tail ()tail ()函数用于返回队尾元素,但并不删除该函数用于返回队尾元素,但并不删除该元素。代码如下:元素。代码如下: de
18、fdef tail(self) : tail(self) : if if self.queueself.queue != : != : return return self.queueself.queue-1-1 else : else : return None return None7. length()函数函数length()length()函数用于返回队列的大小。代码如下:函数用于返回队列的大小。代码如下: defdef length(self) : length(self) : return return lenlen( (self.queueself.queue) ) 【例【例8-
19、2】q=Queue() #q=Queue() #创建队列对象创建队列对象print(print(q.isemptyq.isempty() #() #打印队列是否为空打印队列是否为空q.enqueueq.enqueue(DataADataA) #) #入队入队DataADataAq.enqueueq.enqueue(DataBDataB)#)#入队入队DataADataAprint(print(q.headq.head()#()#打印对首元素打印对首元素print(print(q.tailq.tail()#()#打印队尾元素打印队尾元素q.enqueueq.enqueue(DataCDataC)
20、#)#入队入队DataCDataCprint(print(q.lengthq.length()#()#打印队列的大小打印队列的大小print(print(q.isemptyq.isempty() #() #打印队列是否为空打印队列是否为空q.enqueueq.enqueue(DataDDataD)#)#入队入队DataDDataDprint(print(q.dequeueq.dequeue()#()#出队出队print(print(q.dequeueq.dequeue()#()#出队出队print(print(q.lengthq.length()#()#打印队列的大小打印队列的大小) )运行结
21、果如下:运行结果如下:TrueTrueDataADataADataBDataB3 3FalseFalseDataADataADataBDataB2 28.4 树树p8.4.1 8.4.1 树的工作原理树的工作原理p8.4.2 8.4.2 遍历二叉树遍历二叉树p8.4.3 8.4.3 在在PythonPython程序中实现树的数据结程序中实现树的数据结构构8.4.1 树的工作原理树的工作原理p树的定义首先有且只有一个根节点,另树的定义首先有且只有一个根节点,另外他有个不相交的子集,每个子集都外他有个不相交的子集,每个子集都是一个子树。是一个子树。空树空树只有一个根结点的二叉树只有一个根结点的二叉
22、树 有左子树的二叉树有左子树的二叉树只有右子树的二叉树只有右子树的二叉树2完全二叉树完全二叉树8.4.2 遍历二叉树遍历二叉树p “遍历遍历”是二叉树各种操作的基础。二叉树是一种非是二叉树各种操作的基础。二叉树是一种非线性结构,遍历二叉树不像遍历线性链表那样容易,线性结构,遍历二叉树不像遍历线性链表那样容易,无法通过简单的循环实现。无法通过简单的循环实现。p 遍历二叉树就是要让树中的所有节点被且仅被遍历二叉树就是要让树中的所有节点被且仅被访问一次,即按一定规律排列成一个线性队列。二叉访问一次,即按一定规律排列成一个线性队列。二叉树包含树包含3 3个部分,即根结点、左子树和右子树。根据这个部分,
23、即根结点、左子树和右子树。根据这3 3个部分的访问次序对二叉树的遍历进行分类,可以将个部分的访问次序对二叉树的遍历进行分类,可以将遍历二叉树的方法分为遍历二叉树的方法分为3 3种类型,分别称为种类型,分别称为“先序遍历先序遍历”、“中序遍历中序遍历”和和“后序遍历后序遍历”。先序遍历指先访。先序遍历指先访问根节点,然后再访问左子树,最后访问右子树;中问根节点,然后再访问左子树,最后访问右子树;中序遍历指访问左子树,然后再访问根节点,最后访问序遍历指访问左子树,然后再访问根节点,最后访问右子树;中序遍历指先访问根节点,然后访问左子树右子树;中序遍历指先访问根节点,然后访问左子树,最后访问右子树;
24、后序遍历指访问左子树,然后再,最后访问右子树;后序遍历指访问左子树,然后再访问右子树,最后访问根节点。访问右子树,最后访问根节点。8.4.3 在在Python程序中实现树的数据结构程序中实现树的数据结构本节介绍一个本节介绍一个PythonPython自定义类自定义类BinaryTreeBinaryTree,它的功能是在,它的功能是在PythonPython程序中实现树的数据结构。程序中实现树的数据结构。1. 定义树节点类定义树节点类Node首先,定义一个树节点类首先,定义一个树节点类NodeNode,代码如下:,代码如下:class Node(object):class Node(object
25、): def _init_(self, data = -1, lchild = None, def _init_(self, data = -1, lchild = None, rchild = None):rchild = None): self.data = data self.data = data self.lchild = lchild self.lchild = lchild self.rchild = rchild self.rchild = rchild2. BinaryTree 类的构造函数类的构造函数p class BinaryTree(object): class Bin
展开阅读全文