事前準備

資料

儲存結構

儲存的結構有很多種,但是最底層以 Array 和 Linked List 為主。

操作

不外乎就是增、刪、查、改,英文世界裡常見的 CRUD (Create, Read, Update, Delete) 。電腦執行就是要盡可能的高效率的去完成以上幾個動作,因此就衍伸出了時間複雜度,而當資料用不同的方式儲存時就會有不同的空間複雜度,因此不同的演算法的目的就是要想辦法優化兩者的複雜度,或是在中間取得一個最佳的平衡。

不同的儲存結構與操作有時候可以完成一樣的事情

  • 資料用陣列儲存,用 for 迴圈印出每一格的資料

for i in range(len(arr)):
    print(arr[i])
  • 資料用陣列儲存,用 while 迴圈印出每一格的資料

while i < len(arr):
    print(arr[i])
    i += 1
  • 資料用陣列儲存,用遞迴的方式印出每一格的資料

# arr = [...]
def recursive(i):
    if i < len(arr):
        print(arr[i])
        recursive(i+1)
  • 資料用 Linked List 儲存,用 while 迴圈印出每一格的資料

# Definition for a node.
# class Node:
#     def __init__(self, val: int = 0, next: Node = None):
#         self.val = val
#         self.next = next

while node:
    print(node.val)
    node = node.next
  • 有些程式語言例如:Java ,資料用 Linked List 儲存,可以用 for 迴圈印出每一格的資料

/*    
class Node {
        int val;
        Node next;
}
*/
for (Node p = head; p != null; p = p.next) {
    System.out.println(p.val)
}
  • 資料用 Linked List 儲存,可以用遞迴的方式印出每一格的資料

def traverse(node: Node):
    if not node:
        return
    print(node.val)
    traverse(node.next)

Last updated