zoukankan      html  css  js  c++  java
  • 顺序表和链表

    顺序表

    - 集合中存储的元素是有顺序的,顺序表的结构可以分为两种形式:但数据类型和多数据类型

    - python中的列表和元组就书序多数据类型的顺序表

    - 单数据类型顺序表的内存是连续开启

    - 多数据类型顺序表的内存是非连续开辟

    - 顺序表的弊端:顺序表的结构需要预先知道数据大小来申请连续的存储空间,而在进行扩充时又需要进行数据的搬迁

    链表:相对顺序表,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理且进行扩充时不需要进行数据搬迁

    - 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是不像顺序表一样连续存储数据,而是每一个节点(数据存储单元)里存放下一个节点的信息(地址)

    . is_empty():链表是否为空

    . length():链表长度

    . travel():遍历整个链表

    . add(item):链表头部添加元素

    . append(item):链表尾部添加元素

    . insert(pos, item):指定位置添加元素

    . remove(item):删除节点

    . search(item):查找节点是否存在

    class Node():
        def __init__(self,item):
            self.item = item
            self.next = None
    
    
    class Link():
        #构建出一个空的链表
        def __init__(self):
            self._head = None #永远指向链表中的头节点
            #想链表的头部插入节点
        def add(self,item):
            node = Node(item)
            node.next = self._head
            self._head = node
            
        def travel(self):   
            cur = self._head
            #链表为空则输出‘链表为空’
            if self._head == None:
                print('链表为空!')
            while cur:
                print(cur.item)
                cur = cur.next
        def isEmpty(self):
            return self._head == None
        def length(self):
            cur = self._head
            count = 0
            while cur:
                count += 1
                cur = cur.next
            return count          
        def search(self,item):
            cur = self._head
            find = False
            while cur:
                if cur.item == item:
                    find = True
                    break
                cur = cur.next
            return find
        
        def append(self,item):
            node = Node(item)
            #链表为空的情况
            if self._head == None:
                self._head = node
                return
            
            cur = self._head #头节点
            pre = None #cur的前一个节点
            while cur:
                pre = cur
                cur = cur.next
            pre.next = node
            
        def insert(self,pos,item):
            node = Node(item)
            
            if pos < 0 or pos > self.length():
                print('重新给pos赋值!!!')
                return
            
            cur = self._head
            pre = None
            
            for i in range(pos):
                pre = cur
                cur = cur.next
            pre.next = node
            node.next = cur
        def remove(self,item):
            cur = self._head
            pre = None
            
            if self._head == None:#链表为空
                print('链表为空,没有可删除的节点!!1')
                return
        
            
            #删除的是第一个节点的情况
            if self._head.item == item:
                self._head = self._head.next
                return
            
            #删除的是非第一个节点的情况
            while cur:
                pre = cur
                cur = cur.next
                if cur.item == item:
                    pre.next = cur.next
                    return
    link = Link()
    link.add(3)
    link.add(4)
    link.add(5)
    link.add(6)
    
    link.remove(3)
    
    link.travel()
  • 相关阅读:
    文本环加载动画html代码
    自己总结的特殊符号,大家有用可以复制
    《名侦探柯南》动画登陆bilibili
    复古风,vivo申请滑盖结构的手机外观专利
    GitHub 热榜第一!可交互全球疫情地图
    最新免费领哔哩哔哩会员教程
    百度网盘免费领取会员
    Apple Watch Series 6或将增加焦虑监测和睡眠追踪功能
    谷歌更新其社区人员流动报告 帮助了解民众遵守封锁令的情况
    计算5的n次幂html代码
  • 原文地址:https://www.cnblogs.com/blackball9/p/11889321.html
Copyright © 2011-2022 走看看