16、請實現一個棧。
# 答案:
class Stack(object) :
def __init__(self,size):
#類的構造函數
self.size = size
self.stack = []
def __str__(self):
#類的字符串輸出方法,類似於java的.toString()方法
return str(self.stack)
def getSize(self) :
#獲取棧當前大小
return len(self.stack)
def push(self, x) :
#入棧,棧滿拋異常
if self.isfull() :
#return -1
raise Exception("Stack is full")
self.stack.append(x)
def pop(self) :
#出棧,棧空拋異常
if self.isempty() :
#return -1
raise Exception("Stack is empty")
topElement = self.stack[-1]
self.stack.remove(topElement)
return topElement
def isempty(self) :
#判斷棧空
if len(self.stack) == 0 :
return True
return False
def isfull(self) :
#判斷棧滿
if len(self.stack) == self.size :
return True
return False
17、關於Python類的繼承不正確的說法是?(多選)
A. Python類無法繼承
B. 可以繼承, 無法執行父類的構造函數
C. 可以有多個父類
D. 只能有一個父類
# 答案
'''
A
D
'''
18、實現一個hashtable類,對外暴露的有add和get方法,滿足以下測試代碼
def test():
import uuid
names = {"name", "web", "python"}
ht = HashTable()
for key in names:
value = uuid.uuid4()
ht.add(key, value)
print("add 元素", key, value)
for key in names:
v = ht.get(key)
print("get 元素", key, v)
# 答案:
class HashMap(object):
def __init__(self):
# 初始化總表為,容量為2的表格(含兩個子表)
self.maps = BetterMap(2)
self.num = 0 # 表中數據個數
def get(self,k):
return self.maps.get(k)
def add(self, k, v):
# 若當前元素數量達到臨界值(子表總數)時,進行重排操作
# 對總表進行擴張,增加子表的個數為當前元素個數的兩倍!
if self.num == len(self.maps.maps):
self.resize()
# 往重排過后的 self.map 添加新的元素
self.maps.add(k, v)
self.num += 1
def resize(self):
""" 重排操作,添加新表, 注意重排需要線性的時間 """
# 先建立一個新的表,子表數 = 2 * 元素個數
new_maps = BetterMap(self.num * 2)
for m in self.maps.maps: # 檢索每個舊的子表
for k,v in m.items: # 將子表的元素復制到新子表
new_maps.add(k, v)
self.maps = new_maps # 令當前的表為新表
19、請用兩個隊列來實現一個棧(給出偽代碼即可)
# 答案:
class StackWithTwoQueues(object):
#定義兩個空隊列
def __init__(self):
self.queue1 = []
self.queue2 = []
#入棧
def push(self, item):
self.queue1.append(item)
#出棧
def pop(self):
if len(self.queue1) == 0:
return(None)
while(len(self.queue1) != 1):
self.queue2.append(self.queue1.pop(0))
self.queue1, self.queue2 = self.queue2, self.queue1
return (self.queue2.pop())
#test
if __name__ == '__main__':
ss = StackWithTwoQueues()
list = [0, 1, 2, 3, 4]
for i in range(5):
ss.push(list[i])
print(list)
for i in range(5):
print(ss.pop(), ',', end = '')
#output
#[0, 1, 2, 3, 4]
#4, 3, 2, 1, 0
20、已知如下鏈表類,請實現單鏈表逆置
class Node:
def __init__(self, value, next):
self.value = value
self.next = next
# 答案:
class Solution:
def ReverseList(self, pHead):
if not pHead or not pHead.next:
return pHead
last = None
while pHead:
tmp = pHead.next
pHead.next = last
last = pHead
pHead = tmp
return last