Bài giảng Cấu trúc dữ liệu và giải thuật: Ngăn xếp và hàng đợi - TS. Trần Ngọc Việt

17 5 1
Bài giảng Cấu trúc dữ liệu và giải thuật: Ngăn xếp và hàng đợi - TS. Trần Ngọc Việt

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Bài giảng Cấu trúc dữ liệu và giải thuật: Ngăn xếp và hàng đợi được biên soạn gồm các nội dung chính sau: Ngăn xếp – stack; Giải thuật chức năng PUSH của cấu trúc dữ liệu ngăn xếp-stack; Hàng đợi - queue. Mời các bạn cùng tham khảo!

Bài 1: Ngăn xếp – stack -Một ngăn xếp-stack cấu trúc liệu hoạt động theo nguyên lý “vào sau trước” LIFO- Last In First Out Tức là, phần tử cuối chèn vào ngăn xếp phần tử lấy khỏi ngăn xếp-stack -Chẳng han, chồng sách (minh họa chồng đĩa) bạn để hộp hình phía Giả sử hộp vừa khít sách Khi đó, thao tác: -Thêm sách vào hộp(push ngăn xếp-stack) -Lấy sách khỏi hộp, bạn lấy thằng cùng(pop ngăn xếp-stack) Hình Ngăn xếp-stack CẤU TRÚC DỮ LIỆU PUSH cấu trúc liệu ngăn xếp-stack 1.1.Tiến trình bước đặt thêm phần tử liệu vào ngăn xếp biết đến với tên chức PUSH Chức push bao gồm bước sau Bước 1: kiểm tra xem ngăn xếp-stack đầy hay chưa Bước 2: ngăn xếp-stack đầy, tiến trình bị lỗi Bước 3: ngăn xếp-stack chưa đầy, tăng top để trỏ tới phần nhớ trống Bước 4: thêm phần tử liệu vào vị trí nơi mà top trỏ đến ngăn xếp-stack Bước 5: trả success CẤU TRÚC DỮ LIỆU 1.2.Giải thuật chức PUSH cấu trúc liệu ngăn xếp-stack +giải thuật mã sau bắt đầu chức push: stack, data if stack đầy return null kết thúc if top ← top + stack[top] ← data kết thúc hàm CẤU TRÚC DỮ LIỆU POP cấu trúc liệu ngăn xếp-stack -Thực chức POP xóa phần tử từ ngăn xếp-stack gọi POP -Triển khai mảng chức pop(), phần tử liệu khơng thực bị xóa, thay vào top bị giảm vị trí thấp ngăn xếp-stack để trỏ tới giá trị -Danh sách liên kết liệu, pop() xóa phần tử liệu xóa phần tử khỏi khơng gian nhớ Chức POP bao gồm bước: Bước 1: kiểm tra ngăn xếp-stack trống hay không Bước 2: ngăn xếp-stack đầy, tiến trình bị lỗi Bước 3: ngăn xếp-stack không trống, truy cập phần tử liệu top trỏ tới Bước 4: giảm giá trị top Bước 5: trả success CẤU TRÚC DỮ LIỆU +Giải thuật cho chức POP mã giả bắt đầu hàm pop: stack, data if stack trống return null kết thúc if data ← stack[top] top ← top - return data kết thúc hàm CẤU TRÚC DỮ LIỆU Bài 2: Hàng đợi - queue -Một hàng đợi-queue cấu trúc liệu dùng để lưu trữ đối tượng theo chế FIFO -First In First Out -Sắp xếp hàng đợi-queue hay gặp đời sống hàng ngày Chẳng hạn, xếp hàng vào siêu thị mô dễ hiểu -Cấu trúc hàng đợi-queue, thêm phần tử vào đầu queue(cuối hàng đợi), xóa phần tử đầu hàng đợi-queue(đầu hàng đợi) Hình Hàng đợi-queue CẤU TRÚC DỮ LIỆU -Cấu trúc hàng đợi-queue, có chức sau  EnQueue: Thêm phần tử vào cuối(rear) hàng đợi-queue  DeQueue: Xóa phần tử khỏi đầu(front) hàng đợi-queue Nếu hàng đợi-queue rỗng thơng báo lỗi  IsEmpty: Kiểm tra hàng đợi-queue rỗng  Front: Lấy giá trị phần tử đầu(front) hàng đợi-queue Lấy giá trị không làm thay đổi hàng đợi-queue  queue[]: Một mảng chiều mô cho hàng đợi  arraySize: Số lượng phần tử tối đa lưu trữ queue[]  front: Chỉ số phần tử đầu queue Nó số phần tử bị xóa lần  rear: Chỉ số phần tử thêm vào cuối queue CẤU TRÚC DỮ LIỆU +Enqueue – Thêm vào cuối hàng đợi Nếu hàng đợi-queue chưa đầy, thêm phần tử cần thêm vào cuối(rear) hàng đợi Ngược lại, thông báo lỗi Trường hợp, rear số phần tử thêm lần Do đó, thêm xong ta tăng rear lên đơn vị Giá trị rear cần thay đổi nên truyền theo tham chiếu CẤU TRÚC DỮ LIỆU + Dequeue – Xóa khỏi đầu hàng đợi Nếu hàng đợi-queue có phần tử, tiến hành xóa bỏ phần tử đầu hàng đợi cách tăng front lên giá trị Ở đây, front số phần tử bị xóa Cho nên cần tăng xong, lý ta cần truyền tham số front sử dụng tham chiếu CẤU TRÚC DỮ LIỆU 10 #Thực hành 1.1: myStack = [] #?? myStack.append('data science') #?? myStack.append('data analytics') myStack.append('data structures and algorithms') myStack.append('big data') myStack.append('learning data analytics') myStack myStack.pop() #?? myStack.pop() myStack CẤU TRÚC DỮ LIỆU 11 #Thực hành 1.2: from collections import deque #?? myStack = deque() myStack.append('data science') #?? myStack.append('data structures and algorithms') myStack.append('learning data analytics') myStack.append('big data') myStack myStack.pop() #?? myStack.pop() myStack CẤU TRÚC DỮ LIỆU 12 #Thực hành 1.3: class Node: def init (self, value): self.value = value self.next = None class Stack: def init (self): self.head = Node("head") self.size = def push(self, value): node = Node(value) node.next = self.head.next self.head.next = node self.size += def str (self): cur = self.head.next out = "" while cur: out += str(cur.value) + "->" cur = cur.next return out[:-3] def getSize(self): return self.size def isEmpty(self): return self.size == def peek(self): if self.isEmpty(): raise Exception("Peeking stack") return self.head.next.value CẤU TRÚC DỮ LIỆU def pop(self): if self.isEmpty(): raise Exception("Popping from an empty stack") remove = self.head.next self.head.next = self.head.next.next self.size -= return remove.value if name == " main ": stack = Stack() for i in range(1, 20): stack.push(i) print(f"Stack: {stack}") for _ in range(1, 9): remove = stack.pop() print(f"Pop: {remove}") print(f"Stack: {stack}") 13 #Thực hành 2.1: myQueue = [] #?? myQueue.append('data science') #?? myQueue.append('data analytics') myQueue.append('data structures and algorithms') myQueue.append('big data') myQueue.append('learning data analytics') print(myQueue) print(myQueue.pop(0)) #?? print(myQueue.pop(0)) print(myQueue) CẤU TRÚC DỮ LIỆU 14 #Thực hành 2.2: from collections import deque q = deque() #?? q.append('data analytics') #?? q.append('data structures and algorithms') q.append('big data') q.append('learning data analytics') print(q) print(q.popleft()) #?? print(q.popleft()) print(q) CẤU TRÚC DỮ LIỆU 15 #Thực hành 2.3: from queue import Queue q = Queue(maxsize = 5) print(q.qsize()) q.put('data analytics') #?? q.put('data structures and algorithms') q.put('big data') q.put('learning data analytics') print(q.qsize()) print(q.get()) #?? print(q.get()) CẤU TRÚC DỮ LIỆU 16 ... ← top - return data kết thúc hàm CẤU TRÚC DỮ LIỆU Bài 2: Hàng đợi - queue -Một hàng đợi- queue cấu trúc liệu dùng để lưu trữ đối tượng theo chế FIFO -First In First Out -Sắp xếp hàng đợi- queue... sống hàng ngày Chẳng hạn, xếp hàng vào siêu thị mô dễ hiểu -Cấu trúc hàng đợi- queue, thêm phần tử vào đầu queue(cuối hàng đợi) , xóa phần tử đầu hàng đợi- queue(đầu hàng đợi) Hình Hàng đợi- queue CẤU... hộp, bạn lấy thằng cùng(pop ngăn xếp- stack) Hình Ngăn xếp- stack CẤU TRÚC DỮ LIỆU PUSH cấu trúc liệu ngăn xếp- stack 1.1.Tiến trình bước đặt thêm phần tử liệu vào ngăn xếp biết đến với tên chức PUSH

Ngày đăng: 27/01/2023, 08:33

Tài liệu cùng người dùng

Tài liệu liên quan