大唐网站首页北京代理记账公司

news/2025/9/22 23:33:47/文章来源:
大唐网站首页,北京代理记账公司,雪樱wordpress主题,别墅装修设计公司哪家好引言 什么是数据结构#xff1f; 数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。 简单来说#xff0c;数据结构就是设计数据以何种方式组织并存储在计算机中。 比如#xff1a;列表#xff0c;集合和字典等都是数据结构 N.W…引言 什么是数据结构 数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。 简单来说数据结构就是设计数据以何种方式组织并存储在计算机中。 比如列表集合和字典等都是数据结构 N.Wirth“程序数据结构算法” 数据结构按照其逻辑结构可分为线性结构、树结构、图结构 线性结构数据结构中的元素存在一对一的互相关系。 树结构数据结构中的元素存在一对多的互相关系。 图结构数据结构中的元素存在多对多的互相关系。 数组 在python中是没有数组的有的是列表它是一种基本的数据结构类型。 实现 classArray(object):def __init__(self, size32)::param size: 长度self._sizesize self._items [None] *size#在执行array[key]时执行 def __getitem__(self, index):returnself._items[index]#在执行array[key] value 时执行 def __setitem__(self, index, value): self._items[index]value#在执行len(array) 时执行 def __len__(self):returnself._size#清空数组 def clear(self, valueNone):for i inrange(len(self._items)): self._items[i]value#在遍历时执行 def __iter__(self):for item inself._items:yield item 使用 a Array(4) a[0] 1 print(a[0]) #1 a.clear()print(a[0]) #None a[0] 1a[1] 2a[3] 4 for i ina:print(i) #1, 2, None, 4 链表 链表中每一个元素都是一个对象每一个对象被称为节点包含有数据域value和指向下一个节点的指针next。 通过各个节点直接的相互链接最终串成一个链表。实现 classNode(object):def __init__(self, valueNone, nextNone): self.value, self.nextvalue, nextclassLinkedList(object):def __init__(self, sizeNone)::param size: int or None, 如果None则该链表可以无限扩充self.sizesize#定义一个根节点 self.root Node()#尾节点始终指向最后一个节点 self.tail_node None self.length0def __len__(self):returnself.lengthdefappend(self, value):#size 不为 None, 且长度大于等于size则链表已满 if self.size and len(self) self.size:raise Exception(LinkedList is full)#构建节点 node Node(value) tail_nodeself.tail_node#判断尾节点是否为空 if tail_node isNone:#还没有 append 过length 0 追加到 root 后 self.root.next nodeelse:#否则追加到最后一个节点的后边并更新最后一个节点是 append 的节点 tail_node.next node#把尾节点指向node self.tail_node node#长度加一 self.length 1 #往左边添加 defappend_left(self, value):if self.size and len(self) self.size:raise Exception(LinkedList is full)#构建节点 node Node(value)#链表为空则直接添加设置 if self.tail_node isNone: self.tail_nodenode#设置头节点为根节点的下一个节点 head_node self.root.next#把根节点的下一个节点指向node self.root.next node#把node的下一个节点指向原头节点 node.next head_node#长度加一 self.length 1 #遍历节点 defiter_node(self):#第一个节点 current_node self.root.next#不是尾节点就一直遍历 while current_node is notself.tail_node:yieldcurrent_node#移动到下一个节点 current_node current_node.next#尾节点 if current_node is notNone:yieldcurrent_node#实现遍历方法 def __iter__(self):for node inself.iter_node():yieldnode.value#删除指定元素 defremove(self, value):#删除一个值为value的节点只要使该节点的前一个节点的next指向该节点的下一个 #定义上一个节点 perv_node self.root#遍历链表 for current_node inself.iter_node():if current_node.value value:#把上一个节点的next指向当前节点的下一个节点 perv_node.next current_node.next#判断当前节点是否是尾节点 if current_node isself.tail_node:#更新尾节点 tail_node #如果第一个节点就找到了把尾节点设为空 if perv_node isself.root: self.tail_nodeNoneelse: self.tail_nodeperv_node#删除节点长度减一删除成功返回1 delcurrent_node self.length- 1 return 1 else: perv_nodecurrent_node#没找到返回-1 return -1 #查找元素找到返回下标没找到返回-1 deffind(self, value): index0#遍历链表找到返回index,没找到返回-1 for node inself.iter_node():if node.value value:returnindex index 1 return -1 #删除第一个节点 defpopleft(self):#链表为空 if self.root.next isNone:raise Exception(pop from empty LinkedList)#找到第一个节点 head_node self.root.next#把根节点的下一个节点指向第一个节点的下一个节点 self.root.next head_node.next#获取删除节点的value value head_node.value#如果第一个节点是尾节点, 则把尾节点设为None if head_node isself.tail_node: self.tail_nodeNone#长度减一删除节点返回该节点的值 self.length - 1 delhead_nodereturnvalue#清空链表 defclear(self):for node inself.iter_node():delnode self.root.nextNone self.tail_nodeNone self.length0#反转链表 defreverse(self):#第一个节点为当前节点并把尾节点指向当前节点 current_node self.root.next self.tail_nodecurrent_node perv_nodeNonewhilecurrent_node:#下一个节点 next_node current_node.next#当前节点的下一个节点指向perv_node current_node.next perv_node#当前节点的下一个节点为空则把根节点的next指向当前节点 if next_node isNone: self.root.nextcurrent_node#把当前节点赋值给perv_node perv_node current_node#把下一个节点赋值为当前节点 current_node next_node 使用 ll LinkedList() ll.append(0) ll.append(1) ll.append(2) ll.append(3)print(len(ll)) #4 print(ll.find(2)) #2 print(ll.find(-1)) #-1 ll.clear()print(len(ll)) #0 print(list(ll)) #[] 循环链表 双链表中每一个节点有两个指针一个指向后面节点、一个指向前面节点。循环链表实现 classNode(object):def __init__(self, valueNone, prevNone, nextNone): self.valuevalue self.prevprev self.nextnextclassCircularDoubleLinkedList(object):双向循环链表 def __init__(self, maxsizeNone): self.maxsizemaxsize nodeNode() node.prevnode node.nextnode self.rootnode self.length0def __len__(self):returnself.lengthdefhead_node(self):returnself.root.nextdeftail_node(self):returnself.root.prev#遍历 defiter_node(self):if self.root.next isself.root:returncurrent_nodeself.root.nextwhile current_node.next is notself.root:yieldcurrent_node current_nodecurrent_node.nextyieldcurrent_nodedef __iter__(self):for node inself.iter_node():yieldnode.value#反序遍历 defiter_node_reverse(self):if self.root.prev isself.root:returncurrent_nodeself.root.prevwhile current_node.prev is notself.root:yieldcurrent_node current_nodecurrent_node.prevyieldcurrent_nodedefappend(self, value):if self.maxsize is not None and len(self) self.maxsize:raise Exception(LinkedList is full) nodeNode(value) tail_node self.tail_node() orself.root tail_node.nextnode node.prevtail_node node.nextself.root self.root.prevnode self.length 1 defappend_left(self, value):if self.maxsize is not None and len(self) self.maxsize:raise Exception(LinkedList is full) nodeNode(value)if self.root.next isself.root: self.root.nextnode node.prevself.root node.nextself.root self.root.prevnodeelse: node.nextself.root.next self.root.next.prevnode self.root.nextnode node.prevself.root self.length 1 defremove(self, node):if node isself.root:returnnode.next.prevnode.prev node.prev.nextnode.next self.length- 1 return node 循环链表的使用 dll CircularDoubleLinkedList() dll.append(0) dll.append(1) dll.append(2)assert list(dll) [0, 1, 2]print(list(dll)) #[0, 1, 2] print([node.value for node in dll.iter_node()]) #[0, 1, 2] print([node.value for node in dll.iter_node_reverse()]) #[2, 1, 0] headnodedll.head_node()print(headnode.value) #0 dll.remove(headnode)print(len(dll)) #2 队列 队列(Queue)是一个数据集合仅允许在列表的一端进行插入另一端进行删除。 进行插入的一端成为队尾(rear)插入动作称为进队或入队。 进行删除的一端称为队头(front)删除动作称为出队。 队列的性质先进先出(First-in, First-out)。基于数组实现环形队列 classArray(object):def __init__(self, size32)::param size: 长度self._sizesize self._items [None] *size#在执行array[key]时执行 def __getitem__(self, index):returnself._items[index]#在执行array[key] value 时执行 def __setitem__(self, index, value): self._items[index]value#在执行len(array) 时执行 def __len__(self):returnself._size#清空数组 def clear(self, valueNone):for i inrange(len(self._items)): self._items[i]value#在遍历时执行 def __iter__(self):for item inself._items:yielditemclassArrayQueue(object):def __init__(self, maxsize): self.maxsizemaxsize self.arrayArray(maxsize) self.head0 self.tail0def __len__(self):return self.head -self.tail#入队 defpush(self, value):if len(self) self.maxsize:raise Exception(Queue is full) self.array[self.head% self.maxsize] value self.head 1 #出队 defpop(self): value self.array[self.tail %self.maxsize] self.tail 1 return value 使用 size 5qArrayQueue(size)for i inrange(size): q.push(i)print(len(q)) #5 print(q.pop()) #0 print(q.pop()) #1 双向队列 两端都可以进行插入删除。基于双向链表实现双向队列 classNode(object):def __init__(self, valueNone, prevNone, nextNone): self.valuevalue self.prevprev self.nextnextclassCircularDoubleLinkedList(object):双向循环链表 def __init__(self, maxsizeNone): self.maxsizemaxsize nodeNode() node.prevnode node.nextnode self.rootnode self.length0def __len__(self):returnself.lengthdefhead_node(self):returnself.root.nextdeftail_node(self):returnself.root.prev#遍历 defiter_node(self):if self.root.next isself.root:returncurrent_nodeself.root.nextwhile current_node.next is notself.root:yieldcurrent_node current_nodecurrent_node.nextyieldcurrent_nodedef __iter__(self):for node inself.iter_node():yieldnode.value#反序遍历 defiter_node_reverse(self):if self.root.prev isself.root:returncurrent_nodeself.root.prevwhile current_node.prev is notself.root:yieldcurrent_node current_nodecurrent_node.prevyieldcurrent_nodedefappend(self, value):if self.maxsize is not None and len(self) self.maxsize:raise Exception(LinkedList is full) nodeNode(value) tail_node self.tail_node() orself.root tail_node.nextnode node.prevtail_node node.nextself.root self.root.prevnode self.length 1 defappend_left(self, value):if self.maxsize is not None and len(self) self.maxsize:raise Exception(LinkedList is full) nodeNode(value)if self.root.next isself.root: self.root.nextnode node.prevself.root node.nextself.root self.root.prevnodeelse: node.nextself.root.next self.root.next.prevnode self.root.nextnode node.prevself.root self.length 1 defremove(self, node):if node isself.root:returnnode.next.prevnode.prev node.prev.nextnode.next self.length- 1 returnnode#双向队列 classDeque(CircularDoubleLinkedList):#从右边出队 defpop(self):if len(self) 0:raise Exception(stark is empty!) tail_nodeself.tail_node() valuetail_node.value self.remove(tail_node)returnvalue#从左边出队 defpopleft(self):if len(self) 0:raise Exception(stark is empty!) head_nodeself.head_node() valuehead_node.value self.remove(head_node)return value 双向队列的使用 dq Deque() dq.append(1) dq.append(2)print(list(dq)) #[1, 2] dq.appendleft(0)print(list(dq)) #[0, 1, 2] dq.pop()print(list(dq)) #[0, 1] dq.popleft()print(list(dq)) #[1] dq.pop()print(len(dq)) #0 栈 栈(Stack)是一个数据集合可以理解为只能在一端插入或删除操作的链表。 栈的特点后进先出(Last-in, First-out) 栈的概念 栈顶 栈底 栈的基本操作 进栈压栈push 出栈pop基于双向队列实现 classNode(object):def __init__(self, valueNone, prevNone, nextNone): self.valuevalue self.prevprev self.nextnextclassCircularDoubleLinkedList(object):双向循环链表 def __init__(self, maxsizeNone): self.maxsizemaxsize nodeNode() node.prevnode node.nextnode self.rootnode self.length0def __len__(self):returnself.lengthdefhead_node(self):returnself.root.nextdeftail_node(self):returnself.root.prev#遍历 defiter_node(self):if self.root.next isself.root:returncurrent_nodeself.root.nextwhile current_node.next is notself.root:yieldcurrent_node current_nodecurrent_node.nextyieldcurrent_nodedef __iter__(self):for node inself.iter_node():yieldnode.value#反序遍历 defiter_node_reverse(self):if self.root.prev isself.root:returncurrent_nodeself.root.prevwhile current_node.prev is notself.root:yieldcurrent_node current_nodecurrent_node.prevyieldcurrent_nodedefappend(self, value):if self.maxsize is not None and len(self) self.maxsize:raise Exception(LinkedList is full) nodeNode(value) tail_node self.tail_node() orself.root tail_node.nextnode node.prevtail_node node.nextself.root self.root.prevnode self.length 1 defappend_left(self, value):if self.maxsize is not None and len(self) self.maxsize:raise Exception(LinkedList is full) nodeNode(value)if self.root.next isself.root: self.root.nextnode node.prevself.root node.nextself.root self.root.prevnodeelse: node.nextself.root.next self.root.next.prevnode self.root.nextnode node.prevself.root self.length 1 defremove(self, node):if node isself.root:returnnode.next.prevnode.prev node.prev.nextnode.next self.length- 1 returnnodeclassDeque(CircularDoubleLinkedList):defpop(self):if len(self) 0:raise Exception(stark is empty!) tail_nodeself.tail_node() valuetail_node.value self.remove(tail_node)returnvaluedefpopleft(self):if len(self) 0:raise Exception(stark is empty!) head_nodeself.head_node() valuehead_node.value self.remove(head_node)returnvalueclassStack(object):def __init__(self): self.dequeDeque()#压栈 defpush(self, value): self.deque.append(value)#出栈 defpop(self):return self.deque.pop() 使用 s Stack() s.push(0) s.push(1) s.push(2)print(s.pop()) #2 print(s.pop()) #1 print(s.pop()) #0 ~.~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/910751.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电子商务类网站建设实训报告lol网站模板

