- Sau khi bổ sung:
rõ thuật toán chuyển đổi từ hệ cơ số 10 sang hệ cơ số 2 Ví dụ để chuyển số nguyên
97 sang hệ nhị phân (cơ số 2, chỉ gồm toàn số 0 và †) ta làm như sau:
97 2 1 48 2 1 48 2 `*- 0 24 2
Tuy ng >>.
Ta thực hiện phép chia liên tiếp cho 2, cho đến khi thương số thu được bằng
không. Các số dư thu được nếu viết theo thứ tự ngược lại chính là số 97 biểu diễn
trong hệ nhị phân (số 11000017). Như vậy, mỗi khi thực hiện xong một phép chia, ta sẽ lưu số dự vào trong ngăn xếp cho đến khi kết thúc. Thứ tự các số dư này lấy dân ra sẽ là số nhị phân cần tìm, ngăn xếp được tổ chức móc nối trong bộ nhớ.
JF YrrYttinkeiiereskkkikrTrilll14441011249X1111111xE r/ #include “stdio.h” #include “conio.h” #include "alloc.h” #include ”stdlib.h” †ypedef struct NP {
unsigned char Bit; struct NP *Tiep;
} NhiPhan; /* Định nghĩa kiểu dữ liệu nhị phân */
NhiPhan *Dinh= NULL; /* Đỉnh ngăn xếp */
Jề TRE EKAKTOKEEKEEEEEERSSE.S.TERESASEEEEAELAESRA01001'4.t/ int main()
NhiPhan *P; /* con trổ dùng để xin nút mới */
intn;
unsigned char Du;
printf(“nNhap vao so nguyen”); scanf(“%d”, &n); /* Bắt đầu chia */ do { Du> n%2; n/=2, If((P= (NhiPhan")(malloo(sizeof(NhiPhan))))==NULL) { printf(“nKhong du bo nho"); @xit(-1); else P->Bit=Du;
/“ Đưa phần tử số dư vừa tính vào ngăn xếp */ P->Tiep= Dinh;
Dinh= P; /* Chỉnh con trỏ Dinh trỏ vào đỉnh ngăn xếp */ }
While(n!z0); /* Chỉ kết thúc khi số bị chia đã bằng không */ Đưa kết quả ra màn hình*/
printf(“So nguyen da cho co bieu dien trong he co so hai la: "),
/* Lấy từng phần tử ra khỏi ngăn xếp */
while(Dinh†=NULL) /* Còn chựa gặp đáy ngăn xếp */
{
printf(“% 1d", Dinh->Bif); /* Hiện từng bít */ P=Dinh;
Dinh=Dinh->Tiep;
free(P); /“ Hiện xong, giải phóng vùng nhớ */
} getch(), getch(), return 0; 09 1011101061511011111.1011K1.21S-.111110111141111111 1 xxxrex , Bài tập:
Viết lại chương trình trên nhưng tổ chức ngăn xếp dưới dạng danh sách tuyến tính. 3.2.6. Hàng đợi (Queue)
1. Khái niệm
Hàng đợi là một đạng đặc biệt của danh sách (uyến tính hoặc móc nối) mà phép bổ sung được thực hiện ở một đầu (gọi tà tối 4u), còn phép loại bỏ được thực hiện ở một đầu khác (gọi là lối trước). Việc xếp hàng để mua vé xem phim cho ta
một hình ảnh rõ nét của hàng đợi. Những người đến trước (xếp hàng trước) thì được mua trước (ra về trước - loại bỏ ra khỏi hàng trước), những người đến sau thì phải mua sau ứ khỏi hàng sau). Chính vì hàng đợi hoạt động theo nguyên tắc “Vào 117
(rước ra trước” này mà nó cồn có mệt tên khác là cấu trúc dữ liệu kiểu F/FO (Ptrd-In-Firsr-Ou,
2. Cấm trúc lưu trữ của hàng đợi trong bộ nhớ
Nếu hàng đợi @ được lưu trữ kế tiếp trong bộ nhớ, người ta thường lưu trữ nó đưới dạng của một véc tợ (kích thước mm) theo nguyên tắc sau:
- Mỗi phần tử của hàng đợi sẽ được lưu trữ trong một phần tử của véc tơ V, - Lối vào của hàng đợi được đánh dấu-bằng một biến Vao lưu giữ chỉ số của phần tử trong V tương ứng với phần tử cuối cùng của hàng đợi.
- Lối ra của hàng đợi được đánh dấu bằng một biến #ø lưu giữ chỉ số của phần tử trong V tương ứng với phần tử đầu tiên của hàng đợi.
- Khi biến Vaø < Ra thì hàng đợi rỗng.
- Thao tác bổ sung (đưa vào lối vào) trên hàng đợi thực chất là tiến hành tăng biến Vøø lên 1 (mở rộng hàng đợi về bên phải của V) rồi đưa nội dung của phần tử cần bổ sung vào vị trí V'/VaoJ,
- Thao tác loại bỏ (đưa ra khói lối ra) trên hàng đợi thực chất là tiến hành lấy nội dung của phần tử V/#8a/ để xử lí, sau đó tăng biến Ra lên 1 (rhu hẹp hàng đợi về bên phải của V).
1ð] [ | Jx]
[-TSTE
Vao=i-]