C001:数据结构7-链表(Linked list)

数据结构7-链表(Linked list

链表是物理存储是离散的,逻辑上是顺序的线性表序列(a linear sequence)。

链表由节点构成,每个节点是单独的对象存在于内存中。

节点(node=数据域(element:指向对象 )+指针域(link or pointer:指向下一个节点)

 

 

单向链表(SinglyLinked Lists):

一个单向链表一般有链表的长度,有两个特殊的节点Head(必须的)和tail。每个节点包含两个值:当前节点的值和一个指向下一个节点的链接。

时间复杂度1,空间复杂度n

比如用单向链表实现的栈(stackFILO)和队列(queue, FIFO)Python代码:

#Stack(LIFO) implementation by Singly Linked list

class LindedStack:

            ''' LIFO stack implementation using linked list'''

            class _Node:

                        __slot__ = '_element', '_next'

                       

                        def __init__(self, element, next):

                                    self._element = element

                                    self._next = next

                                   

            #stack functions

            def __init__(self):

                        self._head = None

                        self._size = 0

                       

            def __len__(self):

                        return self._size

                       

            def is_empty(self):

                        return self._size == 0

           

            def push(self, e):

                        self._head = self._Node(e, self._head)

                        self._size += 1

                       

            def top(self):

                        if self.is_empty():

                                    raise Empty('Stack is empty')

                        return self._head._element

                       

            def pop(self):

                        if self.is_empty():

                                    raise Empty('Stack is empty')

                        topElement = self._head._element

                        self._head = self._head._next

                        self._size -= 1

                        return topElement

#Queue(FIFO) implementation by Singly Linked list

class LinkedQueue:

            ''' FIFO Queue implementation using linked list'''

            class _Node:

                        __slot__ = '_element', '_next'

                       

                        def __init__(self, element, next):

                                    self._element = element

                                    self._next = next

                                   

            #Queue functions

            def __init__(self):

                        self._head = None

                        self._tail = None

                        self._size = 0

           

            def __len__(self):

                        return self._size

                       

            def is_empty(self):

                        return self._size == 0

                       

            def first(self):

                        if self.is_empty:

                                    raise Empty("Queue is empty")

                        return self._head._element

           

            def dequeue(self):

            '''delete the first node'''

                        if self.is_empty:

                                    raise Empty("Queue is empty")

                        answer = self._head._element

                        self._head = self._head._next

                        self._size -= 1

                        if self.is_empty():

                                    self._tail = None

                        return answer

                       

            def enqueue(self, e):

            '''add node to the end'''

                        answer = self._Node(e, None)

                        if self.is_empty:

                                    self._head = answer

                        else:

                                    self._tail._next = answer

                        self._tail = answer

                        self._size += 1

                       

                       

 

 

双向链表(DoublyLinked Lists):

一个双向链表有三个整数值: 数值, 向后的节点链接, 向前的节点链接。

 

循环链表(CircularlyLinked Lists):算法设计的需要

首节点和末节点被连接在一起。这种方式在单向和双向链表中皆可实现。比如单向链表:

一个循环链表包含一个节点:当前节点(current)。

比如CPU的轮叫调度(Round-RobinScheduling)就可以用循环链表来实现。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值