线性表

顺序表

功能参考Python的list
特点:

  1. O(1)时间的定位元素访问
  2. 添加、删除操作代价高

链表

单向链表

实现:

class LNode:def __init__(self, data, next_=None):self.data = dataself.next = next_class LList:"""单链表"""def __init__(self, node=None):  # 使用一个默认函数,接收传入的节点,若无传入,则默认头节点为空self.__head = node# 判断是否为空def is_empty(self):return self.__head == None# 头部添加节点def add_node(self, data):node = LNode(data)node.next = self.__headself.__head = node# 尾部添加节点def append_node(self, data):node = LNode(data)# 判断链表首付为空if self.is_empty():self.__head = node# 若不为空则创建一个游标 来指向节点位置else:cur = self.__headwhile cur.next:cur = cur.nextcur.next = node# 向指定位置插入节点def insert_node(self, i, data):if i < 0:self.add_node(data)elif i > self.length - 1:self.append_node(data)else:node = LNode(data)index = 0cur = self.__head# 循环找到要插入位置的前一个节点while index < i - 1:index += 1cur = cur.nextnode.next = cur.nextcur.next = node# 遍历节点(打印)def travel_llist(self):if self.is_empty():print('[]')else:cur = self.__headindex = 0while index < self.length:print(cur.data)if index < self.length - 1:cur = cur.nextindex += 1# 按位置删除某个节点 默认列表从0开始def remove_node(self, i):if 0 <= i < self.length:cur = self.__headindex = 0if i == 0:self.__head = cur.nextelif i == self.length - 1:while index < self.length - 2:cur = cur.nextindex += 1cur.next = Noneelse:while index < i - 1:cur = cur.nextindex += 1cur.next = cur.next.nextelse:print("i无效")# 判断是否存在某个值,返回其坐标:def is_exist(self, value):cur = self.__headindex = 0while cur:if cur.data == value:return indexelse:cur = cur.nextindex += 1return False# 按值删除某个节点def remove_node_by_value(self, value):cur = self.__headpre = Nonewhile cur:if cur.data == value:# 找到了指定元素if not pre: # 第一个就是self.__head = cur.nextelse:# 将删除位置前一个节点的next指向删除位置的后一个节点pre.next = cur.nextbreakelse:# 继续按链表后移节点pre = curcur = cur.next@propertydef length(self):len_list = 0# 创建游标cur = self.__headwhile cur is not None:len_list += 1cur = cur.nextreturn len_list# 测试
def main():llist = LList()llist.add_node(4)llist.add_node(5)llist.append_node(5)llist.append_node(6)llist.append_node(10)llist.append_node(6)llist.insert_node(2, 7)llist.append_node(8)llist.insert_node(3, 9)s = llist.is_exist(6)print(s)print('llist.length', llist.length)llist.travel_llist()

双向链表

实现

class DNode:def __init__(self, data, prev_=None, next_=None):self.data = dataself.prev = prev_self.next = next_class DList:"""双向链表"""def __init__(self, node=None):self.head = nodedef is_empty(self):return self.headdef get_len(self):cur = self.headcount = 0while cur:count += 1cur = cur.nextprint(cur)return countdef travel(self):cur = self.headif not cur:print('None')else:while cur:print(cur.data)cur = cur.nextdef add_node(self, data):node = DNode(data)if self.head is None:self.head = nodeelse:node.next = self.headself.head.prev = nodeself.head = nodedef append_node(self, data):node = DNode(data)if self.head is None:self.head = nodeelse:cur = self.headwhile cur.next:cur = cur.nextprint('ddddddd', cur.data)cur.next = nodenode.prev = curdef insert_node(self, i, data):if 0 <= i < self.get_len():if i == 0:self.add_node(data)elif i == (self.get_len() - 1):self.append_node(data)else:node = DNode(data)cur = self.headindex = 0while index < i:cur = cur.nextindex += 1node.next = curnode.prev = cur.prevcur.prev.next = nodeelse:print('i无效')def remove_node(self, i):if self.get_len():if 0 <= i < self.get_len():if i == 0:self.head.next.prev = Noneself.head = self.head.nextelse:cur = self.headindex = 0while index < i - 1:cur = cur.nextindex += 1if index == (self.get_len() - 2):cur.next = Noneelse:cur.next.next.prev = curcur.next = cur.next.nextelse:print('I无效')else:print('空表你删除个啥')def is_exist(self, value):cur = self.headhas_val = Falsewhile cur:if cur.data == value:has_val = Truebreakcur = cur.nextreturn has_valdef remove_node_by_value(self, value):cur = self.headhas_val = Falsewhile cur:if cur.data == value:if cur.prev is None:if cur.next is None:# 只有一个节点self.head = Noneelse:cur.next.prev = Noneself.head = cur.nexthas_val = Truebreakelse:if cur.next:cur.next.prev = cur.prevcur.prev.next = cur.nextelse:cur.prev.next = Nonehas_val = Truebreakcur = cur.nextif not has_val:print('无此值')def main():dlist = DList()# dlist.remove_node(0)for i in range(2, 10, 2):dlist.add_node(i)dlist.append_node(5)dlist.append_node(12)dlist.insert_node(1, 3)dlist.insert_node(0, 100)dlist.insert_node(7, 100)# dlist.insert_node(-1, 100)# dlist.insert_node(6, 100)dlist.insert_node(7, 200)# dlist.append_node(234)# print(dlist.head)# print(dlist.head.data)# print(dlist.head.prev)# print(dlist.head.next.data)# print(dlist.head.next.prev.data)dlist.remove_node(0)dlist.remove_node(6)dlist.remove_node(1)dlist.remove_node(6)# dlist.remove_node_by_value(8)# dlist.remove_node_by_value(10)dlist.remove_node_by_value(5)dlist.remove_node_by_value(12)# print('a', a)# print('index', dlist.remove_node_by_value(8))print()s = dlist.get_len()print('len', s)

   链表的反转,不同链表间的操作未实现,有时间以后再完善吧