安装(本文以ubuntu系统为例) 单节点设置​ 为了延迟演示分布式环境的复杂性,我们将首先在单个服务器或虚拟机上部署ClickHouse。ClickHouse通常是从deb或rpm包安装,但对于不支持它们的操作系统也有其他方法。 例如,…

建站公司的工作流程购物节优惠卷网站怎么做

63. APP端特有的测试 参考:APP专项测试、APP应用测试 crash和anr的区别 1)网络测试 2)中断测试 3)安装、卸载测试 4)兼容测试 5)性能测试(耗电量、流量、内存、服务器端) 6&#xf…

flash网站片头动画黄冈网站建设报价

目录 一、什么是递归 1.1.递归的思想 1.2.递归的限制条件 二、举例体会 2.1.求n的阶乘 2.2.顺序打印整数的每一位 2.3.斐波那契数列 三、递归与迭代 一、什么是递归 在学习C语言的过程中,我们经常会跟递归打交道,什么是递归呢?它其实…

哪里有专业做网站的网站怎么做宣传

大写数字网今天精心准备的是《123456789a》,下面是详解!html里,怎么把<a>123456789</a>弄到中间来例如把a标签的字移到中间来<a123456789><&#…

鲁斌 42450745 网站建设你需要网站建设

文章目录 场景分析方法的幂等分布式锁Redis实现分布式锁抢锁的设计思路 分布式锁案例 直击面试rocketmq什么时候重复消费消息丢失的问题消息在哪里丢失发送端确保发送成功并且配合失败的业务处理消费端确保消息不丢失rocketmq 主从同步刷盘 场景分析 分布式系统架构中,队列是分…

