python数据结构与算法之线性表

1、线性表

是一种由n个元素(n>= 0 )数据元素组成的有限序列,所包含的元素数量通常被称为表的长度

n = 0 的表被称为空表,线性表的数据元素可以单一也可以复杂,可以是整数,字符串,也可以是由几种数据来做。

2、线性表的存储

有两种方式分别是顺序存储和链式存储

1、链式存储

链式存储通过一组含有指针的存储单元来存储线性表的数据和他们的逻辑顺序(采用这种方式存储的通常被称为单链表)

2、线性存储

按照逻辑顺序来进行存放在地址连续的存储单元中使得逻辑上相邻的元素在物理位置上相邻(在python中的list和tuple都可以实现顺序表)

3、单链表操作

下面是代码:

class Node(object):  # 节点
    def __init__(self, ele):
        self.ele = ele
        self.next = None


class SinkList(object):  # 创建单链表
    def __init__(self, node=None):
        self.__head = node

    def is__empty(self):  # 判断是否为空
        return self.__head is None

    def length(self):  # 链表长度
        cu = self.__head
        cout = 0
        while cu is not None:
            cout += 1
            cu = cu.next
        return cout

    def travl(self):
        cu = self.__head
        while cu is not None:
            print(cu.ele, end=' ')
            cu = cu.next
        print("\n")

    def add(self, item):  # 在链表首部添加元素
        node = Node(item)
        node.next = self.__head
        self.__head = node

    def append(self, item):  # 在链表尾部添加元素
        node = Node(item)
        if self.is__empty():
            self.__head = node
        else:
            cu = self.__head
            while cu.next is not None:
                cu = cu.next
            cu.next = node

    def insert(self, index, item):  # 在指定位置添加元素
        if index < 0:
            self.add(item)
        elif index > self.length() - 1:
            self.append(item)
        else:
            per = self.__head
            cout = 0
            while cout < index - 1:
                cout += 1
                per = per.next

    def remove(self, item):  # 删除节点
        cur = self.__head
        pre = None
        while cur is not None:
            if cur.ele == item:
                if cur == self.__head:
                    self.__head = cur.next
                else:
                    pre.next = cur.next
                    break
            else:
                pre = cur
                cur = cur.next

    def search(self, item):  # 查找节点是否存在
        cur = self.__head
        while not cur:
            if cur.ele == item:
                return True
            else:
                cur = cur.next
        return False


if __name__ == "__main__":
    si = SinkList()
    print(si.is__empty())
    print(si.length())
    si.append(3)
    si.add(999)
    si.insert(-3, 110)
    si.insert(99, 111)
    print(si.is__empty)
    print(si.length())
    si.travl()
    si.remove(111)
    si.travl()

结果如下:

  • 23
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

过度引用

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值