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

Sinh viên thực hiện

  • Upload
    amos

  • View
    64

  • Download
    8

Embed Size (px)

DESCRIPTION

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. - PowerPoint PPT Presentation

Citation preview

Page 1: 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

Page 2: Sinh viên thực hiện

STACK &QUEUE

Page 3: Sinh viên thực hiện

STACK _NGĂN XẾP

Page 4: Sinh viên thực hiện

Đị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

Page 5: Sinh viên thực hiện

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ử đó.

Page 6: Sinh viên thực hiện

Dùng danh sách liên kết để biểu diễn stack

struct Node{

int info;Node *pnext;

};struct List{

Node* Top;};

Page 7: Sinh viên thực hiện

MÔ TẢ

Info n

pnext

Top

Info 2

pnext

Info 1

pnextNULL

Page 8: Sinh viên thực hiện

Khởi tạo

Cho Top trỏ đến NULL

void Init(List&S){

S.Top=NULL;};

Page 9: Sinh viên thực hiện

Kiểm tra rỗng

int Empty(List& S){ if(S.Top==NULL) return 1;//Stack rỗngreturn 0; //Stack khác rỗng}

Page 10: Sinh viên thực hiện

Thêm phần tử vào stack

void Push(List&S , Data x)void Push(List&S , Data x){{

Node *Node * pNew pNew=new Node;=new Node;if ( if ( pNew==NULLpNew==NULL){){cout<<“không đủ bộ nhớ”;cout<<“không đủ bộ nhớ”;

returnreturn;;}} pNew pNew ->info=x;->info=x; pNew pNew ->pnext=S.Top;->pnext=S.Top;S.Top=S.Top= pNew pNew;;

}}

Page 11: Sinh viên thực hiện

Thêm phần tử

TopInfo n

pnext

Info 1pnext

NULL

X

pnext

New_eleTop

Page 12: Sinh viên thực hiện

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;

}

Page 13: Sinh viên thực hiện

Trích phần tử ở đỉnh

Top Info n -1

pnext

Info 1

pnextNULL

Info n

pnextTop

Page 14: Sinh viên thực hiện

Xem phần tử ở đỉnh stack

Data Top(List &S){

if (Empty(S)) return NULL;

return (S.Top->info);}

Page 15: Sinh viên thực hiện

QUEUE- HÀNG ĐỢI

Page 16: Sinh viên thực hiện

Đị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.

Page 17: Sinh viên thực hiện

Các tác vụ chính:

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

Page 18: Sinh viên thực hiện

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;};

Page 19: Sinh viên thực hiện

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

A B Y NULL

Tail

Page 20: Sinh viên thực hiện

Khởi tạo Queue :

Cho con trỏ Head và Tail trỏ đến NULL

void Init(List&Q){

Q.Head= Q.Tail=NULL;}

Page 21: Sinh viên thực hiện

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}

Page 22: Sinh viên thực hiện

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);}

Page 23: Sinh viên thực hiện

Add_Queue

A V w

Head

NULL

Tail Tail

X

Page 24: Sinh viên thực hiện

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;

}

Page 25: Sinh viên thực hiện

Get_Queue

A

Head

NULLC X

TailHead

Page 26: Sinh viên thực hiện

Ú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

Page 27: Sinh viên thực hiện

Đổi từ trung tố sang hậu tố

Giải thuậtInput: 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ố

Page 28: Sinh viên thực hiện

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 }

Page 29: Sinh viên thực hiện

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ố

Page 30: Sinh viên thực hiện

Giải thuậtTa 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);