算法与数据结构学习心得-链表

  • 程序=数据结构+算法
  • 算法是为解决实际问题而设计的,数据结构是算法需要处理的问题载体

线性表

  • list列表中元素可以修改;而tuple元组中元素不可以修改
  • 线性表:包括顺序表以及链表

链表

  • 单向链表:每个节点包括一个信息域(元素域)和一个链接域(下一节点的指针位置)
  • 单链表的操作
    • is_empty() 链表是否为空
    • length()链表长度
    • travel() 遍历整个链表
    • add() 链表头部添加元素
    • append() 链表尾部添加元素
    • insert(pos,item) 指定位置添加元素
    • remove() 删除节点
    • search() 查找节点是否存在
  • 单链表的实现
class Node(object):
    def __init__(self,elem):  #构造函数 self 指对象
        self.elem =elem 
        self.next =None
        
    #node = Node()
class SingleLinkList(object):
    def __init__(self, node=None):
        self.__head = node #私有 双下划线
        
    def is_empty(self):
        return self.__head == None
    
    def length(self):#链表长度
        #cur游标,用来移动遍历节点
        cur = self.__head
        #count 记录数量
        count = 0
        while (cur!=None):
            count  +=1
            cur = cur.next
        return count 
    
    def travel(self): #遍历整个链表
        #cur游标,用来移动遍历节点
        cur = self.__head
        while (cur!=None): #注意:这里与计算链表长度那里的循环条件不同,前者是cur.next,这里是cur
            print (cur.elem)
            cur = cur.next
    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:
            #cur游标,用来移动遍历节点
            cur = self.__head
            while (cur.next!=None): 
                cur = cur.next
            cur.next = node
    def insert(self,pos,item): #指定位置添加元素
        pass
    def remove(self, item): #删除节点
        pass
    def search(self, item):# 查找节点是否存在
        pass

if __name__ == "__main__":
    ll = SingleLinkList()
    print(ll.is_empty())
    ll.append(1)
    print(ll.is_empty())
    print(ll.length())
    ll.append(2)
    ll.append(3)
    ll.append(4)
    ll.append(5)
    ll.travel()

链表与顺序表的对比

  • 顺序表:存取可以一次定位,存储连续
  • 链表:对于离散的空间可以充分利用,存取需要从头遍历
操作链表顺序表
访问元素O(n)O(1)
在头部插入/删除O(1)O(n)
在尾部插入/删除O(n)O(1)
在中间插入/删除O(n)O(n)

写在最后:这是第一篇博客,也算是从0开始。感恩路上所遇见的人,给与的温暖与帮助。剩下的,只能靠自己努力了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值