1. Trang chủ
  2. » Tài Chính - Ngân Hàng

stack và queue mos tài liệu mos bài giảng mos giáo trình mos

5 12 0

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 5
Dung lượng 291,41 KB

Nội dung

[r]

(1)

Tran

STACK QUEUE MC TIÊU

Hoàn tất phần thực hành này, sinh viên có thể:

- Hiểu cách thức sử dụng stack queue sở sử dụng danh sách liên kết để cài đặt

- Hiểu vận dụng cấu trúc stack queue toán đơn giản Thời gian thực hành: 120 phút đến 360 phút

Lưu ý: yêu cầu vận dụng thành thạo danh sách liên kết Lab02 TÓM TT

- Stack (ngăn xếp) queue (hang đợi) cấu trúc liệu dùng để lưu trử phần tử tập hợp theo nguyên tắc đặc biệt thêm phần tử lấy phần tử khỏi cấu trúc

- Stack (last in, first out – LIFO): phần tử vào stack sau cùng, phần tử lấy khỏi stack trước

- Queue (first in, first out – FIFO): phần tử vào queue trước nhất, phần tửđược lấy khỏi queue trước

☺Lab03 phần vận dụng danh sách liên kết thực hành Lab02 để cài đặt Stack Queue (Lưu ý: dùng mảng để cài đặt stack queue, mảng đặc trưng cho chế tĩnh, danh sách liên kết – chếđộng - cấu trúc tốt mảng thực Stack Queue)

Ví dụ: minh họa Stack

+ Phần tử thêm vào đỉnh ngăn xếp

+ Thao tác lấy phần tử khỏi ngăn xếp, ngăn xếp khác rổng phần tửởđầu ngăn xếp lấy ra, ngược lại, ngăn xếp rỗng thao tác lấy phần tử thất bại

Ví dụ: minh họa Queue

STACK

Thêm

Lấy

QUEUE

(2)

Tran

+ Phần tửđược thêm vào ởđầu queue Do vậy, phần tử vào sẽởđáy queue Do vậy, lấy phần tử ra, queue khác rổng phần tửở đáy queue lấy ra, ngược lại, queue bị rỗng thao tác lấy phần tử khỏi queue thất bại

NI DUNG THC HÀNH

Cơ bn

Yêu cầu: cài đặt stack queue danh sách liên kết

Do đặc trưng stack queue, cần xây dựng thao tác thêm phần tử vào stack queue, lấy phần tử khỏi stack queue

Dựa vào nguyên tắc thêm lấy phần tử khỏi stack/queue, ta cần xây dựng hàm sau: - Đối với Stack

o Thêm phần tử: thêm phần tử vào đầu danh sách liên kết

o Lấy phần tử: lấy phần tửởđầu danh sách khỏi danh sách liên kết

(Lưu ý: ta thêm phần tử vào cuối danh sách liên kết, thao tác lấy phần tử, ta thực lấy phần tửở cuối danh sách liên kết)

- Đối với Queue

o Thêm phần tử: thêm vào đầu danh sách liên kết

o Lấy phần tử: lấy phần tửở cuối danh sách liên kết

(Lưu ý: ta thực việc thêm phần tử vào cuối danh sách liên kết lấy ởđầu danh sách liên kết)

Sử dụng tập Lab02 Chương trình mu #include <stdio.h> struct NODE{

int Key;

NODE *pNext; };

NODE* CreateNode(int Data) {

NODE* pNode; pNode = new NODE; if (pNode == NULL)

return NULL;

pNode->Key = Data; pNode->pNext = NULL; return pNode; }

bool AddHead(NODE* &pHead, int Data) {

NODE *pNode;

pNode = CreateNode(Data); if (pNode == NULL)

return false;

if (pHead == NULL) pHead = pNode; else {

(3)

Tran

}

return true; }

NODE* RemoveHead(NODE* &pHead) {

if(pHead == NULL)

return NULL;

NODE* pResult = pHead; pHead = pHead->pNext; return pResult; }

