Hàng ñợi vàNgănxếp (Queue and Stack) Lê Sỹ Vinh Bộ môn Khoa Học Máy Tính – Khoa CNTT ðại Học Công Nghệ - ðHQGHN Email: vinhioi@yahoo.com Hàng ñợi (Queue) Hàng ñợi là gì? Là một danh sách nhưng các phép toán chỉ ñược thực hiện ở hai ñỉnh của danh sách. Một ñỉnh gọi là ñầu hàng, ñỉnh còn lại gọi là cuối hàng. Ví dụ: • Xếphàng mua vé tàu xe, giao dịch với ngânhàng Tính chất: Vào trước ra trước (First in First Out: FIFO) Hàng ñợi Trừu tượng hóa cấu trúc hàng ñợi 1. Mô tả dữ liệu A = (a 0 , a 1 , …, a n ) trong ñó: – a o : Phần tử ở ñầu của hàng ñợi A – a n : Phần tử ở cuối của hàng ñợi A– a n : Phần tử ở cuối của hàng ñợi A Ví dụ: A = (‘Vinh’, ‘Tuấn’,. ‘Ánh’) trong ñó: ‘Vinh’: ðầu hàng ñợi ‘Ánh’: Cuối hàng ñợi Các phép toán trên hàng ñợi • empty (A): Kiểm tra hàng ñợi có rỗng hay không • length (A): Cho biết số phần tử của hàng ñợi • EnQueue (A, x): Thêm phần tử x cuối hàng ñợi. A = (a 0 , a 1 ,…, a n ) → A = (a 0 ,a 1 ,…,a n , x) Ví dụ: A = (1,3,5) EnQueue (A, 4) → A = (1, 3, 5, 4) • DeQueue (A): Loại phần tử ở ñầu hàng ñợi A = (a 0 , a 1 ,…, a n-1 , a n ) → A = (a 1 ,…,a n ) Ví dụ: A = (1,3,5) DeQueue (A) → A = (3, 5) • GetHead (A): Lấy phần tử ở ñầu hàng ñợi A = (a 0 , a 1 ,…, a n-1 , a n ) → getHead (A) → a 0 Ví dụ: A = (1,3,5) getHead (A) → 1 Bài tập 1. Viết chương trình cài ñặt cấu trúc hàng ñợi bằng mảng và danh sách liên kết 2. Tính ñộ phức tạp cho cài ñặt ở câu 1 3. ðọc và cài ñặt hàng ñợi bằng màng tròn Ngănxếp (stack) Ngănxếp là gì? Là một danh sách nhưng các phép toán chỉ ñược thực hiện ở một ñỉnh của danh sách. Ví dụ: – Lấy hàng hóa trong kho – Tìm các cặp dấu ngoặc tương ứng Tính chất: Vào trước ra sau (First In Last Out: FILO) Ngănxếp Trừu tượng hóa cấu trúc ngănxếp 1. Mô tả dữ liệu A = (a 0 , a 1 , …, a n ) trong ñó a n là phần tử ở ñỉnh của ngănxếp A Ví dụ:Ví dụ: A = (1, 2, 3, 3, 4, 5) → 5: Phần tử ở ñỉnh ngănxếp A = (‘Vinh’, ‘Tuấn’,. ‘Ánh’) → Ánh: Phần tử ở ñỉnh ngănxếp 2. Mô tả các phép toán trên cấu trúc ngănxếp • empty (A): Kiểm tra ngănxếp có rỗng hay không • length (A): Cho biết số phần tử của ngănxếpNgănxếp (stack) • push (A, x): Thêm phần tử x ñỉnh ngăn xếp. A = (a 0 , a 1 ,…, a n ) → A = (a 0 ,a 1 ,…,a n , x) Ví dụ: A = (1,3,5) push (A, 4) → A = (1, 3, 5, 4) • Pop (A): Loại phần tử ở ñỉnh ngăn xếp• Pop (A): Loại phần tử ở ñỉnh ngănxếp A = (a 0 , a 1 ,…, a n-1 , a n ) → A = (a 0 ,a 1 ,…,a n-1 ) Ví dụ: A = (1,3,5) pop (A) → A = (1, 3) • GetTop (A): Lấy phần tử ở ñỉnh ngănxếp A = (a 0 , a 1 ,…, a n-1 , a n ) → getTop (A) → a n Ví dụ: A = (1,3,5) getTop (A) → 5 Bài tập 1. Viết chương trình cài ñặt cấu trúc ngănxếp bằng mảng và danh sách liên kết 2. Viết chương trình tìm tất cả các cặp dấu ngoặc tương ứng trong một chương trình C++ 3. Với mỗi phép toán, tính ñộ phức tạp . phép toán trên cấu trúc ngăn xếp • empty (A): Kiểm tra ngăn xếp có rỗng hay không • length (A): Cho biết số phần tử của ngăn xếp Ngăn xếp (stack) • push (A,. ñợi bằng mảng và danh sách liên kết 2. Tính ñộ phức tạp cho cài ñặt ở câu 1 3. ðọc và cài ñặt hàng ñợi bằng màng tròn Ngăn xếp (stack) Ngăn xếp là gì? Là