您的位置:首页 > 理论基础 > 数据结构算法

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

2014-09-11 16:36 686 查看
数据结构7-链表(Linked list)

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

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

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

单向链表(SinglyLinked Lists):

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



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

比如用单向链表实现的栈(stack,FILO)和队列(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)就可以用循环链表来实现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: