zoukankan      html  css  js  c++  java
  • 数据结构之链表:单链表

    关于数据结构还是在学校的时候学的,那时候代码基本都在用C实现的。现在重新学习,代码主要用python ,部分会有 java实现的代码

    链表是一种常见的数据结构,我们经常将链表和数组进行对比。

    所以先说说数组:

    数组:数组存储需要一块连续的内存空间来存储,所以当我需要10M的空间来存储数据,就算甚于空间为100M,但是没有连续的10M空间,空间也无法申请成功。

    链表:链表存储数据无数组那样苛刻的条件,通过“指针”(或引用)将一组零散的内存块串联起来。

    链表分为单链表,双链表和循环链表

    单链表:单链表的头节点存放的是链表的第一个节点,即链表的基地址。最后一个节点称为尾节点,尾节点的指针指向的指为null。

    单链表的python代码:

    class Node():
    
        def __init__(self, item=None, pos_item=None):
    
            self._item = item
            self._next = pos_item
    
        def __repr__(self):
            return str(self._item)
    
    
    # 单链表
    class Chain():
    
        def __init__(self):
            self._head = None
            self._length = 0
    
        # 判断是否为空列表
        def isEmpty(self):
            return self._length == 0
    
        # 链表结尾插入
        def append(self,item):
    
            if isinstance(item, Node):
                node = item
            else:
                node = Node(item)
            if self._head is None:
                self._head = node
            else:
                be_node = self._head
                while be_node._next:
                    be_node = be_node._next
                be_node._next = node
            self._length += 1
    
        # 插入节点
        def insert(self, index, item):
    
            if self.isEmpty():
                print('this chain table is empty')
                return
    
            if index <0 or index >= self._length:
                print("error info: out of index")
                return
    
            in_node = Node(item)
            node = self._head
            count = 1
    
            while True:
                node = node._next
                count += 1
                if count == index:
    
                    next_node = node._next
                    node._next = in_node
                    in_node._next = next_node
                    self._length += 1
                    return
    
        # 删除节点
        def delete(self, index):
    
            if self.isEmpty():
                print('this chain is empty')
                return
    
            if index < 0 or index >= self._length:
                print("error info: out of index")
                return
            # if index == 0
            #     self._head = None
            else:
                node = self._head
                count = 0
                while True:
                    count += 1
                    if index == count:
                        node._next = node._next._next
                        break
                    node = node._next
            self._length -= 1
    
        def __repr__(self):
            if self.isEmpty():
                print("the chain is empty")
                return
            nlist = ""
            node = self._head
            while node:
                nlist += node._item + " "
                node = node._next
            return nlist
    
    
    if __name__ == '__main__':
        chain = Chain()
        chain.append('A')
        chain.append('B')
        chain.append('C')
        chain.append('D')
        chain.append('E')
        chain.append('F')
        chain.append('G')
        print(chain)
        chain.insert(2, 'H')
        print(chain)
        chain.delete(3)
        print(chain)
        print(chain._length)
  • 相关阅读:
    致敬尤雨溪,Vue.js 让我赚到了第一桶金
    JavaScript 构造树形结构的一种高效算法
    Webpack 4 Tree Shaking 终极优化指南
    腾讯前端面试题:一言不合就写个五子棋
    使用Web代理实现Ajax跨域
    Extjs 4 chart自定义坐标轴刻度
    五分钟了解浏览器的工作原理
    面试官:JavaScript 原始数据类型 Symbol 有什么用?
    JavaScript 初学者容易犯的几个错误,你中招没?
    帮助你更好的理解Spring循环依赖
  • 原文地址:https://www.cnblogs.com/qiutian-guniang/p/10295886.html
Copyright © 2011-2022 走看看