Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 23

Câu hỏi ôn tập môn Cấu trúc dữ liệu và giải thuật

Câu Hỏi 1:Kiểu dữ liệu cơ bản là gì?

Đáp án đúng là: Là kiểu dữ liệu có sẵn trên hầu hết các máy tính và được hỗ trợ trong hầu hết các ngôn ngữ

lập trình.

Câu Hỏi 2:Hãy cho biết kiểu dữ liệu trừu tượng là gì?

Đáp án đúng là: Là kiểu dữ liệu mới do người dùng tự định nghĩa.

Câu Hỏi 3:Đâu là một trong những tiêu chí khi chọn ngôn ngữ diễn đạt giải thuật ?

Đáp án đúng là: Gần với ngôn ngữ lập trình hiện có.

Câu Hỏi 5:Đâu là kiểu dữ liệu cơ bản trong các kiểu dữ liệu dưới đây?

Đáp án đúng là: Kiểu số nguyên.

Câu Hỏi 8:Hãy cho biết kết quả của phép MOD hai số nguyên có kiểu gì?

Đáp án đúng là: Kiểu số nguyên”.

Câu Hỏi 9:Chọn định nghĩa đúng nhất cho từ Giải thuật?

Đáp án đúng là: Là một tập hợp hữu hạn của các chỉ thị hay phương cách được định nghĩa rõ ràng cho việc
hoàn tất một số sự việc từ một trạng thái ban đầu cho trước; khi các chỉ thị này được áp dụng triệt để thì sẽ
dẫn đến kết quả sau cùng như đã dự đoán

Câu Hỏi 2:Kiểu dữ liệu con trỏ được dùng để làm gì?

Đáp án đúng là: Được dùng để lưu các con trỏ đến bất kỳ một kiểu dữ liệu nào khác.

Câu Hỏi 4:Hãy cho biết ưu điểm của các kiểu dữ liệu trừu tượng.

Đáp án đúng là: Giúp cho người lập trình không phải quá quan tâm đến các cách thức biểu diễn cụ thể các
dữ

Câu Hỏi 5:Hãy cho biết giá trị của “con trỏ” là gì?

Đáp án đúng là: Là địa chỉ đến một vùng bộ nhớ nhất định.

Câu Hỏi 6:Kiểu truy cập các phần tử trong một mảng là kiểu truy cập nào trong các kiểu dưới đây?

Đáp án đúng là: Kiểu truy cập ngẫu nhiên.

Câu Hỏi 8:Kiểu dữ liệu nào thuộc loại kiểu dữ liệu cơ bản?

Đáp án đúng là: POINTER.

Câu Hỏi 9:Yêu cầu khi chọn kiểu dữ liệu cho chương trình là?

Đáp án đúng là: Kiểu dữ liệu cần sát với kiểu giá trị của các thông tin đó trong thực tế.

Câu Hỏi 10:Hãy cho biết ý nghĩa của kiểu dữ liệu logic (BOOLEAN)

Đáp án đúng là: Dùng để biểu diễn các giá trị logic bao gồm 2 giá trị đúng (true) và sai (false).

Câu Hỏi 7:Với cấu trúc dữ liệu như sau


1
typedef struct DNode

{int Key;

DNode * NextNode;

DNode * PreNode;

} DOneNode;

typedef DOneNode * DPointerType;

typedef struct DLLPairNode

{DPointerType DLLFirst;

DPointerType DLLLast;

} DLLPType;

Hãy cho biết hàm sau dùng để làm gì?

void DLLTravel ing (DLLPType DList)

