C001:数据结构7-链表(Linked list)
2014-09-11 16:36
686 查看
数据结构7-链表(Linked list)
链表是物理存储是离散的,逻辑上是顺序的线性表序列(a linear sequence)。
链表由节点构成,每个节点是单独的对象存在于内存中。
时间复杂度1,空间复杂度n。
比如用单向链表实现的栈(stack,FILO)和队列(queue,
FIFO)。Python代码:
数值,
向后的节点链接,
向前的节点链接。
一个循环链表包含一个节点:当前节点(current)。
比如CPU的轮叫调度(Round-RobinScheduling)就可以用循环链表来实现。
链表是物理存储是离散的,逻辑上是顺序的线性表序列(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)就可以用循环链表来实现。
相关文章推荐
- 数据结构-单链表(Linked List)
- 【数据结构与算法基础】单链表及其应用基数排序 / Singly Linked List and radix sort
- Java数据结构与算法之LinkedList单链表
- 数据结构之双向链表(SplDoublyLinkedList)
- 数据结构——链表(linkedlist)
- Python 数据结构与算法——列表(链表,linked list)
- 数据结构之线性表之顺序表和链表(通过数据结构角度深入理解arrayList和linkedList的特性)
- Linked List实现队列的数据存储结构
- 关于线性表的两种储存结构及单链表逆序解析(ArrayList和LinkedList)
- 中国大学MOOC-数据结构基础习题集、02-1、Reversing Linked List
- Linkedlist队列数据和堆栈结构
- 数据结构(java)---MyLinkedList
- 使用LinkedList模拟一个堆栈或者队列数据结构
- 使用LinkedList模拟一个堆栈或者队列数据结构
- 数据结构与算法---C#实现LinkedList实例
- redis源码分析之数据结构(一)链表adlist.c
- linux 内核常用数据结构及算法——list(循环双向链表)
- 数据结构(Java LinkedList模拟)本代码重在学习数据结构思路,代码完整性欠缺,请见谅
- 常用数据结构及复杂度 array、LinkedList、List、Stack、Queue、Dictionary、SortedDictionary、HashSet、SortedSet
- 数据结构模版----单链表SimpleLinkList[不带头结点](C语言实现)