1. Trang chủ
  2. » Công Nghệ Thông Tin

DANH SÁCH LIÊN KẾT - NGĂN XẾP VÀ HÀNG ĐỢI (tt) pot

31 1,9K 17

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 31
Dung lượng 1,29 MB

Nội dung

vào hoặc loại bỏ một phần tử chỉ thực hiện tại một đầu của danh sách, đầu này gọi là đỉnh TOP của ngăn xếp..  Các thao tác trong stack:  Push: chèn phần tử mới vào stack  Pop: lấy phầ

Trang 1

CHƯƠNG IV : CÂY

Trang 2

LIFO: Last In First Out - Vào Sau Ra Trước.

Trang 3

vào hoặc loại bỏ một phần tử chỉ thực hiện tại một đầu của danh sách, đầu này gọi là đỉnh (TOP) của ngăn xếp

LIFO: Last In First Out - vào sau ra trước.

 Các thao tác trong stack:

Push: chèn phần tử mới vào stack

Pop: lấy phần tử đầu stack ra khỏi stack

Top: kiểm tra phần tử đầu stack

Trang 4

pFirst

Trang 5

Khai báo ngăn xếp dạng mảng

# define size 200

struct stack

{

int n;

<Kiểu dữ liệu> e [size];

int Top_idx; //giữ vị trí đỉnh ngăn xếp

};

Khai báo ngăn xếp dạng DSLK

struct stack {

int info;

stack *pNext;

};

Trang 6

Tạo một ngăn xếp rỗng

Hàm trả về phần tử tại đỉnh ngăn xếp Nếu ngăn xếp rỗng thì hàm không xác định.

Chương trình con xoá một phần tử tại đỉnh ngăn xếp.

Chương trình con thêm một phần tử x vào đầu ngăn xếp.

Hàm kiểm tra ngăn xếp rỗng Hàm cho kết quả 1 (true) nếu ngăn xếp rỗng và 0 (false) trong trường hợp ngược lại

Trang 7

InitializeStack: Khởi động một Stack Ban đầu Stack chưa có phần tử.

void InitializeStack ( stack* & Top)

{

Top = NULL;

}

EmptyStack( ): Kiểm tra Stack rỗng.

int EmptyStack ( stack * Top)

{

return (Top == NULL ? 1 : 0);

Trang 8

2.1 Cài đặt bằng DSLK

Push( ): thêm một phần tử có nội dung x vào đầu Stack.

void Push ( stack* & Top, int x)

Trang 9

Pop( ): Lấy phần tử đầu danh sách.

void Pop ( stack* & Top)

Trang 10

return (-1);

} }

Trang 11

DeleteAllStack( ): Xoá toàn bộ stack.

void DeleteAllStack ( stack* & Top)

Trang 12

<Kiểu dữ liệu> e [size ];

int Top_idx; //giữ vị trí đỉnh ngăn xếp

} ;

4

13 8

42 2

Trang 13

Khởi tạo một Stack Ban đầu Stack chưa có phần tử.

void InitializeStack( stack &S)

{

S.Top_idx = size;

}

Kiểm tra Stack rỗng.

int EmptyStack ( stack S)

{

return S.Top_idx == size;

Kiểm tra Stack đầy.

int FullStack ( stack S) {

return S.Top_idx == 0;

Trang 14

2.2 Cài đặt bằng mảng

Thêm một phần tử có nội dung x vào đầu Stack.

void PushStack( int X , stack & S)

Trang 15

Lấy ra phần tử đầu Stack

void PopStack( stack &S)

Trang 16

2.2 Cài đặt bằng mảng

Lấy giá trị phần tử đầu Stack.

int TopStack( stack S)

Trang 17

Xoá toàn bộ stack.

Gọi Hàm khởi tạo vì dãy không cần phải xóa phần tử

Trang 18

 Giải bài toán tháp HN

Có ba cọc A,B,C Khởi đầu cọc A có một số đĩa xếp theo thứ tự nhỏ dần lên trên đỉnh Bài toán đặt ra là phải chuyển toàn bộ chồng đĩa từ A sang B Mỗi lần thực hiện chuyển một đĩa từ một cọc sang một cọc khác và không được đặt đĩa lớn nằm trên đĩa nhỏ

Trang 19

if (N == 1) cout << "Chuyen 1 dia tu : " << A << " sang " << B << "\n";

Trang 20

Lấy giá trị phần tử đầu Stack.

int Top( Stack S) {

if (!EmptyStack(S))

return S.e[S.Top_idx];

else { cout << “Error! Stack is empty";

} }

Trang 21

if (N==1) cout << "Chuyen 1 dia tu : " << A << " sang " << B << "\n"; else

Trang 23

cuối hàng (REAR), còn phép loại bỏ thì thực hiện ở đầu kia của danh sách, gọi là đầu hàng (FRONT) Xếp hàng mua vé xem phim là một

hình ảnh trực quan của khái niệm trên, người mới đến thêm vào cuối hàng còn người ở đầu hàng mua vé và ra khỏi hàng, vì vậy hàng còn

được gọi là cấu trúc FIFO (first in - first out) hay "vào trước - ra trước".

14 13

8 42

1

FRONT REAR

Trang 24

Khai báo hàng đợi bằng mảng

# define size 200

struct Queue

{

int n;

<Kiểu dữ liệu> e[size ];

int Front; //giữ vị trí đầu hàng đợi

int Rear; //giữ vị trí cuối hàng đợi

Trang 25

Khởi động một queue Ban đầu queue chưa có phần tử.

void MakeNullQueue( Queue & Q)

{

Q.Front = NULL;

Q.Rear = NULL;

}

Kiểm tra Queue rỗng.

int EmptyQueue( Queue Q)

{

return (Q.Front == NULL ? 1 : 0);

Trang 26

2.1 Cài đặt bằng DSLK

Thêm một phần tử có nội dung x vào Queue

void EnQueue ( int x, Queue & Q )

Trang 27

Lấy ra phần tử đầu Queue

void DeQueue ( Queue &Q)

Trang 28

8 7 6 5 4 3 2 1 0

FRONT

REAR

14 13

8 42

1

Trang 29

void MakeNullQueue( Queue &Q)

{

Q.Front = -1;

Q.Rear = -1

}

Kiểm tra Queue rỗng.

int EmptyQueue( Queue Q)

{

return Q.Front = -1;

}

Kiểm tra Queue đầy.

int FullQueue( Queue Q ) {

return (Q.Rear - Q.Front + 1) == size; }

Trang 30

Thêm một phần tử có nội dung x vào Queue

void EnQueue(int X,Queue &Q)

{ //Di chuyen tinh tien ra truoc Front -1 vi tri

for(int i = Q.Front; i <= Q.Rear; i++)

Q.e[i-Q.Front] = Q.e[i]; //Xac dinh vi tri Rear moi

Q->Rear = MaxLength – Q.Front-1; Q.Front=0;

} //Tang Rear de luu noi dung moi

Q.Rear = Q.Rear+1;

Q.e[Q.Rear] = X; }

cout << “Error: Queue is full !";

}

Trang 31

void DeQueue( Queue & Q)

Ngày đăng: 02/08/2014, 18:21

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w