{DPointerType CurrNode = DList.DLLFirst;

while (CurrNode != NULL)

{cout << CurrNode->Key;

CurrNode = CurrNode->NextNode ;

return;

Đáp án đúng là: Duyệt qua các nút trong danh sách và hiển thị nội dung của mỗi nút.

Câu Hỏi 8:Cho danh sách L = (1, 8, 9, 2, 4, 0, 6, 7, 5). Thủ tục DSC_L(Pos1; Pos2: position ; var List: ListType)
để đưa ra một danh sách con của List bắt đầu từ vị trí Pos1 đến vị trí Pos2 và trả giá trị cho List. Thủ tục

Delete_L(Pos: position ; var List: ListType) để xóa một phần tử tại vị trí Pos khỏi danh sách List. Thủ tục

Insert_L(Pos: position ; X: Item; var List: ListType) để thêm một phần tử X vào vị trí Pos trong danh sách

List. Khi đó nếu ta thực hiện liên tiếp DSC_L(2,7,L), Delete_L (2,L), Insert_L(2,3,L) thì kết quả sẽ được danh

sách L như sau?

Đáp án đúng là: (8, 3, 2, 4, 0, 6)

Câu Hỏi 10:Định nghĩa nào là đúng với danh sách liên kết?

Đáp án đúng là: Danh sách liên kết là tập hợp các phần tử mà giữa chúng có một sự nối kết với nhau thông
qua vùng liên kết của chúng.

Câu Hỏi 1:Định nghĩa cấu trúc dữ liệu của danh sách liên kết đôi được mô tả như sau:

Typedef Kieu_du_lieu ElementType;

2
typedef struct NodeType

ElementType Data;

struct NodeType *next, *prev;

}Node ;

Hãy chọn mô tả đúng nhất cho khai báo NodeType *next

Đáp án đúng là: Vùng liên kết quản lý địa chỉ phần tử kế tiếp.

Câu Hỏi 2:Một danh sách rỗng khi:

Đáp án đúng là: Độ dài của danh sách bằng 0.

Câu Hỏi 3:Lựa chọn câu đúng nhất về danh sách liên kết đôi (Doubly Linked List)

Đáp án đúng là: Vùng liên kết của một phần tử trong danh sách liên đôi có 02 mối liên kết, 01 với phần tử

trước và 01 với phần tử sau nó trong danh sách.

Câu Hỏi 4:Lựa chọn định nghĩa đúng nhất về danh sách?

Đáp án đúng là: Danh sách là tập hợp các phần tử có kiểu dữ liệu xác định và giữa chúng có một mối liên hệ

nào đó.

Câu Hỏi 5:Trong định nghĩa danh sách liên kết đôi, mỗi nút gồm bao nhiêu thành phần?

Đáp án đúng là: 3 thành phần.

Câu Hỏi 6:Trong việc ứng dụng danh sách liên kết để tính toán giá trị của một đa thức 1 ẩn bậc n, để lưu trữ
đa thức trong danh sách liên kết thì mỗi nút của danh sách thường có mấy trường:

Đáp án đúng là: 3.

Câu Hỏi 7:Khi cài đặt danh sách bằng mảng, với độ dài là n thì thao tác chèn một phần tử vào danh sách có
độ phức tạp:

Đáp án đúng là: O(n)

Câu Hỏi 8:Cho danh sách L = (1, 5, 3, 2, 4, 0, 6). Thủ tục Delete_L(Pos: position ; var List: ListType) để xóa
một phần tử tại vị trí Pos khỏi danh sách List. Khi đó nếu ta thực hiện liên tiếp Delete_L(2,L), Delete_L(4,L)
thì kết quả sẽ được danh sách L như sau?

Đáp án đúng là: (1, 3, 2, 0, 6)

Câu Hỏi 9:Cho danh sách L = (0, 3, 7, 2, 4, 9). Đâu là danh sách con của L?

Đáp án đúng là: (0, 3, 7, 2)

Câu Hỏi 10:Biểu diễn danh sách bằng mảng được mô tả như sau:

#de ne Max_Size N

typedef Kieu_du_lieu E_Type;

struct ListType
3
{E_Type Element[Max_Size];

int Size;

} List;

Điều kiện danh sách đầy là:

Đáp án đúng là: List.Size = Max_Size.

Câu Hỏi 1: Cho biểu thức số học dạng thông thường: a * (b + c) - d/e

Đâu là biểu diễn biểu thức này dưới dạng biểu thức Balan?

Đáp án đúng là: abc + * de /-

Câu Hỏi 2:Cho biểu thức số học dạng Balan như sau: abc +* de /- với các giá trị a=1; b=2; c=3; d=8; e=4; thì
giá trị của biểu thức là:

Đáp án đúng là: 3

Vì: Việc tính giá trị của biểu thức ở dạng biểu thức Ba Lan được thực hiện: biểu thức được đọc từ trái sang

Câu trả lời đúng là: 3

Câu Hỏi 3:Việc cài đặt ngăn xếp bằng mảng được thực hiện qua khai báo dưới đây:

#de ne max N

typedef int ElementType;

struct Stack

int Top_id;

ElementType Element[max];

};

Stack S;

Đáp án đúng là: Kiểu dữ liệu của các phần tử trong Stack.

Câu Hỏi 5:Cho biểu thức số học dạng Balan như sau: 1 2 3 4 *- + 5 6 4 8 – – + *. Việc tính toán giá trị biểu
thức này khi dùng Stack được cài đặt bằng mảng thì phần tử được đẩy vào Stack lần thứ 10 có giá trị là bao
nhiêu?

Đáp án đúng là: 4

và giải thuật, bài 3, mục 3.4, Ứng dụng của ngăn xếp

Câu trả lời đúng là: 4

Câu Hỏi 6:Cho biểu thức số học dạng Balan như sau: 1 2 3 4 *- + 5 6 4 8 – – + *. Việc tính toán giá trị biểu
thức này khi dùng Stack được cài đặt bằng mảng thì phần tử được đẩy vào Stack lần thứ 8 có giá trị là bao
nhiêu?