NODE* RemoveTail(NODE* &pHead) {

NODE *pNode;

if(pHead == NULL) //<1> {

return NULL;

}

else if(pHead->pNext == NULL) //<2> {

pNode = pHead; pHead = NULL;

return pNode;

}

pNode = pHead;

while(pNode->pNext->pNext != NULL) //<3> {

pNode = pNode->pNext; }

NODE* pResult = pNode->pNext; pNode->pNext = NULL;

return pResult; }

// -STACK :

// PUSH tương ứng AddHead // POP tương ứng RemoveHead

bool PushStack(NODE* &pStack, int Data) {

return AddHead(pStack, Data); }

NODE* PopStack(NODE* &pStack) {

return RemoveHead(pStack); }

// -QUEUE :

// ENQUEUE tương ứng AddHead // DEQUEUE tương ứng RemoveTail bool EnQueue(NODE* &pQueue, int Data) {

return AddHead(pQueue, Data); }

NODE* DeQueue(NODE* &pQueue) {

(4)

Tran

void main() {

NODE* pStack = NULL; NODE* pQueue = NULL;

int n = 10; while(n!=0) {

PushStack(pStack, n); EnQueue(pQueue, n); n ;

}

NODE* pNode = DeQueue(pQueue);

if(pNode != NULL) //<4>

printf("\nGia tri phan tu (Queue) : %d\n", pNode->Key); else

printf("\nNULL\n"); NODE* pNode2 = PopStack(pStack); if(pNode2 != NULL)

printf("\nGia tri phan tu (Stack) : %d\n", pNode2->Key); else

printf("\nNULL\n"); }

1 Biên dịch đoạn chương trình

2 Thay giá trị n=10 thành n=1 main, đọc giá trị Queue Stack in hình

3 Giải thích <4> giá trị pNode khác NULL, pNode NULL, ý nghĩa trường hợp

4 Giải thích hàm RemoveTail điểm <1>, <2>, <3> cho biết ý nghĩa chúng Sử dụng hàm PushStack, PopStack, EnQueue, DeQueue để cài đặt

a Về Stack: Trong hàm main, thực việc thêm vào giá trị người dùng nhập vào (thực lệnh thêm phần tử vào stack), sau thực lần lệnh lấy giá trị phần tử khỏi stack, có, in giá trị phần tử hình, khơng có (stack rỗng), in hình “STACK RONG, KHONG LAY DUOC PHAN TU”

b Về Queue: Trong hàm main, thực việc thêm vào giá trị người dùng nhập vào (thực lần lệnh thêm phần tử vào queue), sau thực lần lệnh lấy giá trị phần tử khỏi queue, có, in giá trị phần tử hình, khơng có (queue rỗng), in hình “QUEUE RONG, KHONG LAY DUOC PHAN TU”

Áp dng – Nâng cao

1 Cài đặt hàm AddTail để có phiên cài đặt Stack (thêm phần tử vào cuối danh sách lấy phần tử cuối danh sách liên kết) áp dụng phiên khác cài đặt Queue (thêm phần tử vào cuối danh sách liên kết lấy phần tửởđầu danh sách liên kết)

2 Nhận xét cách cài đặt phần (áp dụng – nâng cao) so với chương trình mẫu trường hợp stack queue

3 Sử dụng cấu trúc Stack để chuyển giá trị từ số 10 sang số

(5)

Tran

BÀI TP THÊM

Tìm đường mê cung (thực loang theo chiều rộng <sử dụng queue> loang theo chiều sâu <sử dụng stack>)

Bài toán: cho ma trận mxn, phần tử số Giá trị : có thểđi tới giá trị : không thểđi tới Câu hỏi:

Từ ban đầu có tọa độ (x1, y1) có thểđi tới (x2, y2) khơng?

Ngày đăng: 20/04/2021, 14:58

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w