双向链表及添加元素

双链表:每个节点有两个链接:一个指向前一个节点,当此节点为第一个节点时,指向空值;而另一个指向下一个节点,当此节点为最后一个节点时,指向空值。

链表节点生成,判空代码实现:

lass Node(object):"""双向链表节点"""def __init__(self, item):self.item = itemself.next = Noneself.prev = Noneclass DLinkList(object):"""双向链表"""def __init__(self):self._head = Nonedef is_empty(self):"""判断链表是否为空"""return self._head == None

头部插入元素代码实现:

  def add(self, item):"""头部插入元素"""node = Node(item)if self.is_empty():# 如果是空链表,将_head指向nodeself._head = nodeelse:# 将node的next指向_head的头节点node.next = self._head# 将_head的头节点的prev指向nodeself._head.prev = node# 将_head 指向nodeself._head = node

尾部插入元素代码实现:

   def append(self, item):"""尾部插入元素"""node = Node(item)if self.is_empty():# 如果是空链表,将_head指向nodeself._head = nodeelse:# 移动到链表尾部cur = self._headwhile cur.next != None:cur = cur.next# 将尾节点cur的next指向nodecur.next = node# 将node的prev指向curnode.prev = cur

指定位置插入元素代码实现:

def insert(self, pos, item):"""在指定位置添加节点"""if pos <= 0:self.add(item)elif pos > (self.length()-1):self.append(item)else:node = Node(item)cur = self._headcount = 0# 移动到指定位置的前一个位置while count < (pos-1):count += 1cur = cur.next# 将node的prev指向curnode.prev = cur# 将node的next指向cur的下一个节点node.next = cur.next# 将cur的下一个节点的prev指向nodecur.next.prev = node# 将cur的next指向nodecur.next = node

双向链表删除元素

查找节点是否存在:(与单链表相同)

 def search(self, item):"""查找元素是否存在"""cur = self._headwhile cur != None:if cur.item == item:return Truecur = cur.nextreturn False

删除元素:

 def remove(self, item):"""删除元素"""if self.is_empty():returnelse:cur = self._headif cur.item == item:# 如果首节点的元素即是要删除的元素if cur.next == None:# 如果链表只有这一个节点self._head = Noneelse:# 将第二个节点的prev设置为Nonecur.next.prev = None# 将_head指向第二个节点self._head = cur.nextreturnwhile cur != None:if cur.item == item:# 将cur的前一个节点的next指向cur的后一个节点cur.prev.next = cur.next# 将cur的后一个节点的prev指向cur的前一个节点cur.next.prev = cur.prevbreakcur = cur.next

单向循环链表遍历和求长度

单向循环链表:尾部指向头节点,其余与单链表相同

栈与队列的概念

栈,一种容器,存放数据

队列,只允许一端添加,另外一端获取

栈的代码实现:

class Stack(object):"""栈"""def __init__(self):self.items = []def is_empty(self):"""判断是否为空"""return self.items == []def push(self, item):"""加入元素"""self.items.append(item)def pop(self):"""弹出元素"""return self.items.pop()def peek(self):"""返回栈顶元素"""return self.items[len(self.items)-1]def size(self):"""返回栈的大小"""return len(self.items)if __name__ == "__main__":stack = Stack()stack.push("hello")stack.push("world")stack.push("itcast")print stack.size()print stack.peek()print stack.pop()print stack.pop()print stack.pop()

队列的代码实现:

class Queue(object):"""队列"""def __init__(self):self.items = []def is_empty(self):return self.items == []def enqueue(self, item):"""进队列"""self.items.insert(0,item)def dequeue(self):"""出队列"""return self.items.pop()def size(self):"""返回大小"""return len(self.items)if __name__ == "__main__":q = Queue()q.enqueue("hello")q.enqueue("world")q.enqueue("itcast")print q.size()print q.dequeue()print q.dequeue()print q.dequeue()

双端队列的代码实现:

class Deque(object):"""双端队列"""def __init__(self):self.items = []def is_empty(self):"""判断队列是否为空"""return self.items == []def add_front(self, item):"""在队头添加元素"""self.items.insert(0,item)def add_rear(self, item):"""在队尾添加元素"""self.items.append(item)def remove_front(self):"""从队头删除元素"""return self.items.pop(0)def remove_rear(self):"""从队尾删除元素"""return self.items.pop()def size(self):"""返回队列大小"""return len(self.items)if __name__ == "__main__":deque = Deque()deque.add_front(1)deque.add_front(2)deque.add_rear(3)deque.add_rear(4)print deque.size()print deque.remove_front()print deque.remove_front()print deque.remove_rear()print deque.remove_rear()