Đáp án đúng là: 5

4
Câu Hỏi 7:Trong việc cài đặt ngăn xếp bằng mảng A[…], ta sử dụng một biến top_id để lưu giữ đỉnh của
ngăn xếp, nếu hiện tại ngăn xếp chưa có phần tử thì giá trị của top_id là bao nhiêu?

Đáp án đúng là: -1.

Câu Hỏi 8:Khi dùng Stack được cài đặt bằng mảng để đổi số tự nhiên N = 70 (hệ cơ số 10) sang hệ nhị phân
thì số phần tử tối thiểu của mảng phải là bao nhiêu?

Đáp án đúng là: 7

Câu Hỏi 9:Trong việc cài đặt ngăn xếp bằng mảng A[…], nếu hiện tại ngăn xếp có n phần tử thì phần tử mới
nhất vừa được đưa vào ngăn xếp vị trí nào trong mảng?

Đáp án đúng là: A[n-1].

Câu Hỏi 10:Cho biểu thức số học dạng thông thường: (a+b)*(c-(d/e)).Đâu là biểu diễn biểu thức này dưới
dạng biểu thức Balan?

Đáp án đúng là: ab + cde /-*

Câu Hỏi 1:Cho biểu thức số học dạng Balan như sau: 1 2 3 4 *- + 5 6 4 8 – – + *. Việc tính toán giá trị biểu
thức này khi dùng Stack được cài đặt bằng mảng thì số phần tử tối thiểu của mảng phải là bao nhiêu?

Đáp án đúng là: 5

Câu trả lời đúng là: 5

Câu Hỏi 3:Việc cài đặt ngăn xếp bằng mảng được thực hiện qua khai báo dưới đây:

#de ne max N

typedef int ElementType;

struct Stack

int Top_id;

ElementType Element[max];

};

Stack S;

Ý nghĩa đúng nhất của S là:

Đáp án đúng là: Tên của Stack.

Câu Hỏi 9:Cho biểu thức số học dạng thông thường: a * (b + c) - d/e.Đâu là biểu diễn biểu thức này dưới
dạng biểu thức Balan?

Đáp án đúng là: abc + * de /-

Câu Hỏi 5:Việc kiểm tra hàng đợi có rỗng không được thực hiện bằng đoạn mã dưới đây:

int IS_EMPTY(QUEUE_ARRAY q)

5
if (………)

return 1;

else

return 0;

Hãy lựa chọn câu trả lời đúng nhất nội dung điền vào chỗ trống (.........) của đoạn mã trên:

Câu trả lời của bạn chính xác

Câu Hỏi 6:Cấu trúc dữ liệu nào tương ứng với nguyên lý FIFO

Đáp án đúng là: Queue

Câu Hỏi 7:Khi cài đặt hàng đợi bằng mảng, nếu ta đặt tên các biến như sau: biến T thể hiện vị trí đuôi, biến
H thể hiện vị trí đầu. Thao tác thêm 1 phần tử vào hàng đợi sẽ:.

Đáp án đúng là: Tăng T lên 1 đơn vị.

Câu Hỏi 8:Khi cài đặt hàng đợi bằng mảng, nếu ta đặt tên các biến như sau: biến T thể hiện vị trí đuôi, biến
H thể hiện vị trí đầu. Thao tác lấy ra 1 phần tử của hàng đợi trong trường hợp: “giá trị của H đúng bằng kích

thước của mảng” sẽ:

Đáp án đúng là: Giá trị H được gán bằng 1.

Câu Hỏi 9:Khi lấy ra một phần tử của hàng đợi thì phần tử đó ở vị trí:

Đáp án đúng là: Đầu tiên của hàng đợi.

Câu Hỏi 10:Việc cài đặt hàng đợi bằng mảng được thực hiện qua khai báo dưới đây:

#de ne max N

typedef int ELEMENT;

struct QUEUE_ARRAY

ELEMENT ele[max];

int capacity, H, T, S ;

} q;

Ý nghĩa đúng nhất của ELEMENT là:

Đáp án đúng là: Kiểu dữ liệu của các phần tử trong Hàng đợi.

Câu Hỏi 1:Việc lấy một phần tử từ hàng đợi được thực hiện bằng đoạn mã dưới đây:

ELEMENT DEQUEUE(QUEUE_ARRAY q)

ELEMENT e;

6
if (IS_EMPTY(q)!= 0)

printf("hang doi rong khong the lay phan tu ra");

else

e = q.ele[q.H];

q.H =q.H + 1;

q.S = ........;

if (q.H == q.capacity)

q.H = 0;

return e;

Hãy lựa chọn câu trả lời đúng nhất nội dung điền vào chỗ trống (.........) của đoạn mã trên:

