b Viết các phép toán bổ sung một phần tử và lấy ra một phần tử trong mộtdanh sách liên kết đơn, cho ví dụ minh họa.. b Viết phép toán bổ sung một phần tử trong một danh sách được tổ chức
Trang 1ĐỀ CƯƠNG ÔN TẬP HỌC PHẦN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
a) Danh sách liên kết đơn là gì? Trình bày cách tổ chức
b) Viết các phép toán bổ sung một phần tử và lấy ra một phần tử trong mộtdanh sách liên kết đơn, cho ví dụ minh họa
Câu 5
Cho dãy A gồm n phần tử nguyên a1, a2, , an (các phần tử khác nhau) Hãy xâydựng thuật toán tìm phần tử lớn thứ k trong dãy A theo các bước sau đây:
1 Biểu diễn cấu trúc dữ liệu;
2 Mô tả thuật toán;
3 Ví dụ mô phỏng
Câu 6
a) Trình bày cấu trúc dữ liệu danh sách được tổ chức dưới dạng mảng
b) Viết phép toán bổ sung một phần tử trong một danh sách được tổ chức dạngmảng, cho ví dụ minh họa
Trang 2Câu 7
Cho file văn bản bất kỳ Hãy xây dựng thuật toán tìm từ trong file xuất hiệnnhiều nhất theo các bước sau:
1 Biểu diễn cấu trúc dữ liệu;
2 Mô tả thuật toán;
3 Ví dụ mô phỏng
Câu 8
a) Trình bày cấu trúc dữ liệu danh sách liên kết đôi
b) Viết các phép toán lấy ra một phần tử trong một danh sách liên kết đôi, cho
ví dụ minh họa
Câu 9
Cho hai danh sách móc nối L1 và L2, các phần tử thuộc kiểu số nguyên đượcsắp theo thứ tự tăng dần Hãy thiết kế thuật toán xây dựng danh sách L từ hai danhsách trên sao cho danh sách L cũng có thứ tự tăng dần
Câu 10
a) Trình bày cấu trúc dữ liệu danh sách liên kết vòng một chiều?
b) Viết phép toán bổ sung một phần tử trong một danh sách liên kết vòngmột chiều, cho ví dụ minh họa?
Câu 11
Hai từ được gọi là Anagram của nhau nếu từ này có thể nhận được từ từ kiabằng cách thay đổi trật tự các chữ cái, ví dụ Read, dare là hai từ Anagarm củanhau Hãy xây dựng thuật toán kiểm tra xem hai từ có phải là Anagram của nhauhay không theo các bước sau:
1 Biểu diễn cấu trúc dữ liệu;
2 Mô tả thuật toán;
3. Ví dụ mô phỏng
Câu 12
a) Trình bày cấu trúc dữ liệu danh sách liên kết vòng hai chiều
b) Viết các phép toán bổ sung một phần tử trong một danh sách liên kết vònghai chiều, cho ví dụ minh họa
Trang 3Xâu kí tự được gọi là xâu chuẩn nếu thứ tự xuất hiện của các dấu đóng/mởngoặc tuân thủ theo nguyên tắc đóng mở của biểu thức toán học
Ví dụ: (()()); ()((()())()) : là các xâu chuẩn
()); (()()))(() : là các xâu không chuẩn
Hãy thiết kế thuật toán và viết hàm kiểm tra xem một xâu có phải ở dạng xâuchuẩn hay không, cho ví dụ minh họa các bước thực hiện
1 Biểu diễn cấu trúc dữ liệu;
2 Mô tả thuật toán;
3 Ví dụ mô phỏng
Câu 16
Cho một stack s, giả sử đã có các phép toán push(s,x) (đẩy phần tử x vào stack s),pop(s,x) (lấy phần tử x từ đỉnh stack s) Hãy xây dựng thuật toán và viết hàm lấyphần tử thứ k kể từ đỉnh của stack (được phép sử dụng stack trung gian) sao chocác phần tử khác vẫn được bảo toàn thứ tự Cho ví dụ mô phỏng
Câu 18
Cho file văn bản bất kỳ chứa các số nguyên, giả sử đã có các phép toán bổ sungphần tử vào cây tìm kiếm nhị phân Hãy thiết kế thuật toán thuật toán xây dựngcây tìm kiếm nhị phân có khoá là các số nguyên trong file văn bản đã cho theo cácbước sau đây:
a) Biểu diễn dữ liệu;
b) Biểu diễn thuật toán;
c) Ví dụ mô phỏng.
Trang 4a) Biểu diễn dữ liệu;
b) Hàm tìm kiếm (ngôn ngữ tuỳ chọn, nếu Q xuất hiện trong P thì trả về vị tríxuất hiện đầu tiên, ngược lại trả về không);
c) Ví dụ mô phỏng
Câu 21
Cho hai mảng nguyên X,Y các phần tử được sắp theo thứ tự tăng dần Hãy lậpthuật toán xây dựng dãy Z từ hai dãy đã cho sao cho Z cũng có thứ tự tăng dầntheo các bước sau:
a) Biểu diễn cấu trúc dữ liệu;
b) Mô tả thuật toán;
c) Ví dụ mô phỏng
Câu 22
a) Các phương pháp duyệt cây theo thứ tự preorder, inorder, posorder
b) Viết hàm duyệt cây theo thứ tự tương ứng, cho ví dụ mô phỏng
Câu 23
Cho danh sách liên kết (DSLK) đơn với con trỏ ngoài head trỏ tới đầu DSLK, và P
là con trỏ trỏ tới một thành phần của DSLK đó Hãy viết ra các mẫu hàm (thuậttoán) thực hiện các nhiệm vụ sau:
1 Xen thành phần mới chứa dữ liệu d vào trước P;
Trang 5để xây dựng danh sách L từ hai danh sách L1 và L2 sao cho danh sách L cũng cóthứ tự tăng dần Cho ví dụ mô phỏng.
Câu 25: Cho khai báo sau:
struct Stack { int data;
node *next;
};
struct Stack *top;
Hãy sử dụng Stack để xây dựng hàm Daoso có chức năng đảo ngược một số N.Cho ví dụ minh họa
Câu 26: Cho một ngăn xếp được khai báo như sau:
Câu 27: Với khai báo như trong câu 26 Hãy sử dụng Stack S để xây dựng hàm
Daoxau có chức năng đảo ngược một xâu ký tự St Cho ví dụ minh họa
Ví dụ: St = “abcde” thì xâu đảo ngược là “edcba”
Câu 28
a) Hãy đưa ra cấu trúc dữ liệu biểu cách biểu diễn cây Mô tả CTDL biểudiễn cây theo cách đó bằngcác khai báo trong C, C + + hoặc Java
b) Cho cây:
Trang 6Hãy viết ra danh sách các đỉnh khi duyệt cây theo các thứ tự preorder,inorder và postorder.
Câu 29
a) Trình bày ý tưởng và cho ví dụ minh họa thuật toán sắp xếp nhanhQuicksort
b) Cài đặt thuật toán sắp xếp nhanh Quicksort
Câu 30 : Có khai báo sau:
Typedef struct Node
{ int data; // Data là kiểu đã định nghĩa trước
Node * link; //con trỏ chỉ đến cấu trúc NODE
Viết hàm chèn một nút mới có giá trị x vào đầu, cuối danh sách liên kết đơn
L Cho ví dụ minh họa
Câu 31 Các chiến lược thiết kế thuật toán Áp dụng cho các bài toán thực tế Câu 32 Các phương pháp đánh giá độ phức tạp của thuật toán Bài tập áp
dụng
Câu 33 Các thuật toán tìm kiếm tuần tự và tìm kiếm nhị phân (ý tưởng, thuậttoán, ví dụ mô phỏng)
KJ
I
HG
FE
D
cB
a
A
Trang 7Câu 34
a) Trình bày các phương pháp biểu diễn đồ thị (ma trận kề, danh sách, ma
trận trọng số), cho ví dụ minh họa
b) Trình bày thuật toán tìm kiếm trên đồ thị theo chiều sâu, cho ví dụ mô
phỏng các bước thực hiện của thuật toán
Câu 35: Có khai báo sau:
Typedef struct Node
{ int data; // Data là kiểu đã định nghĩa trước
Node * link; //con trỏ chỉ đến cấu trúc NODE
Viết hàm thay thế một nút mới có giá trị x cho nút đang được trỏ bởi con trỏ
P trong danh sách liên kết đơn
Câu 36: Cho khái báo như sau:
Anh chị hãy viết các hàm:
a) Đếm số node lá trong cây T;
b) Tạo mảng A (các phần tử là các số nguyên) có số phần tử là số node lá của cây T, mỗi phần tử mang giá trị là giá trị của các node
Câu 37: Có khai báo sau:
Typedef struct Node
{ int data; // Data là kiểu đã định nghĩa trước
Node * link; //con trỏ chỉ đến cấu trúc NODE
};
typedef struct List // kiểu danh sách liên kết
{ NODE* first;
Trang 8NODE* last;
} LIST;
Trình bày hàm cắt một nút ở cuối danh sách, chuyển nút đó về đầu danh sáchL
Câu 38: Có khai báo sau:
Typedef struct Node
{ int data; // Data là kiểu đã định nghĩa trước
Node * link; //con trỏ chỉ đến cấu trúc NODE
Viết hàm tạo ra một nút mới có giá trị x Cho ví dụ mô phỏng
Câu 39: Với cấu trúc danh sách được khai báo như câu 1 Hãy xây dựng một
hàm xóa một nút ở sau con trỏ P trong danh sách liên kết đơn L
Câu 41: Có khai báo sau:
Typedef struct Node
{ int data; // Data là kiểu đã định nghĩa trước
Node * link; //con trỏ chỉ đến cấu trúc NODE
};
typedef struct List // kiểu danh sách liên kết
{ NODE* first;
NODE* last;
Trang 9Trình bày hàm tạo một danh sách liên kết L có n phần tử được nhập từ bànphím theo nguyên tắc FIFO (First In First Out).
Câu 42: Cho danh sách sinh viên Mỗi sinh viên được mô tả bởi các thuộc tính họ
tên, mã sinh viên, điểm
a) Hãy cài đặt danh sách sinh viên bởi mảng
b) Viết hàm tìm kiếm một sinh viên theo mã
Câu 43: Có khai báo sau:
Typedef struct Node
{ int data; // Data là kiểu đã định nghĩa trước
Node * link; //con trỏ chỉ đến cấu trúc NODE
a) Hãy khai báo CTDL biểu diễn dánh sách đó
b) Hãy viết thủ tục xen vào sanh sách một số nguyên mới n sao cho danh sách
nhận được vẫn còn được sắp theo thứ tự tăng dần
Câu 45: Có khai báo sau:
Typedef struct Node
{ int data; // Data là kiểu đã định nghĩa trước
Node * link; //con trỏ chỉ đến cấu trúc NODE
Trang 10Viết hàm xóa một nút ở đầu danh sách liên kết đơn.
Câu 46:Cho danh sách tên của mỗi lớp Mỗi sinh viên được biểu diễn bởi 2 trường:
ten, diem Danh sách được cài đặt bởi danh sách liên kết
a) Hãy khai báo CTDL cài đặt danh sách đó
b) Viết thủ tục tính điểm trung bình của lớp đó
Câu 47: Cho danh sách các số nguyên được sắp xếp theo thứ tự giảm dần với danh
sách được cài đặt bởi mảng
a) Hãy khai báo CTDL biểu diễn dánh sách đó
b) Hãy viết thủ tục xem vào sanh sách một số nguyên mới n sao cho danh sách
nhận được vẫn còn được sắp theo thứ tự giảm dần
Câu 48: Cho một dãy các số sau: 25,35, 20, 14, 27, 42, 10, 40, 23.
a) Hãy xây dựng cây nhị phân tìm kiếm từ dãy khóa trên
b) Giải thích và vẽ cây kết quả sau khi tiến hành thực hiện liên tiếp các thao tác:xóa nút có giá trị 10, bổ sung nút có khóa là 33 và xóa nút có khóa là 35
Câu 49: Định nghĩa thuật toán đệ quy tuyến tính, cho ví dụ minh họa.
Câu 50: Viết thuật toán đệ quy tìm ước số lẻ lớn nhất của số nguyên dương n Cho
ví dụ mô phỏng các bước thực hiện của thuật toán
Câu 51:Thuật toán đệ quy sau có dừng hay không vì sao?
Câu 52 Viết thuật toán đệ quy tính tổng các chữ số của số nguyên dương n Cho ví
dụ mô phỏng các bước thực hiện của thuật toán
Câu 53:Viết thuật toán đệ quy tính tổng các chữ số của số nguyên dương n.
Chuyển thuật toán đệ quy sang dạng lặp tương ứng.
Trang 11Câu 54:Viết thuật toán đệ quy tính Tính S(n) = 1 + 2 + 3 + + n - 1 + n Chuyển thuật
toán đệ quy sang dạng lặp tương ứng Cho ví dụ mô phỏng
Câu 55: Áp dụng phương pháp quay lui để thiết kế thuật toán giải quyết bài toán
+ Khai báo mảng 1 chiều với kích thước tối đa N
+ t làđịa chỉ của phần tửđỉnh của ngăn xếp → t sẽ thay đổi khi ngăn xếp hoạt động.(ngăn xếp rỗng thì giá trị của t =0)
Tổ chức dang sách liên kết đơn:
+ Phần tử đầu DSLK sẽ là phần tử đầu hàng đợi
+ Phần tử cuối DSLK sẽ là phần tử cuối hàng đợi
+Mỗi Node sẽ lưu trữ 2 thông tin:
- Thông tin dữ liệu: Lưu trữ các thông tìn về chính Node đó
- Thông tin liên kết: Lưu trữ địa chỉ của phần tử kế tiếp trong danh sách, hoặc lưu trữ giá trị NULL nếu phần tử đó nằm cuối danh sách
b) Viết phép toán đẩy một phần tử vào ngăn xếp (Push), lấy ra (Pop) cho một ngăn xếp được tổ chức dạng mảng, danh sách liên kết đơn, cho ví
Trang 12Push với DSLK đơn
void Push ( Stack &s, DataType x )
{
Node *p = new Node;
if ( p==NULL ) { cout<<“Khong du bo nho”; return; }p->data = x;
p->next = NULL;
if (s.top==NULL) // if (isEmpty(s))
s.top = p;
else{
Trang 13p->next = s.top;
s.top = p;
}
}
Pop với DSLK đơn
DataType Pop ( Stack &s )
- sử dụng stack đưa xâu w vào và trả xâu ra một xâu, xâu đó chính là w’
THUẬT TOÁN:
int main(int argc, char *argv[])
{
char s[100];
Trang 14dần, cho ví dụ minh họa các bước thực hiện.
+ Hàm sắp xếp n số nguyên theo chiều tăng dần :
void SelectionSorting(int a[], int n)
Trang 15a[min_index] = i;
a[i]=tmp;
}}
}
Ý tưởng:
- Giải thuật “selection sort” sắp xếp một danh sách các giá trị bằng cách lặp lại việc
đặt một giá trị cụ thể vào đúng vị trí thích hợp cho nó trong dãy sắp xếp (Nói cáchkhác, với mỗi vị trí trong danh sách, giải thuật đi tìm giá trị phù hợp cho vị trí đó)
a[min_index] = i;
a[i]=tmp;
}}
Trang 16Ví dụ các bước:
sắp xếp một dãy các số nguyên theo trật tự tăng dần, ta làm như sau:
- Ở bước thứ i, chọn phần tử nhỏ nhất trong dãy a[i], a[i+1], …, a[n]
- Đổi chỗ phần tử này với phần tử a[i]
Câu 4
c) Danh sách liên kết đơn là gì? Trình bày cách tổ chức.
Danh sách liên kết đơn: là một cấu trúc dữ liệu bao gồm một tập các nút, mà mỗi
nút bao gồm:
- Dữ liệu cần lưu trữ
- Liên kết đến nút tiếp theo, hoặc lưu trữ giá trị NULL nếu phần tử đó nằm cuối danh sách
Tổ chức dang sách liên kết đơn :
+ Phần tử đầu DSLK sẽ là phần tử đầu hàng đợi
+ Phần tử cuối DSLK sẽ là phần tử cuối hàng đợi
d) Viết các phép toán bổ sung một phần tử và lấy ra một phần tử trong một danh sách liên kết đơn, cho ví dụ minh họa.
- thêm phần tử: vd thêm phần tử p ta lam như sau: p->next=đầu; đầu= p;
- lấy ra: lấy ra lưu vào biến x: gán x= đầu->data và thay đổi vị trí con trỏđầu: đầu=đầu->next;
A Thêm một phần tử vào DSLKĐ: Có 3 vị trí thêm
1 Gắn vào đầu DSLKĐ:
- Nếu DS rỗng thì : pHead = pTail = new_node;
- Ngược lại: new_node->pNext = pHead;
Trang 17- Nếu DS rỗng thì: pHead = pTail = new_node;
- Ngược lại: pTail->pNext = new_node ;
3 Chèn vào sau nút q trong DSLKĐ:
- Nếu (q != NULL) thì: new_node -> pNext = q -> pNext;
q -> pNext = new_node ;
Nếu ( q == l.pTail) thì: l.pTail = new_node;
- Ngược lại
Thêm new_node vào đầu danh sách
( Chú ý trường hợp danh sách ban đầu rỗng: pHead=pTail=new_node;)
B Lấy ra một phần tử trong DSLKĐ:
Câu 5
Trang 18Cho dãy A gồm n phần tử nguyên a 1 , a 2 , , a n (các phần tử khác nhau) Hãy xây dựng thuật toán tìm phần tử lớn thứ k trong dãy A theo các bước sau đây:
1 Biểu diễn cấu trúc dữ liệu;
2 Mô tả thuật toán;
- Cho vòng lặp for i=2;i<=n;i++
- Nếu a[i]>MAX thì gắn MAX=a[i]
c) Trình bày cấu trúc dữ liệu danh sách được tổ chức dưới dạng mảng.
- Là danh sách có các phần tử có cùng kiểu dữ liệu được xếp kế tiếp nhautrong bộ nhớ
Trang 19- Đặc điểm: d: chiều dài mỗi phần tử trong danh sách
l0: địa chỉ của phần tử đầu tiên
địa chỉ của phần tử thứ i là: li=l0+(i-1)d
- Cách khai báo mảng 1 chiều: <Kiểu dữ liệu> tên_mảng []; (VD: int N[], floata[10])
- Cách khai báo mảng 2 chiều: <Kiểu dữ liệu> tên_mảng [][]; (VD: int a[10][15])
d) Viết phép toán bổ sung một phần tử trong một danh sách được tổ chức dạng mảng, cho ví dụ minh họa.
- HÀM:
- VÍ DỤ
void Insert_Middle(listnode *p, int position, int x){
int count=1, found=0;
Trang 20Câu 7
Cho file văn bản bất kỳ Hãy xây dựng thuật toán tìm từ trong file xuất hiện nhiều nhất theo các bước sau:
1 Biểu diễn cấu trúc dữ liệu;
2 Mô tả thuật toán;
if(s[j]==s[i]&&dem>max){
max=dem;
dem++;
k=j;
}}
}
printf ("tu xuat hien nhieu nhat la: %c",s[k]);
}
Trang 21Câu 8
c) Trình bày cấu trúc dữ liệu danh sách liên kết đôi.
- Danh sách liên kết đôi: Là danh sách mà mỗi phần tử trong danh sách có 2 liên kết
với một phần tử đứng trước (Prev) và một phần tử đứng sau nó (Next)
d) Viết các phép toán lấy ra một phần tử trong một danh sách liên kết đôi, cho
if (l.pHead == NULL) l.pTail = NULL;
else l.pHead->pPrev = NULL;
if (l.pHead == NULL) l.pTail = NULL;
else l.pHead->pPrev = NULL;
Trang 22return 1;
}
Trang 23- cho hai dãy :
x=1,5,7,8
y=2,3,4,10
cho i=0, j=0 với i chạy theo chỉ số mảng x và j chạy theo chỉ số mảng y
tiến hàng kiểm tra nếu x[i]<y[j] thì thêm x[i] vào mảng z và tăng i, ngược lại tathêm y[j] vào mảng z tăng j; lặp lại cho đến khi j hoặc i bằng n-1 với n là kích thướcmảng x, y
Trang 24Câu 10
a) Trình bày cấu trúc dữ liệu danh sách liên kết vòng một chiều?
- Danh sách liên kết vòng: Là một danh sách liên kết đơn (hoặc đôi) mà phần
tử cuối danh sách, thay vì mang giá trị NULL, trỏ tới phần tử đầu danh sách
b) Viết phép toán bổ sung một phần tử trong một danh sách liên kết vòng một chiều, cho ví dụ minh họa?
Trang 26new_node->pNext = q->pNext;
q->pNext = new_node;
if (q == l.pTail) l.pTail = new_node;
}}
Câu 11
Hai từ được gọi là Anagram của nhau nếu từ này có thể nhận được từ từ kia bằng cách thay đổi trật tự các chữ cái, ví dụ Read, dare là hai từ Anagarm của nhau Hãy xây dựng thuật toán kiểm tra xem hai từ có phải là Anagram của nhau hay không theo các bước sau:
4 Biểu diễn cấu trúc dữ liệu: 2 từ vào 2 biến kiểu string
5 Mô tả thuật toán;
b1: kt kích thước 2 từ nếu bằng nhau thì qua b2 ngược lại thông báokhông phải
b2: ader, aderb3: ok
b4: xâu đã rông ->thông báo ok luôn
Trang 27cout << "Not anagrams." << endl;
l.pHead = l.pTail = new_node;
l.pTail->pNext = l.pHead;
}else {
l.pTail->pNext = new_node;
new_node = pNext = 1.pTail;
1.pTail = new_node;
Trang 28pTail->pNext = 1.pHead;
1.Head->pNext=1.pTail;
}}
Câu13
Xâu kí tự được gọi là xâu chuẩn nếu thứ tự xuất hiện của các dấu đóng/mở ngoặc tuân thủ theo nguyên tắc đóng mở của biểu thức toán học.
Ví dụ: (()()); ()((()())()) : là các xâu chuẩn.
()); (()()))(() : là các xâu không chuẩn.
Hãy thiết kế thuật toán và viết hàm kiểm tra xem một xâu có phải ở dạng xâu chuẩn hay không, cho ví dụ minh họa các bước thực hiện.
Câu 14
a) Trình bày cấu cấu trúc dữ liệu hàng đợi (Queue) được tổ chức dưới dạng mảng, mảng vòng tròn, danh sách liên kết.
+ Hàng đợi – mảng : Các phần tử của hàng đợi sẽ di chuyển khắp các ô nhớ
coi không gian dành cho hàng đợi theo dạng xoay vòng
Hàng đợi khi xoay vòng:
Trang 29+ Hàng đợi – danh sách liên kết : Phần tử đầu DSLK sẽ là phần tử đầu hàng
đợi
Phần tử cuối DSLK sẽ là phần tử cuối hàng đợi
b) Hãy viết hàm bổ sung/loại bỏ một phần tử trong hàng đợi theo các cách tổ chức trong câu a, cho ví dụ minh họa.
1.Mảng: khai báo 1 mảng với kích thước N, dùng hai biến dau và cuoi để
quản lý hàng đợi và biến đếm để đếm số phần tử hàng đợi
+ Để thêm một phần tử ta tăng Rear lên 1 và đưa giá trị đó vào phần tử thứ Rear
Trang 31else Q->Front=(Q->Front+1) % MaxLength;
//tăng Front lên 1 đơn vị
- 3 Danh sách liên kết: tổ chức quản lí bằng hai con trỏ 1 con trỏ đầu dùng để lấy
ra và con trỏ cuối để thêm vào
+ Thêm một phần tử p vào cuối Queue:
#Code C
void EnQueue(Queue &q, DataType x)
{
Node *p = new Node;
if (p==NULL) exit(1); //Khong du bo nho
Trang 32Thiết kế thuật toán đổi số ở hệ đếm 10 ra hệ đếm cơ số q (2,8,16) bằng cách
sử dụng một Stack theo các bước sau đây:
1 Biểu diễn cấu trúc dữ liệu :stack
2 Mô tả thuật toán:
1 Khởi tạo một Stack rỗng
2 Chuyển đổi số từ dạng thập phân sang nhị phân bằng phép div và mod cho 2
3 Kết quả của phép mod được đưa vào Stack
4 Đọc từ Stack cho đến hết, kết quả được nối với nhau để tạo thành chuỗi
5 Kết thúc giải thuật
3 Ví dụ mô phỏng.
Trang 33Câu 16
Cho một stacks, giả sử đã có các phép toán push(s,x) (đẩy phần tử x vào stack s), pop(s,x) (lấy phần tử x từ đỉnh stack s) Hãy xây dựng thuật toán và viết hàm lấy phần tử thứ k kể từ đỉnh của stack (được phép sử dụng stack trung gian) sao cho các phần tử khác vẫn được bảo toàn thứ tự Cho ví dụ mô phỏng.
Trang 34d) Biểu diễn dữ liệu;
e) Biểu diễn thuật toán;
• Mỗi nút trên cây chỉ có tối đa 2 con
• Với cây con của một nút, phân biệt cây con trái và cây con phải
+ Cách tổ chức: Để biểu diễn cây nhị phân ta chọn phương pháp cấp phát liên kết Ứng với một nút, ta sử dụng một biến động lưu trữ các thông tin sau:
- Thông tin lưu trữ tại nút
- Địa chỉ nút gốc của cây con trái trong bộ nhớ
- Địa chỉ nút gốc của cây con phải trong bộ nhớ
d) Viết các phép toán trong cây tìm kiếm nhị phân, cho ví dụ minh họa.
1 So sánh khóa X với a[(n+1) div 2]
B1:+ Nếu X=a[(n+1) div 2], kết thúc, ngược
+ Nếu X<a[(n+1) div 2], quay lại (1), tìm kiếm trong dãy a[1],a[2],…,a[(n+1) div 2
int m=(l+r)/2;
if (a[m]==x) return m;