sinh viên thực hiện

Post on 29-Jan-2016

63 Views

Category:

Documents

8 Downloads

Preview:

Click to see full reader

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

TRANSCRIPT

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

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

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

struct Node{

int info;Node *pnext;

};struct List{

Node* Top;};

MÔ TẢ

Info n

pnext

Top

Info 2

pnext

Info 1

pnextNULL

Khởi tạo

Cho Top trỏ đến NULL

void Init(List&S){

S.Top=NULL;};

Kiểm tra rỗng

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

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

}}

Thêm phần tử

TopInfo n

pnext

Info 1pnext

NULL

X

pnext

New_eleTop

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;

}

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

Top Info n -1

pnext

Info 1

pnextNULL

Info n

pnextTop

Xem phần tử ở đỉnh stack

Data Top(List &S){

if (Empty(S)) return NULL;

return (S.Top->info);}

QUEUE- HÀNG ĐỢI

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

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

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

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

Khởi tạo Queue :

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

void Init(List&Q){

Q.Head= Q.Tail=NULL;}

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}

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

Add_Queue

A V w

Head

NULL

Tail Tail

X

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;

}

Get_Queue

A

Head

NULLC X

TailHead

Ú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

Đổ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ố

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 }

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ố

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

top related