Đáp án đúng là: q.S - 1.

Câu Hỏi 2:Việc cài đặt hàng đợi bằng mảng được thực hiện qua khai báo dưới đây:

#de ne max N

typedef int ELEMENT;

struct QUEUE_ARRAY

ELEMENT ele[max];

int capacity, H, T, S;

} q;

Ý nghĩa đúng nhất của q là:

Đáp án đúng là: Tên của hàng đợi.

Câu Hỏi 3:Khi cài đặt hàng đợi bằng mảng, nếu ta đặt tên các biến như sau: biến T thể hiện vị trí đuôi, biến
H thể hiện vị trí đầu. Thao tác thêm 1 phần tử vào hàng đợi trong trường hợp: “giá trị của T đúng bằng kích

thước của mảng trong khi số lượng phần tử của hàng đợi vẫn nhỏ hơn kích thước của mảng” sẽ:

Đáp án đúng là: Giá trị T được gán bằng 1.

Câu Hỏi 4:Để cài đặt thàng đợi bằng danh sách liên kết, trước tiên ta phải định nghĩa kiểu phần tử cho danh
sách.Mỗi phần tử của danh sách liên kết phải có bao nhiêu trường:

Đáp án đúng là: 2

7
Câu Hỏi 6:Cấu trúc dữ liệu nào khi cài đặt bằng mảng ta phải cần 2 biến vị trí để quản lý danh sách các
phần tử

Đáp án đúng là: Hàng đợi.

Câu Hỏi 7:Việc bổ sung thêm phần tử vào hàng đợi được thực hiện bằng đoạn mã dưới đây:

void ENQUEUE(QUEUE_ARRAY q, ELEMENT e)

if (IS_FULL(q)!= 0)

printf("hang doi day khong the chen them");

else{

if (q.T == q.capacity–1)

q.T=0;

else

…………..;

q.ele[q.T]=e;

q.S=q.S+1;

Hãy lựa chọn câu trả lời đúng nhất nội dung điền vào chỗ trống (.........) của đoạn mã trên:

Đáp án đúng là: q.T=q.T+1

Câu Hỏi 8:Việc kiểm tra hàng đợi có rỗng không được thực hiện bằng đoạn mã dưới đây:

int IS_EMPTY(QUEUE_ARRAY q)

if (………)

return 1;

else

return 0;

Hãy lựa chọn câu trả lời đúng nhất nội dung điền vào chỗ trống (.........) của đoạn mã trên:

Đáp án đúng là: q.S == 0

Câu Hỏi 9:Việc cài đặt hàng đợi bằng mảng được thực hiện qua khai báo dưới đây:

#de ne max N

typedef int ELEMENT;


8
struct QUEUE_ARRAY

ELEMENT ele[max];

int capacity, H, T, S;

} q;

Ý nghĩa đúng nhất của S là:

Đáp án đúng là: Số phần tử hiện thời của hàng đợi.

Câu trả lời đúng là: Số phần tử hiện thời của hàng đợi

Câu Hỏi 10:Khi cài đặt hàng đợi bằng mảng, nếu ta đặt tên các biến như sau: biến T thể hiện vị trí đuôi, biến
H thể hiện vị trí đầu. Thao tác lấy ra 1 phần tử của hàng đợi trong trường hợp: “giá trị của H đúng bằng kích

thước của mảng” sẽ:

Đáp án đúng là: Giá trị H được gán bằng 1.

Câu Hỏi 5:Hãy cho biết kết quả duyệt trung thứ tự (duyệt nút gốc giữa) của cây nhị phân sau.

Đáp án đúng là: BADCE.