数据结构之线性表 - Python实现相关推荐

  1. python线性表和队列_[笔记]python数据结构之线性表:linkedlist链表,stack栈,queue队列...

    python数据结构之线性表 python内置了很多高级数据结构,list,dict,tuple,string,set等,在使用的时候十分舒心.但是,如果从一个初学者的角度利用python学习数据结构 ...

  2. Python 数据结构 之 线性表 的链式存储结构

    用Python 来实现 C语言中 线性表的链式存储结构. 文章转载请注明:  Python 数据结构 之 线性表 的链式存储结构 代码地址 https://github.com/WenkeZhou/P ...

  3. Java数据结构(1.1):数据结构入门+线性表、算法时间复杂度与空间复杂度、线性表、顺序表、单双链表实现、Java线性表、栈、队列、Java栈与队列。

    数据结构与算法入门 问题1:为什么要学习数据结构          如果说学习语文的最终目的是写小说的话,那么能不能在识字.组词.造句后就直接写小说了,肯定是不行的, 中间还有一个必经的阶段:就是写作 ...

  4. c语言用两个栈构造队列伪码,数据结构习题线性表栈队列.doc

    数据结构习题线性表栈队列 线性表(58) 1. 在单链表.双链表和单循环链表中,若仅知道指针p指向某结点,不知道头指针,能否将结点*p从相应的链表中删去?若可以,其时间复杂度各为多少? 2.设线性表的 ...

  5. 【Java数据结构】线性表

    线性表 线性表是最基本.最简单.也是最常用的一种数据结构. 线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适用大部分线性表,而 ...

  6. step3 . day2 数据结构之线性表链表

    今天继续学习数据结构的线性表部分,从基础的顺序表到链表,类比写了一些调用函数,完成了表的增删改查排序等问题. 尤其是链表的排序,费了很大的心思终于捋顺写出来了,小有成就感,而且代码一次通过率越来越高, ...

  7. 数据结构之线性表(附代码)

    数据结构 之 线性表(附代码) 线性表思维导图: 线性表定义(逻辑结构): 一.顺序表 1.顺序表思维导图: 2.顺序表的逻辑结构: 3.顺序表基本操作的功能实现: 1.线性表的静态定义: 2.线性表 ...

  8. 数据结构之线性表的基本C语言语法

    一开始没做笔记,大家想看的话可以参考这里 [数据结构绪论] [数据结构(二)] [数据结构--算法和算法分析] [数据结构--渐进时间复杂度] [数据结构--初识线性表] [数据结构--线性表的顺序实 ...

  9. 用Java描述数据结构之线性表的链式存储(链表),模拟LinkedList实现

    上一篇介绍了顺序表:用Java描述数据结构之线性表的顺序存储(顺序表),ArrayList及其方法的介绍 上一篇博客中说明了什么是线性表--线性表就是一个个数据元素逻辑上以一对一的相邻关系(但是在物理 ...

最新文章

  1. Linux Centos6.5 SVN服务器搭建 以及客户端安装
  2. 用串口模拟printf函数输出
  3. php学习_数组 2013.01.04
  4. JSTL (标准标签库)
  5. 34 年了,“杀”不死的 Perl!
  6. requests爬取免费代理2
  7. shell编程追加1
  8. qt android 悬浮窗,Qt悬浮窗实现
  9. 通达OA工作流-表单设计
  10. CentOS 7安装java及其配置
  11. C语言 Mkl 矩阵乘法,MKL库矩阵乘法
  12. 简道云-灵活易用的应用搭建平台
  13. Python模拟登录QQ邮箱和QQ空间(selenium)
  14. AD19——1:1打印PCB原理图(查看封装是否适合实际器件)
  15. 【原创】2012年3月24日 单骑至大峪 日志
  16. 数学建模(2)--TOPSIS法
  17. Java知识体系最强总结(2020版)(转载)
  18. Golang神奇的2006-01-02 15:04:05
  19. php 赠送礼品功能开发,类似礼物说送礼提醒的功能该怎么做?
  20. NYOJ - [第八届河南省程序设计大赛]引水工程(最小生成树)

热门文章

  1. Python 制作迷宫游戏(三)——地图精灵
  2. JAVA NIO 异步TCP服务端向客户端消息群发代码教程实战
  3. 食药监移动执法指挥系统
  4. 2013年6月22日全国高校计算机联合考试广西考区一级笔试试题,全国高校计算机联合考试(广西考区)一级笔试试题卷2010年6月26日A.doc...
  5. ChatGPT 官方版 API,终于来了!
  6. 为什么要使用代理模式
  7. IDEA EasyCode安装及详细配置说明
  8. 高中学历学python好找工作吗-高中学历学完Python就能干人工智能?后院活动部
  9. 【转载】viewState详解
  10. 财经应用文计算机写作大赛通知,机关工会关于开展公文写作大赛的通知