2022.05.19 数据结构与算法_Day04相关推荐

  1. 网页打开DWG图纸,浏览器直接打开CAD图纸,MxDraw云图平台(H5在线cad) 2022.05.19更新

    下载地址:https://www.mxdraw.com/ndetail_30184.html 在线示例:embedmxcadhttps://www.mxdraw3d.com/sample/vuebro ...

  2. 【数据结构和算法05】 红-黑树(转发)

    2019独角兽企业重金招聘Python工程师标准>>> [数据结构和算法05] 红-黑树(看完包懂~) 置顶 2016年04月13日 15:50:25 eson_15 阅读数:526 ...

  3. 数据结构与算法 | Leetcode 19. Remove Nth Node From End of List

    原文链接:https://wangwei.one/posts/jav... 前面,我们实现了 两个有序链表的合并 操作,本篇来聊聊,如何删除一个链表的倒数第N个节点. 删除单链表倒数第N个节点 Lee ...

  4. Java面试必考点第05讲:数据结构与算法

    本课时的主题为数据结构与算法.行业里流行一种说法:程序 = 数据结构 + 算法.虽然有些夸张,但足以说明数据结构与算法的重要性.本课时重点讲解四个知识点: 从搜索树到 B+ 树,讲解与树有关的数据结构 ...

  5. 数据结构与算法:22 精选练习50

    精选练习50 马上就要期末考试或者考研了.为了大家复习的方便,我精选了有关数据结构与算法的50道选择题,大家可以抽空练习一下.公众号后台回复"答案"可以获取该50道题目的答案. 0 ...

  6. 数据结构和算法(Java)-张晨光-专题视频课程

    数据结构和算法(Java)-579人已学习 课程介绍         如果说各种编程语言是程序员的招式,那么数据结构和算法就相当于程序员的内功. 想写出精炼.优秀的代码,不通过不断的锤炼,是很难做到的 ...

  7. 深度搜索和广度搜索领接表实现_数据结构与算法--图的搜索(深度优先和广度优先)...

    数据结构与算法--图的搜索(深度优先和广度优先) 有时候我们需要系统地检查每一个顶点或者每一条边来获取图的各种性质,为此需要从图的某个顶点出发,访遍图中其余顶点,且使得每一个顶点只被访问一次,这个过程 ...

  8. python数据结构和算法 时间复杂度分析 乱序单词检测 线性数据结构 栈stack 字符匹配 表达式求值 queue队列 链表 递归 动态规划 排序和搜索 树 图

    python数据结构和算法 参考 本文github 计算机科学是解决问题的研究.计算机科学使用抽象作为表示过程和数据的工具.抽象的数据类型允许程序员通过隐藏数据的细节来管理问题领域的复杂性.Pytho ...

  9. mysql索引用trie树_数据结构与算法之美【完整版】

    资源目录: ├─01-开篇词 (1讲) │ ├─00丨开篇词丨从今天起,跨过"数据结构与算法"这道坎.html │ ├─00丨开篇词丨从今天起,跨过"数据结构与算法&qu ...

  10. java算法 例 百度云_Java版数据结构与算法(20集版)视频教程百度云下载

    课程目录: 1 Y) C+ M. ~9 S' r7 i  J# _数据结构-Java版(20集)7 {2 h5 w' i9 C' }& }$ J |____第20讲 - 图的最小生成树.avi ...

最新文章

  1. 机器学习虽好,也要看什么场合!
  2. HTML5 Canvas专题
  3. java 1.6.0.11_ubuntu 11.10安装java1.6(转)
  4. 记住密码 的 简要概述_密码错误的简要历史
  5. sql server经典sql
  6. 冒泡排序法和选择排序法
  7. 邮件安全上市公司 Mimecast 的部分源代码被 SolarWinds 黑客盗走
  8. 使用celery出现async的报错的解决方法
  9. [转载] Numpy之logspace
  10. ipad python编程软件_在iPad中运行Python
  11. pytho读文件| python文件去重 | python去除重复行
  12. mysql生成随机中文名_MySQL-随机中文名
  13. 来曲唑十二烷基硫酸钠/苯丁酸氮芥/层状双金属氢氧化物纳米杂化物
  14. 计算机机房装修效果图,机房装修施工流程是什么? 机房装修效果图
  15. 科技云报道:“奇袭”混合云,青云QingCloud站上C位
  16. LeetCode -剑指Offer 06 - 从尾到头打印链表 - java - 细喔
  17. C语言自学完备手册(07)——printf()输出格式详解
  18. c语言百文百鸡问题答案,算法的举例(。。。
  19. weui中的字体图标在IE不显示问题
  20. Linux命令三剑客

热门文章

  1. Java架构学习(七)注解自定义注解设计模式
  2. 行业首个,深度解读深圳超大城市安全标杆项目
  3. 蓝桥杯-糖果(python,dfs,状态压缩和动态规划)
  4. android xml文件写入,将XML文件写入android
  5. 2021年的云计算市场有哪些变化?看数据说话
  6. 北化oj 2104-程序改错 - 字符转换为数字
  7. [筹婚八卦] 两个好人,却没有好婚姻
  8. 电力载波通信G3PLC标准之编码(二)交织
  9. 史上最强superset 使用宝典 ----公司内部使用整理
  10. 相机位姿恢复姿态角和纬经高数据对比分析