Câu Hỏi 1:Cho biết kết quả duyệt trung thứ tự (duyệt nút gốc đỉnh 3 là :

Đáp án đúng là: Luôn tồn tại một đường duy nhất từ gốc tới một đỉnh bất kỳ trong cây.

Câu Hỏi 2:Quan hệ phân cấp giữa các nút trong cây được gọi là quan hệ gì?

Đáp án đúng là: Quan hệ cha - con.

Câu Hỏi 3:Đâu là phương pháp duyệt hậu thứ tự một cây nhị phân?

Đáp án đúng là: Duyệt cây con bên phải sau đó tới cây con bên trái rồi tới nút gốc.

Câu Hỏi 4:Hãy cho biết độ cao của một cây được xác định như thế nào?

Đáp án đúng là: Là độ dài đường đi dài nhất từ gốc tới lá

Câu Hỏi 5:Các phần tử của cây thì được gọi là gì?

Đáp án đúng là: Là nút.

Câu Hỏi 6:Cho một biểu diễn cây như sau:Bậc của đỉnh e là

Đáp án đúng là: 2

Câu Hỏi 7:Cho một biểu diễn cây như sau:Đâu là tập các lá của cây:Câu trả lời của bạn chính xác

Đáp án đúng là: {4, 5, 6, 8, 9}.

Câu Hỏi 8:Đãy cho biết kết quả duyệt trung thứ tự (duyệt nút gố nào?

Đáp án đúng là: Là đỉnh có ít nhất 1 con.

Câu Hỏi 9:Các đỉnh của cây có bậc bằng 0 thì được gọi là gì?

Đáp án đúng là: Là Lá.


9
Câu Hỏi 10:Có bao nhiêu thao tác trên cây nhị phân?

Đáp án đúng là: Có 5 thao tác.

Câu Hỏi 1:Đoạn mã giả dưới đây mô tả thuật toán gì?

Thuật toán:

B1: k = 0

B2: IF (M[k] != X) AND (k < N)

B2.1: k++

B2.2: Lặp lại B2

B3: IF k < N

Thông báo tìm thấy tại vị trí k

B4: ELSE

Không tìm thấy.

B5: Kết thúc

Đáp án đúng là: Tìm tuyến tính phần tử có giá trị X.

Câu Hỏi 2:Cho hàm tìm kiếm tuần tự như sau

typedef <kiểu_dữ_liệu> KeyType;

int Sequential_Search(dataArray R,KeyType X,int n);

int i;

i=0;

while((R[i]!= X)&&(i < n))

i++;

if(i < n) return (1);

else return(–1);

Chọn khẳng định đúng nhất:

Đáp án đúng là: Hàm sẽ trả về -1 nếu không tìm thấy phần tử có giá trị là X.

Câu Hỏi 3:Xét thủ tục sau:

int TimKiemNP (int M[], int First, int Last, int X)

10
{

if (First > Last)

return (-1);

int Mid = (First + Last)/2;

if (X == M[Mid])

return (Mid);

if (X < M[Mid])

return(TimKiemNP (M, First, Mid – 1, X));

else

return(TimKiemNP (M, Mid + 1, Last, X));

Đáp án đúng là: Hàm tìm kiếm đệ quy phần tử có giá trị là X trên mảng các phần tử từ chỉ số từ First đến chỉ

số Last.

Câu Hỏi 6:Cho thuật toán tìm kiếm sau

typedef <kiểu_dữ_liệu> KeyType;

int Sequential_Search(dataArray R,KeyType X,int n);

int i;

i=0;

while((R[i]!= X)&&(i < n))

i++;

if(i < n) return (1);

else return(–1);

Khi đó, nếu tìm giá trị X = 34 trong mảng sau: 11, 23, 33, 34, 35, 62,71, 80, 95, 100

Chọn câu đúng nhất cho số phép so sánh trong vòng lặp while:

Đáp án đúng là: Số phép so sánh: S = 8.

Câu Hỏi 7:Cho thuật toán tìm kiếm sau, với điều kiện các giá trị của mảng đã được sắp theo thứ tự tăng
dần:

typedef <kiểu_dữ_liệu> KeyType;


11
int LinearSearch(KeyType X, dataArray R,int n)

{int i;

for(i = 0;i < n;i++)

if(R[i]== X) return(i);

else if(X < R[i]) return(–1);

return(–1);

Khi đó, nếu tìm giá trị X = 85 trong mảng được sắp xếp theo thứ tự tăng dần như sau:

10, 20, 30, 40, 50, 60,70, 80, 90, 100

Chọn câu đúng nhất trong trường hợp xấu nhất khi không tìm thấy phần tử nào có giá trị bằng X

Đáp án đúng là: Số phép so sánh: Smax = 27.

Câu Hỏi 8:Cho thuật toán tìm kiếm nhị phân sau:

Bước 1: đặt First = 0 và Last = n – 1;

Bước 2: Found = –1;//Found là biến lưu vị trí tìm thấy X trong mảng

Bước 3: while((First <= Last)&&(Found == –1))

{ Mid =(First + Last)/2;

if(X < R[Mid]) Last = Mid – 1;

else if(X > R[Mid]) First = Mid + 1;

else Found = Mid;

Đâu là điều kiện của mảng R[] để thực hiện thuật toán?

Đáp án đúng là: Được sắp tăng

Câu Hỏi 9:Cho thuật toán tìm kiếm sau, với điều kiện các giá trị của mảng đã được sắp theo thứ tự tăng
dần:

typedef <kiểu_dữ_liệu> KeyType;

int LinearSearch(KeyType X, dataArray R,int n)

int i;

for(i = 0;i < n;i++)

{
12
if(R[i]== X) return(i);

else if(X < R[i]) return(–1);

return(–1);

Chọn câu đúng nhất trong trường hợp xấu nhất khi không tìm thấy phần tử nào có giá trị bằng X:

Đáp án đúng là: Số phép so sánh: Smax = 3N.

Câu Hỏi 10:Cho thuật toán tìm kiếm trên cây nhị phân tìm kiếm như sau:

Bước 1: đặt con trỏ Root = BST;

Bước 2: nếu (Root = NULL) hoặc (Root –> infor = X)

Kết thúc thuật toán;

Bước 3: ngược lại:nếu (Root –> infor > X)

Root = Root –> left;

//tìm X ở cây con bên trái

Bước 4: ngược lại nếu(Root –> infor < X)

Root = Root –> right;

//tìm X ở cây con bên phải

Bước 5: lặp lại bước 2;

Và cây nhị phân tìm kiếm sau:

Khoá cần tìm kiếm X = 40 thì số lần thực hiện Bước 2 là?

Đáp án đúng là: 3

Câu Hỏi 1:Cho thuật toán sau

int LinearSearch ( oat M[], int N, oat X)

{ int k = 0;

M[N] = X;

while (M[k] != X) //n+1 lan

k++;

if (k < N)

return (1);

else return (-1);

13
Chọn câu đúng nhất trong trường hợp xấu nhất khi không tìm thấy phần tử nào có giá trị bằng X:

Đáp án đúng là: Số phép gán: Gmax = N

Câu Hỏi 2:Khi xóa một nút của cây nhị phân tìm kiếm, trường hợp nút cần xóa là nút có đủ hai nút gốc cây
con. Đâu là định nghĩa đúng nhất cho khái niệm "nút tiền nhiệm"?

Đáp án đúng là: Nút cực phải của cây con trái

Câu Hỏi 3:Đâu là cây nhị phân tìm kiếm trong các cây nhị phân sau?

Đáp án đúng là:

Câu Hỏi 4:Xét thủ tục sau:

int TimKiemNP (int M[], int First, int Last, int X)

if (First > Last)

return (-1);

int Mid = (First + Last)/2;

if (X == M[Mid])

return (Mid);

if (X < M[Mid])

return(TimKiemNP (M, First, Mid – 1, X));

else

return(TimKiemNP (M, Mid + 1, Last, X));

Lựa chọn câu đúng nhất để mô tả thủ tục trên

Đáp án đúng là: Hàm tìm kiếm đệ quy phần tử có giá trị là X trên mảng các phần tử từ chỉ số từ First đến chỉ

số Last.

Câu Hỏi 5:Cho thuật toán tìm kiếm sau, với điều kiện các giá trị của mảng đã được sắp theo thứ tự tăng
dần:

typedef <kiểu_dữ_liệu> KeyType;

int LinearSearch(KeyType X, dataArray R,int n)

14
{

int i;

for(i = 0;i < n;i++)

if(R[i]== X) return(i);

else if(X < R[i]) return(–1);

return(–1);

Chọn câu đúng nhất trong trường hợp xấu nhất khi không tìm thấy phần tử nào có giá trị bằng X:

Đáp án đúng là: Số phép so sánh: Smax = 3N.

Câu Hỏi 6:Cho thuật toán tìm kiếm nhị phân sau:

Bước 1: đặt First = 0 và Last = n – 1;

Bước 2: Found = –1;//Found là biến lưu vị trí tìm thấy X trong mảng

Bước 3: while((First <= Last)&&(Found == –1))

{ Mid =(First + Last)/2;

if(X < R[Mid]) Last = Mid – 1;

else if(X > R[Mid]) First = Mid + 1;

else Found = Mid;

Đâu là điều kiện của mảng R[] để thực hiện thuật toán?

Đáp án đúng là: Được sắp tăng

Câu Hỏi 7:Cho thuật toán tìm kiếm sau

typedef <kiểu_dữ_liệu> KeyType;

int Sequential_Search(dataArray R,KeyType X,int n);

int i;

i=0;

while((R[i]!= X)&&(i < n))

i++;

15
}

if(i < n) return (1);

else return(–1);

Khi đó, nếu tìm giá trị X = 34 trong mảng sau: 11, 23, 33, 34, 35, 62,71, 80, 95, 100

Chọn câu đúng nhất cho số phép so sánh trong vòng lặp while:

Đáp án đúng là: Số phép so sánh: S = 8.

Câu Hỏi 8:Bạn hãy cho biết độ phức tạp của giải thuật tìm kiếm tuần tự.

Đáp án đúng là: O(n)

Câu Hỏi 9:Cho thuật toán tìm kiếm trên cây nhị phân tìm kiếm như sau:

Bước 1: đặt con trỏ Root = BST;

Bước 2: nếu (Root = NULL) hoặc (Root –> infor = X)

Kết thúc thuật toán;

Bước 3: ngược lại:nếu (Root –> infor > X)

Root = Root –> left;

//tìm X ở cây con bên trái

Bước 4: ngược lại nếu(Root –> infor < X)

Root = Root –> right;

//tìm X ở cây con bên phải

Bước 5: lặp lại bước 2;

Và cây nhị phân tìm kiếm sau:

Khoá cần tìm kiếm X = 40 thì số lần thực hiện Bước 2 là?

Đáp án đúng là: 3

Câu Hỏi 10:Đâu là một điều kiện của việc xóa một nút của cây nhị phân tìm kiếm?

Đáp án đúng là: Cây nhận được sau khi xóa là cây nhị phân tìm kiếm

Câu Hỏi 1:Cho dãy số gồm 8 phần tử: 5, 3, 7, 4, 1, 2, 9, 12.Ta có thể chia dãy trên thành ít nhất bao nhiêu dãy
con không giảm?

Đáp án đúng là: 4

Câu Hỏi 2:Bạn hãy cho biết độ phức tạp của việc sắp xếp tăng dần một dãy số bằng thuật toán chèn trực
tiếp trong trường hợp dãy đã được sắp tăng với n là số phần tử của dãy?

Đáp án đúng là: O(n).

Câu Hỏi 3:Bạn hãy cho biết độ phức tạp của việc sắp xếp tăng dần một dãy số bằng thuật toán Heap sort

16
trong trường hợp tồi nhất với n là số phần tử của dãy.

Đáp án đúng là: O(nlog n)

HeapSort chỉ thực hiện HeapiFy một lần và SwapDown n – 1 lần nên độ phức tạp của HeapSort trong

trường hợp xấu nhất là O(nlog n)

Câu Hỏi 4:Theo thuật toán Quick sort, về nguyên tắc thì điều kiện nào sau đây dùng để chọn khóa chốt?

Đáp án đúng là: Chọn ngẫu nhiên

Câu Hỏi 5:Theo thuật toán Merge sort, trong lần phân hoạch đầu tiên thì số phân hoạch theo phương pháp

trộn trực tiếp so với số phân hoạch theo phương pháp trộn tự nhiên là?

Đáp án đúng là: Không biết trước, tùy vào tình trạng của dãy ban

Câu Hỏi 6:Cho các bước của thuật toán sắp dãy sắp xếp một dãy a , a ,…, a theo thứ tự tăng dần như sau :

Bước 1: i = 1;

Bước 2:đặt

x = A[i];

j = i – 1;

Bước 3: while (j >= 0) && (x < A[j])

A[j + 1] = A[j];

j––;

Bước 4: đặt A[j + 1] = x ;

i++;

Bước 5: nếu i < = n – 1 lặp lại bước 2 ngược lại thì kết thúc

Bạn cho biết đây là thuật toán sắp xếp nào?

Đáp án đúng là: Chèn trực tiếp – Insertion sort.

Câu Hỏi 7:Tên của thuật toán sắp xếp mà tư tưởng của nó là phân hoạch dãy ban đầu thành các dãy con có
vị trí tương đối với một phần tử trong dãy?

Đáp án đúng là: Quick sort

Câu Hỏi 8:Cho các bước của thuật toán sắp dãy sắp xếp một dãy a , a ,…, a theo thứ tự tăng dần theo thuật

n
17
toán Insertion sort như sau :

Bước 1: i = 1;

Bước 2:đặt

x = A[i];

j = i – 1;

Bước 3: while (j >= 0) && (x < A[j])

A[j + 1] = A[j];

j––;

Bước 4: đặt A[j + 1] = x ;

i++;

Bước 5: nếu i < = n – 1 lặp lại bước 2 ngược lại thì kết thúc

Trường hợp tốt nhất, khi dãy phần tử cần sắp xếp có thứ tự tăng:

so sánh

Đáp án đúng là: Số phép so sánh: S

Câu Hỏi 9:Thủ tục mô tả thuật toán sắp xếp chèn trực tiếp (Insertion sort):

#de ne Max_Size …

typedef Kieu_du_lieu KeyType;

typedef struct KeyArray

KeyType Array[Max_Size];

int n;

};

KeyArray Sortinsert( KeyArray a)

int i,j;

KeyType x;

i = 1;

while ( i <= a.n – 1 )

{ x = a.Array[i] ; j = i – 1;

while (( j >= 0 )&&(x < a.Array[j]))

{a.Array[j + 1] = a.Array[j]; j ––;

18
}

………… ;

i++;

return a;

Chọn câu lệnh thích hợp để đưa vào (............) với mục tiêu đưa giá trị cần chèn vào vị trí.

Đáp án đúng là: a.Array[j+1] = x

Câu Hỏi 10:Thủ tục mô tả thuật toán sắp xếp chọn (Selection Sort):

void SapXepChon (T M[], int N)

{ int K = 0, PosMin;

int Temp;

while (K < N-1)

T Min = M[K];

PosMin = K;

for (int Pos = K+1; Pos < N; Pos++)

if (Min > M[Pos])

Min = M[Pos];

PosMin = Pos

................................... [1]

................................... [2]

................................... [3]

K++;

return;

Chọn câu lệnh thích hợp để đưa vào [1], [2], [3] với mục tiêu hoán vị M[K] và M[PosMin]

Đáp án đúng là:

19
Temp = M[K] ;

M[K] = M[PosMin];

M[PosMin] = Temp ;

Vì: Để hoán vị M[K] và M[PosMin] thực hiện:

Temp = M[K] ;

M[K] = M[PosMin];

M[PosMin] = Temp;

Câu Hỏi 1:Bạn hãy cho biết độ phức tạp của việc sắp xếp tăng dần một dãy số bằng thuật toán Quick sort

trong trường hợp tồi nhất với n là số phần tử của dãy.

Đáp án đúng là: O(n )

Câu Hỏi 2:Cho các bước của thuật toán sắp dãy sắp xếp một dãy a , a ,…, a theo thứ tự tăng dần theo thuật

toán Selection sort như sau :

Bước 1: i = 0;

Bước 2: tìm phần tử A[min] nhỏ nhất trong dãy từ A[i] tới A[n–1]

Bước 3: hoán vị A[min] và A[i]

Bước 4 : nếu i <= n – 2 thì i = i + 1, lặp lại bước 2, ngược lại thì dừng

Trường hợp tốt nhất, khi dãy phần tử cần sắp xếp có thứ tự tăng dần:

Đáp án đúng là: Số phép gán: S = 0

Câu Hỏi 3:Thủ tục mô tả thuật toán sắp xếp chèn trực tiếp (Insertion sort):

#de ne Max_Size …

typedef Kieu_du_lieu KeyType;

typedef struct KeyArray

KeyType Array[Max_Size];

int n;

};

KeyArray Sortinsert( KeyArray a)

20
{

int i,j;

KeyType x;

i = 1;

while ( i <= a.n – 1 )

{ x = a.Array[i] ; j = i – 1;

while (( j >= 0 )&&(x < a.Array[j]))

{a.Array[j + 1] = a.Array[j]; j ––;

………… ;

i++;

return a;

Đáp án đúng là: a.Array[j+1] = x Vì:

Câu Hỏi 4:Bạn hãy cho biết độ phức tạp của việc sắp xếp tăng dần một dãy số bằng thuật toán chèn trực
tiếp trong trường hợp dãy đã được sắp tăng với n là số phần tử của dãy?

Đáp án đúng là: O(n).

Câu Hỏi 5:Cho các bước của thuật toán sắp dãy sắp xếp một dãy a , a ,…, a theo thứ tự tăng dần như sau :

Bước 1: i = 1;

Bước 2:đặt

x = A[i];

j = i – 1;

Bước 3: while (j >= 0) && (x < A[j])

A[j + 1] = A[j];

j––;

Bước 4: đặt A[j + 1] = x ;

i++;

Bước 5: nếu i < = n – 1 lặp lại bước 2 ngược lại thì kết thúc
21
Bạn cho biết đây là thuật toán sắp xếp nào?

Đáp án đúng là: Chèn trực tiếp – Insertion sort.

Câu Hỏi 6:Theo thuật toán Quick sort, về nguyên tắc thì điều kiện nào sau đây dùng để chọn khóa chốt?

Đáp án đúng là: Chọn ngẫu nhiên

Câu Hỏi 7:

Đáp án đúng là:

Câu Hỏi 8:Thủ tục mô tả thuật toán sắp xếp chọn (Selection Sort):

void SapXepChon (T M[], int N)

{ int K = 0, PosMin;

int Temp;

while (K < N-1)

T Min = M[K];

PosMin = K;

for (int Pos = K+1; Pos < N; Pos++)

if (Min > M[Pos])

Min = M[Pos];

PosMin = Pos

}
22
................................... [1]

................................... [2]

................................... [3]

K++;

return;

Chọn câu lệnh thích hợp để đưa vào [1], [2], [3] với mục tiêu hoán vị M[K] và M[PosMin]

Đáp án đúng là:

Temp = M[K] ;

M[K] = M[PosMin];

M[PosMin] = Temp ;

Câu Hỏi 9:Bạn hãy cho biết độ phức tạp của việc sắp xếp tăng dần một dãy số bằng thuật toán Heap sort

trong trường hợp tồi nhất với n là số phần tử của dãy.

Đáp án đúng là: O(nlog n)

Câu Hỏi 10:Tên của thuật toán sắp xếp mà tư tưởng của nó là phân hoạch dãy ban đầu thành các dãy con
có vị trí tương đối với một phần tử trong dãy?

Đáp án đúng là: Quick sort

23

You might also like