02-04 16—20


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM