算法导论 python代码 第十章
2015-05-12 00:02
435 查看
# author Ttssxuan # Chapter 10.1 class Queue: ''' the queue class Properties: head - the head of the queue tail - the tail of the queue length - the length of the queue arr - the queue entity ''' def __init__(self, length): self.head = 0 self.tail = 0 self.length = length self.arr = [0] * self.length def __setitem__(self, i, x): self.arr[i] = x def __getitem__(self, i): return self.arr[i] def enqueue(q, x): ''' enqueue a element x to the queue q Parameters: q - the queue needs add a element x - the element needs add into the queue Returns: none ''' if q.tail == q.length - 1: q.tail = 0 else: q.tail += 1 # determine whether overflow if q.tail == q.head: raise Exception("overflow") q[q.tail - 1] = x def dequeue(q): ''' get an element in the queue Parameters: q - the queue Returns: the last element of the queue ''' if q.head == q.tail: raise Exception("underflow") x = q[q.head] if q.head == q.length - 1: q.head = 1 else: q.head = q.head + 1 return x # test q = Queue(10) # enqueue for i in range(0, 5): enqueue(q, i) print(q.head, q.tail) print(q.arr) # dequeue for i in range(0, 4): print(dequeue(q)) print(q.head, q.tail) print(q.arr)
# author Ttssxuan
# chapter 10.1
# the stack
class Stack:
'''
the stack class
Properties:
top - the end of the stack
'''
def __init__(self):
self.top = 0
self.arr = []
def __getitem__(self, i):
return self.arr[i - 1]
def __setitem__(self, i, x):
self.arr.append(x)
def __str__(self):
return str(self.arr)
def stack_empty(s):
'''
determine whether the stack is empty
Parameters:
s - the stack
Returns:
if the stack is empty, gets True, otherwise gets False
'''
if s.top == 0:
return True
else:
return False
def push(s, x):
'''
push x at the end of the stack s
Parameters:
s - the stack
x - the value needs to push into the stack
Returns:
none
'''
s.top += 1
s[s.top] = x
def pop(s):
'''
pop an element from stack s
Parameters:
s - the stack
Returns:
if the element exsit, return it, or raise excepthion
'''
if stack_empty(s):
raise Exception("underflow")
else:
s.top -= 1
return s[s.top + 1]
# test
s = Stack()
print(stack_empty(s))
push(s, 1)
print(s)
push(s, 2)
print(s)
print(pop(s))
print(pop(s))
# this will be underflow
print(pop(s))
# author Ttssxuan # 10.1-5 # the implement of the deque class Deque: ''' the deque class Properties: head - the head of the deque tail - the tail of the deque length - the length of the deque arr - the queue entity ''' def __init__(self, length): self.head = 0 self.tail = 0 self.length = length self.arr = [0] * self.length def __setitem__(self, i, x): self.arr[i] = x def __getitem__(self, i): return self.arr[i] def __str__(self): return str(self.arr) def enqueue(q, x): ''' append an element at the tail of the deque Parameters: q - the deque needs add a element x - the element needs add into the deque Returns: none ''' q.tail = (q.tail + 1) % q.length # determine whether overflow if q.tail == q.head: raise Exception("overflow") q[q.tail - 1] = x def enqueue_head(q, x): ''' append an element at the head of the deque Parameters: q - the deque x - the value insert into the head Returns: none ''' q.head = (q.head - 1) % q.length if q.head == q.tail: raise Exception("overflow") else: q[q.head] = x def dequeue(q): ''' get an element at the head of the deque Parameters: q - the deque Returns: the last element of the deque ''' if q.head == q.tail: raise Exception("underflow") x = q[q.head] q.head = (q.head + 1) % q.length return x def dequeue_tail(q): ''' get an element at the tail of the deque Parameters: q - the deque Returns: the last element of the deque ''' if q.tail == q.head: raise Exception("underflow") q.tail = (q.tail - 1) % q.length return q[q.tail] # test q = Deque(10) # test enqueue enqueue(q, 1) enqueue(q, 2) enqueue_head(q, 3) enqueue_head(q, 4) print(q) print(q.head, q.tail) # test dequeue print(dequeue(q), q.head, q.tail) print(dequeue_tail(q), q.head, q.tail) print(dequeue(q), q.head, q.tail) print(q) print(dequeue_tail(q), q.head, q.tail)
# author Ttssxuan # chapter 10.2 # the linked list class Node: ''' the linked list node Properties: key - the value of the node next - the pointer of the node prev - the pointer of the prev ''' def __init__(self): self.value = None self.prev = None self.next = None def __str__(self): return str(self.value) class Linked_list: ''' the linked_list Properties: head - the head of the linked list ''' def __init__(self): self.head = None def __str__(self): x = self.head re = "" while x != None: re += " " + str(x.value) x = x.next return re def list_search(l, k): ''' search the node whose value equels k Parameters: l - the linked list k - the value needs to be search Returns: if exist return the node, else return None ''' x = l.head while x != None and x.value != k: x = x.next return x def list_insert(l, x): ''' insert the x into the given linked list Parameters: l - the linked list x - the node needs to be inserted into the linked list Returns: none ''' x.next = l.head if l.head != None: l.head.prev = x l.head = x x.prev = None def list_delete(l, x): ''' delete the the node x in the given linked list Parameters: l - the linked list x - the node needs to be deleted from the linked list Returns: none ''' if x.prev != None: x.prev.next = x.next else: l.head = x.next if x.next != None: x.next.prev = x.prev # test l = Linked_list() # make the linked list print("make the linked list") for i in range(0, 10): x = Node() x.value = i list_insert(l, x) print(l) # search the value print("search in the linked list") print(list_search(l, 2)) print(list_search(l, 5)) # delete element print("delete the element in the linked list") print("delete 3") list_delete(l, list_search(l, 3)) print(l) print("delete 7") list_delete(l, list_search(l, 7)) print(l)
# author Ttssxuan # chapter 10.2 # the linked list with sentinels class Node: ''' the linked list node Properties: key - the value of the node next - the pointer of the node prev - the pointer of the prev ''' def __init__(self): self.value = None self.prev = None self.next = None def __str__(self): return str(self.value) class Linked_list: ''' the linked_list Properties: head - the head of the linked list ''' def __init__(self): x = Node() self.nil = x x.prev = x x.next = x def __str__(self): x = self.nil.next re = "" while x != self.nil: re += " " + str(x.value) x = x.next return re def list_delete_sentinels(l, x): ''' delete an element for a linked list with sentinel Parameters: l - the linked list x - the element need to be deleted Returns: none ''' x.prev.next = x.next x.next.prev = x.prev def list_search_sentinels(l, k): ''' search an element whose value equals k in the linked list with sentinel Parameters: l - the linked list k - the value need to search in the linked list Returns: the element whose value equals k ''' x = l.nil.next while x != l.nil and x.value != k: x = x.next return x def list_insert_sentinels(l, x): ''' insert an element into the linked list with sentinel Parameters: l - the linked list x - the node needs to be inserted into the linked list Returns: none ''' x.next = l.nil.next l.nil.next.prev = x l.nil.next = x x.prev = l.nil # test l = Linked_list() # make the linked list print("make the linked list") for i in range(0, 10): x = Node() x.value = i list_insert_sentinels(l, x) print(l) # search the value print("search in the linked list") print(list_search_sentinels(l, 2)) print(list_search_sentinels(l, 5)) # delete element print("delete the element in the linked list") print("delete 3") list_delete_sentinels(l, list_search_sentinels(l, 3)) print(l) print("delete 7") list_delete_sentinels(l, list_search_sentinels(l, 7)) print(l)
相关文章推荐
- 算法导论 python代码 第四章
- 算法导论 python代码 第二章
- 算法导论程序10--建堆(Python)
- 隐马尔科夫模型,第三种问题解法,维比特算法(biterbi) algorithm python代码
- [算法导论]插入排序 @ Python
- 算法导论程序26--开放寻址法(Python)
- logistic回归算法详细分析与Python代码实现注释
- 选择排序(伪代码算法,c++,以及python实现)
- python实现的生成随机迷宫算法核心代码分享(含游戏完整代码)
- 数据挖掘之Apriori算法详解和Python实现代码分享
- Python实现调度算法代码详解
- [算法导论]强连通分量 @ Python
- 二叉查找树——算法导论第12章简易代码实现~
- python机器学习-预测分析核心算法3-2代码在python3下运行遇到的一些问题
- 算法导论快速排序python实现
- 【ABC算法】人工蜂群算法原理及python代码
- [算法导论]拓扑排序 @ Python
- python写算法导论 插入排序
- Algorithm: quick sort implemented in python 算法导论 快速排序
- 遗传算法之Python实现代码