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

Ngôn ngữ lập trình C - Chương 7 - Bài 2. Stack docx

10 443 0
Tài liệu đã được kiểm tra trùng lặp

Đ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 10
Dung lượng 580,08 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Khái niệm stack 2.. Khái niệm stack Stack ngăn xếp thao tác xử lý chỉ được thực hiện ở phía đáy cuối của nó Out – “Vào sau ra trước” • Đẩy vào PUSH... Khái niệm stack Ứng dụng của Sta

Trang 1

Chương 7

Bài 2 Stack

ĐỖ BÁ LÂM

ViỆN CNTT&TT, TRƯỜNG ĐHBK HÀ NỘI

Nội dung

1 Khái niệm stack

2 Xây dựng stack

2.1 Sử dụng mảng

2.2 Sử dụng danh sách liên kết

2

1 Khái niệm stack

Stack (ngăn xếp)

thao tác xử lý chỉ được thực hiện

ở phía đáy (cuối) của nó

Out) – “Vào sau ra trước”

• Đẩy vào PUSH

Trang 2

Đỉnh

1 Khái niệm stack

A

A

B

A B

A

Push(A)

Stack có 1 phần tử:

A

Pop() Pop()

Stack rỗng

Push(B)

Stack có 2 phần tử:

A B

Stack còn 1 phần tử:

A

Stack lại rỗng

1 Khái niệm stack

Ứng dụng của Stack

Lưu trữ các trang web đã từng được duyệt

trên Web browser

Cài đặt thao tác Undo trong các phần mềm

soạn thảo

Lưu danh sách các lời gọi hàm trong Java

Virtual Machine

Trang 3

Ghi nhớ

Stack được hình dung như một ngăn xếp

chứa các quyển sách với 2 thao tác đưa

vào và lấy ra theo nguyên tắc:

 Quyển sách nào được đưa vào sau sẽ lấy ra

trước – LIFO (Last In First Out)

Ví dụ - Bài toán chuyển cơ số

Nguyên tắc đổi một số nguyên từ thập

phân sang nhị phân:

Các số dư lấy ra sau được hiển thị trước

Cơ chế sắp xếp của Stack

Giải pháp

Dùng stack để lưu trữ số dư qua từng

phép chia:

Khi thực hiện phép chia: Đưa số dư vào

Stack

Khi hiển thị kết quả: Lấy chúng lần lượt từ

Stack

Trang 4

Giải pháp

0 PUSH

0 0 0 0 1

0 0 1 1

0 0 1 1 1

0 0 1 1

0 0 0

0

0

POP

Giải thuật

1 Nhap N

2 while N != 0

R = N% 2; //Tính số dư trong phép chia N cho 2

PUSH (S, R); //Đẩy R vào đỉnh Stack S

N=N/2; //Thay N bằng N/2

3 while S chưa rỗng

POP(S,R); //Lấy phần tử từ stack đưa vào R

Hien_thi R;

2 Xây dựng Stack

Lưu trữ được các đối tượng dữ liệu (quyển

sách)

Xây dựng 2 thao tác Push và Pop theo

nguyên tắc LIFO

Có hai cách cài đặt stack

Sử dụng mảng

Sử dụng danh sách liên kết

Trang 5

2.1 Sử dụng mảng

mảng

13

Đáy Stack

2.1 Sử dụng mảng

#define MAX 100 //So phan tu lon nhat

cua Stack

//Khai bao Stack va T la 2 bien toan cuc

ElemType Stack[MAX];

int T=-1;

14

2.1 Sử dụng mảng

Stack được biểu diễn thông qua mảng S[MAX]

int push(ElemType N){

if (T==MAX-1) return 0;

else{ //mảng chưa đầy

T++;

S[T]=N;

}

Trang 6

2.1 Sử dụng mảng

 int pop(ElemType *N){

if (T== -1)

return 0;

else{

*N = S[T ];

return 1;

}

}

2.2 Sử dụng danh sách liên kết

Stack là cấu trúc LIFO (Last In First Out)

Thao tác Push, Pop?

17

Head

2.2 Sử dụng danh sách liên kết

Push

Thêm một nút vào đầu danh sách

Pop

Lấy giá trị nút đầu tiên trong danh sách

Loại bỏ nút này khỏi danh sách

Trang 7

2.2 Sử dụng danh sách liên kết

struct node { ElemType data;

struct node *next;

};

//Khai báo con trỏ đầu là biến toàn cục

struct node *top;

void push(ElemType N) { struct node *temp;

temp=(struct node *) malloc(sizeof(struct node));

temp->data = N;

temp->next = top;

top = temp;

}

7

1

8

\

top

45

Temp

Push

void push(ElemType N) { struct node *temp;

temp=(struct node *) malloc(sizeof(struct node));

temp->data = N;

temp->next = top;

top = temp;

7

1

8

top

45

Temp

Push

Trang 8

void push(ElemType N) { struct node *temp;

temp=(struct node *) malloc(sizeof(struct node));

temp->data = N;

temp->next = top;

top = temp;

}

7

1

8

\

top

45

Temp

Push

7

1

8

\

45

top Temp int pop(ElemType *N){

struct node *temp;

if(top==NULL) return 0;

else{

*N = top->data;

temp = top;

top = top->next;

free(temp);

return 1;

} }

Giá trị của thành phần top cần lưu lại trước khi giải phóng vùng nhớ

Pop

7

1

8

45

top Temp int pop(ElemType *N){

struct node *temp;

if(top==NULL) return 0;

else{

*N = top->data;

temp = top;

top = top->next;

free(temp);

return 1;

}

Pop

Trang 9

1

8

\

top Temp int pop(ElemType *N){

struct node *temp;

if(top==NULL) return 0;

else{

*N = top->data;

temp = top;

top = top->next;

free(temp);

return 1;

} }

Pop

Bài toán

Demo dS_Array.c, dS_List.c

Bài tập 1

Viết chương trình chuyển một số nguyên

dương từ hệ cơ số 10 sang hệ cơ số 2 sử

dụng stack (bằng mảng và danh sách liên kết)

Bài toán

Bài tập 2 Cộng hai số nguyên lớn

Kiểu dữ liệu số nguyên chỉ biểu diễn số trong

phạm vi nhất định

Mục đích: thực hiện thao tác cộng, trừ, nhân,

chia trên các số nằm ngoài phạm vi biểu diễn

Trang 10

Bài toán

Thực hiện phép cộng trên hai số nguyên

“lớn”

Hai số được lưu dưới dạng xâu kí tự

28

Bài toán

Cải tiến

Trong cách xây dựng stack bằng mảng, thay

vì tách rời mảng và biến T chúng ta định

nghĩa một cấu trúc gồm 2 trường là mảng và

biến T này

Áp dụng làm lại các bài tập ở trên

29

Thảo luận

Ngày đăng: 01/08/2014, 17:20

TỪ KHÓA LIÊN QUAN

w