1 / 30

Sinh viên thực hiện

Sinh viên thực hiện. HOÀNG TƯỜNG MSSV:K30.101.110 NGUYỄN THANH TÙNG MSSV:K30.101.107. STACK &QUEUE. STACK _NGĂN XẾP. Định nghĩa. STACK là vật chứa các đối tượng làm việc theo cơ chế LIFO(Last In First Out),nghĩa là đối tượng được bỏ vào stack sau cùng sẽ được lấy ra trước.

amos
Download Presentation

Sinh viên thực hiện

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Sinh viên thực hiện • HOÀNG TƯỜNG • MSSV:K30.101.110 • NGUYỄN THANH TÙNG • MSSV:K30.101.107

  2. STACK &QUEUE

  3. STACK _NGĂN XẾP

  4. Định nghĩa STACK là vật chứa các đối tượng làm việc theo cơ chế LIFO(Last In First Out),nghĩa là đối tượng được bỏ vào stack sau cùng sẽ được lấy ra trước

  5. Các tác vụ chính • Init :khởi tạo stack. • Empty :kiểm tra stack rỗng hay không. • Push :thêm phần tử vào stack. • Pop: trích phần tử của stack. • Top :xem thông tin của phần tử ở đỉnh stack, nhưng không hủy phần tử đó.

  6. Dùng danh sách liên kết để biểu diễn stack • struct Node • { • int info; • Node *pnext; • }; • struct List • { • Node* Top; • };

  7. Info n pnext Top Info 2 pnext Info 1 pnext NULL MÔ TẢ

  8. Khởi tạo • Cho Top trỏ đến NULL • void Init(List&S) • { • S.Top=NULL; • };

  9. Kiểm tra rỗng • int Empty(List& S) • { • if(S.Top==NULL) return 1;//Stack rỗng • return 0; //Stack khác rỗng • }

  10. Thêm phần tử vào stack • void Push(List&S , Data x) • { • Node * pNew=new Node; • if ( pNew==NULL){ • cout<<“khôngđủbộnhớ”; return; • } • pNew ->info=x; • pNew ->pnext=S.Top; • S.Top= pNew; • }

  11. X pnext Top Top New_ele Info n pnext Info 1 pnext NULL Thêm phần tử

  12. Trích phần tử ở đỉnh stack • int Pop(List& S) • { • if(Empty(S)) { • cout<<“Danh sách rỗng”<<endl; • return MAXINT;} • Node*p=S.Top; • S.Top=p->Pnext; • int x=p->info; • delete p; • return x; • }

  13. Info n pnext Top Top Info n -1 pnext Info 1 pnext Trích phần tử ở đỉnh NULL

  14. Xem phần tử ở đỉnh stack • Data Top(List &S) • { • if (Empty(S)) return NULL; • return (S.Top->info); • }

  15. QUEUE- HÀNG ĐỢI

  16. Định nghĩa: QUEUE là một vật chứa các đối tượng làm việc theo cơ chế FIFO(First In First Out),nghĩa là các đối tượng được nhập vào trước sẽ được lấy ra trước.

  17. Các tác vụ chính: • Init :khởi tạo Queue • Empty :kiểm tra Queue có rỗng không • Add_Queue :thêm một phần tử vào cuối Queue • Get_Queue :trích phần tử ở đầu Queue

  18. Dùng danh sách liên kết để biểu diễn hàng đợi . • struct Node • { data info; • Node *next; • }; • struct List • { Node *Head; • Node*Tail; • };

  19. Tail B Y A NULL Mô tả • Trong danh sách liên kết ta dùng hai biến con trỏ kiểu Node là Head và Tail để trỏ vào phần tử ở đầu Queue và cuối Queue Head

  20. Khởi tạo Queue : • Cho con trỏ Head và Tail trỏ đến NULL • void Init(List&Q) • { • Q.Head= Q.Tail=NULL; • }

  21. Kiểm tra Queue rỗng • int Empty(List&Q) • { • if (Q.Head==NULL) • return 1;// Queue rỗng • return 0;//Queue khác rỗng • }

  22. Thêm một phần tử vào Queue: • Ta sử dụng : các hàm GetNode,và hàm AddTail của danh sách liên kết • void Add_Queue(List&Q,data x) • { • Node *p; • p=GetNode(x); • AddTail(Q,p); • }

  23. Tail Tail Head A V w X Add_Queue NULL

  24. Trích phần tử của Queue : • Ta sử dụng hàm RemoveHead của danh sách liên kết • data Get_Queue(List&Q); • { • Data x; • x=RemoveHead(Q); • return x; • }

  25. Tail Head Head X A C Get_Queue NULL

  26. Úng dụng của Stack & Queue • Đổi từ biểu thức trung tố sang biểu thức hậu tố • Tính giá trị của biểu thức hậu tố • Tìm chu trình Euler trong đồ thị Euler

  27. Đổi từ trung tố sang hậu tố Giải thuật Input: Queue infix chứa biểu thức dạng trung tố Output: Queue posfix chứa biểu thức dạng hậu tố

  28. Giải thuật Ta sử dụng stack S để chứa tóan tử và ‘(‘ trong quá trình xứ lí Ta gán độ ưu tiên của tóan tử *, / là 1;của +,- là 0; while(!empty(infix)) { kt=get_queue(infix); nếu kt là tóan hạng : bỏ vào queue posfixt; nếu kt=’(‘ :bỏ vào stack S; nếu kt=‘)’ : lần lượt lấy các tóan tử top(S) bỏ vào queue postfix cho đến khi gặp ‘(‘;sau đó lấy ‘(‘ ra khỏi stack nếu kt là toán tử {+,-,*,/ } : trong khi độ ưu tiên của kt <=độ ưu tiên của top(S) thì lấy top(S) bỏ vào queue posfix sau đó bỏ kt vào stack S } while(!empty(S)) {lấy top(S) bỏ vào queue posfix }

  29. Tính giá trị biểu thức hậu tố Input: Queue posfix chứa biểu thức dạng hậu tố Output: giá trị của biểu thức hậu tố

  30. Giải thuật Ta sử dụng thêm stack S làm trung gian để tinh tóan while(!empty(posfix) { kt=get_queue(posfix); Nếu kt là tóan hạng bỏ kt vào stack S; Nếu kt là tóan tử lần lượt lấy ở đỉnh stack hai tóan hạng,lấy phần tử thứ hai thực hiện phép tính với phần tử thứ nhất ; lấy kết quả bỏ vào stack S; } Kết quả biểu thức bằng pop(S);

More Related