簡單來說可以「用3種角度」來看~~~ 白話「不同角度」有不同角度(記憶體/讀取方式/程式語言)資料結構的定義
白話「不同角度」有不同角度(記憶體/讀取方式/程式語言)資料結構的定義
 
 => 可用基礎資料結構陣列(Array)、連結串列(Linked List)來各自實現堆疊(Stack)或佇列(Queue List)
=> 可用基礎資料結構陣列(Array)、連結串列(Linked List)來各自實現堆疊(Stack)或佇列(Queue List)
 白話來說Python的「List列表」不是陣列(Array)也不是連結串列(Linked List)
白話來說Python的「List列表」不是陣列(Array)也不是連結串列(Linked List)


這2張圖說明各種資料結構及演算法的各種操作Big O時間複雜度https://www.bigocheatsheet.com/
列表 (List): 一種有序的元素集合,可以包含不同類型的資料
元組 (Tuple): 類似於列表,但是元組的元素是不可修改的
集合 (Set): 一種無序的元素集合,不包含重複的元素
字典 (Dictionary): 一種鍵值對的集合,可以通過鍵來快速訪問對應的值
矩陣 (Matrix): 可以使用numpy庫來處理多維陣列
表格 (DataFrame): 可以使用pandas庫來處理CSV/Excel或SQL數據表 明天來說說Python這6個重要重要超級重要的資料結構你才能學好Python
明天來說說Python這6個重要重要超級重要的資料結構你才能學好Python
使用Python列表(List)實作陣列(Array)、連結串列(Linked List)、堆疊(Stack)、佇列(Queue)
# 陣列(Array)
class MyArray:
    def __init__(self):
        self.array = []
    def insert(self, element):
        self.array.append(element)
    def get_element(self, index):
        return self.array[index]
    def delete_element(self, index):
        del self.array[index]
my_array = MyArray()
my_array.insert(1)
my_array.insert(2)
my_array.insert(3)
print(my_array.get_element(1))  
my_array.delete_element(0)
print(my_array.get_element(0))  
# 連結串列(Linked List)
class Node:
    def __init__(self, data):
        self.data = data
        self.next = None
class LinkedList:
    def __init__(self):
        self.head = None
    def append(self, data):
        new_node = Node(data)
        if not self.head:
            self.head = new_node
            return
        current = self.head
        while current.next:
            current = current.next
        current.next = new_node
my_linked_list = LinkedList()
my_linked_list.append(1)
my_linked_list.append(2)
my_linked_list.append(3)
# 堆疊(Stack) 先進後出(LIFO)
class Stack:
    def __init__(self):
        self.stack = []
    def push(self, element):
        self.stack.append(element)
    def pop(self):
        if self.stack:
            return self.stack.pop()
        else:
            return None
my_stack = Stack()
my_stack.push(1)
my_stack.push(2)
my_stack.push(3)
print(my_stack.pop()) 
# 佇列(Queue) 先進先出(FIFO)
class Queue:
    def __init__(self):
        self.queue = []
    def enqueue(self, element):
        self.queue.append(element)
    def dequeue(self):
        if self.queue:
            return self.queue.pop(0)
        else:
            return None
my_queue = Queue()
my_queue.enqueue(1)
my_queue.enqueue(2)
my_queue.enqueue(3)
print(my_queue.dequeue())