双向链表
from Single import SingleLinklist class Node: def __init__(self, item): """定义节点""" self.elem = item self.prev = None self.next = None class DoubleLinklist(SingleLinklist): """定义双链表""" def add(self, item): """链表头部添加元素""" node = Node(item) node.next = self.__head self.__head = node node.next.prev = node def append(self, item): """链表尾部添加元素""" node = Node(item) if self.is_empty(): self.__head = node else: cur = self.__head while cur.next is not None: cur = cur.next cur.next = node node.prev = cur def insert(self, pos, item): """指定位置添加元素""" if pos < 0: self.add(item) elif pos > self.length() - 1: self.append(item) else: node = Node(item) count = 0 cur = self.__head while count < pos: cur = cur.next count += 1 node.next = cur.next node.prev = cur.prev cur.prev.next = node cur.prev = node def remove(self, item): """删除节点""" cur = self.__head while cur is not None: if cur.elem == item: if cur == self.__head: self.__head = cur.next if cur.next: cur.next.prev = None else: cur.prev.next = cur.next if cur.next: cur.next.prev = cur.prev break else: cur = cur.next
单项循环链表
class Node(): def __init__(self, item): self.elem = item self.next = None class Singleloop(): """定义单项循环链表""" def __init__(self): self.__head = None def is_empty(self): """链表是否为空""" return self.__head is None def length(self): """链表长度""" cur = self.__head count = 1 while cur.next is not self.__head: cur = cur.next count += 1 return count def travel(self): """遍历整个链表""" cur = self.__head while cur.next is not self.__head: print(cur.elem, end=' ') cur = cur.next print(cur.elem) def add(self, item): """链表头部添加元素,头插法""" node = Node(item) if self.is_empty(): self.__head = node node.next = node else: cur = self.__head while cur.next != self.__head: cur = cur.next node.next = self.__head self.__head = node cur.next = node def append(self, item): """链表尾部添加元素, 尾插法""" node = Node(item) if self.is_empty(): node.next = node self.__head = node else: cur = self.__head while cur.next != self.__head: cur = cur.next node.next = self.__head cur.next = node def insert(self, pos, item): node = Node(item) cur = self.__head count = 0 if pos < 0: self.add(item) elif pos > self.length() - 1: self.append(item) else: while count < pos - 1: count += 1 cur = cur.next node.next = cur.next cur.next = node def remove(self, item): cur = self.__head pre = None while cur.next != self.__head: if cur.elem == item: if self.__head == cur: """头结点""" rear = self.__head while rear.next != self.__head: rear = rear.next self.__head = cur.next rear.next = self.__head else: """中间节点""" pre.next = cur.next return else: pre = cur cur = cur.next if cur.elem == item: if cur == self.__head: """链表只有一个节点""" self.__head = None else: pre.next = cur.next def search(self, item): if self.is_empty(): return False else: cur = self.__head while cur.next != self.__head: if cur.elem == item: return True else: cur = cur.next if cur.elem == item: return True else: return False
栈
class Stack(): def __init__(self): self.__list = [] def push(self, item): """添加一个新的元素item到栈顶""" self.__list.append(item) def pop(self): """弹出栈顶元素""" return self.__list.pop() def peek(self): """返回栈顶元素""" if self.__list: return self.__list[-1] else: return None def is_empty(self): """判断栈是否为空""" return self.__list == [] def size(self): """返回栈的元素个数""" return len(self.__list)
队列
class Queue: def __init__(self): """创建一个空的队列""" self.__list = [] def enqueue(self, item): """往队列中添加一个item元素""" return self.__list.append(item) def dequeue(self): """从队列头部删除一个元素""" return self.__list.pop(0) def is_empty(self): """判断一个队列是否为空""" return self.__list == [] def size(self): """返回队列的大小""" return len(self.__list)
双端队列
class Deque(): def __init__(self): """创建一个空的双端队列""" self.__list = [] def add_front(self, item): """从队头加入一个item元素""" return self.__list.insert(0, item) def add_rear(self, item): """从队尾加入一个item元素""" return self.__list.append(item) def remove_front(self): """从队头删除一个item元素""" return self.__list.pop(0) def remove_rear(self): """从队尾删除一个item元素""" return self.__list.pop() def is_empty(self): """判断双端队列是否为空""" return self.__list == [] def size(self): """返回队列的大小""" return len(self.__list)