郑州手机网站制作公司网站开发校园经历范文

第一章 成为一个很厉害的人(持续输入,反复练习) 为什么要学习及如何学习 1、自毁趋势(熵增),故需要能量输入(负熵流) //引申:水往低处流是趋势,学习是逆趋势。 2、持续输入能量(物质和信息),…

专业简历制作网站模板怎么做网站怎么引入广告挣钱

1.项目说明 背景: 着网络技术的不断发展,人们的消费观念在不断变化,消费手段也变得错综复杂。很多人都在困扰,钱到底花在了那里。 目的: 为了解决很多人的钱花在哪了的困扰,我们组决定制作一个消费账单…

多商家在线客服系统 - 客服用户表设计方案

gofly.v1kf.com vx: llike620 ​ 设计分析与建议 针对多商家在线客服系统的客服用户表设计,我分析了您提供的原始设计并提出以下优化建议: 优化要点​​安全增强​​:密码存储改用更安全的bcrypt算法(增加salt字段…

九月22号

今天在课上完成了测试代码的分解 研究了一下原码,补码和反码。原码符号位 + 真值。最高位(最左边的一位)表示符号,0 代表正数,1 代表负数。其余位表示这个数的绝对值。而正数的反码与其原码相同。负数的反码是:其…

购物网站开发教程中文版网络公司可以做哪些业务

Color Image Histograms and equalization with OpenCV - FreedomVC

唐山哪个公司可以制作网站frontpage可以做网站吗

cmd窗口运行jar程序时,在cmd窗口点击了一下,如果你选中了(页面会有个白色的选中内容),java程序就会暂停,这是只有按一下鼠标右键或着CtrlC才能取消选中,程序才会继续运行,如果java程…

罗田企业网站建设wordpress个人博客实战

在Unity中,使用键盘ADWS键控制物体移动,通过鼠标左键控制物体旋转,鼠标中键控制物体缩放是再常见不过的方法。 方法如下: using System.Collections; using System.Collections.Generic; using UnityEngine;public class MoveCo…

海口商城网站建设投资公司注册需要多少钱

文章目录 YUM 升级 PHP71. 查看当前 PHP 信息2. YUM 安装 PHP73. 查看 PHP 版本4. 启动PHP-FPM YUM 升级 PHP7 参考地址:网站地址 参考地址:网站地址 1. 查看当前 PHP 信息 # 查看 PHP 版本信息 php -v# 查看 yum 源中 PHP 信息 yum list | grep php2. …

hao123网站源码制作2015最新仿网站服务器建设

前言 我们之前阐述的内容都是在文件打开的前提下, 但是事实上不是所有文件都是被打开的, 且大部分文件都不是被打开的(也就是文件当前并不需要被访问), 都在磁盘中进行保存. 那这些没有被(进程)打开的文件, 也是需要被管理的! 对于这部分文件核心工作之一是能够快速定位文件…

烟台做网站建设电话建筑工程网络软件

随着全球贸易的不断发展,我国与印度之间的贸易往来也日益频繁。作为两个人口最多的国家之一,中国和印度之间的货物运输需求不断增长。为了满足这一需求,印度货代专线应运而生,为进出口商提供高效、可靠的货物运输服务。本文将探索…

字体模板素材免费下载网站seo优化系统哪个好

文章目录 Arrow, 一个六边形的 Python 时间库第一部分:背景介绍第二部分:库是什么?第三部分:如何安装这个库?第四部分:库函数使用方法第五部分:场景应用第六部分:常见Bug及解决方案第…

网站设计师待遇怎样在凡科网站做网页

// 执行 // 使用你自己的服务器IP与登录账户 export USER_AT_HOST"服务器账户名服务器IP" // PUBKEYPATH是你公钥的路径 export PUBKEYPATH"$HOME/.ssh/id_rsa.pub"ssh-copy-id -i "$PUBKEYPATH" "$USER_AT_HOST"

江苏做网站怎么收费阿里云怎么购买域名

更多干货推荐可以去牛客网看看,他们现在的IT题库内容很丰富,属于国内做的很好的了,而且是课程刷题面经求职讨论区分享,一站式求职学习网站,最最最重要的里面的资源全部免费!!!点击进…

网站开发需求文档怎么写赣州市开发小程序

来源 | 编程技术宇宙责编 | 晋兆雨头图 | 付费下载于视觉中国背景曾经,我面试的时候有两个最怕的。一怕问算法,二怕问高并发。算法这个,自从刷了不少LeetCode,发现还是有套路可循的,虽不敢说算法能力有多强&#xff0c…

深圳品牌建网站网络网站建设公司排名

上篇博文介绍了如何在LINQPad中输出StreamInsight查询结果。这篇文章将主要介绍StreamInsight基础查询操作中的过滤部分。 测试数据准备 为了方便测试查询,我们首先准备一个静态的测试数据源:var weatherData new[] {new { Timestamp new DateTime(201…