220 câu trắc nghiệm Cấu trúc dữ liệu và giải thuật có đáp án - Phần 1
-
14454 lượt thi
-
20 câu hỏi
-
20 phút
Danh sách câu hỏi
Câu 1:
Tìm mô tả đúng nhất cho hàm TinhTong sau:
int TinhTong(int N)
{ int so = 2; int tong = 0; int dem = 0; while (dem <N)
{
if (KiemTra(so) == 1)
{
tong = tong + so;
dem ++;
}
so = so + 1;
}
return tong;
} Trong đó
int KiemTra(int so)
{
for (int i = 2; i<so; i++)
if (so%i == 0)
return 0;
return 1;
}
int TinhTong(int N)
{ int so = 2; int tong = 0; int dem = 0; while (dem <N)
{
if (KiemTra(so) == 1)
{
tong = tong + so;
dem ++;
}
so = so + 1;
}
return tong;
} Trong đó
int KiemTra(int so)
{
for (int i = 2; i<so; i++)
if (so%i == 0)
return 0;
return 1;
}
Xem đáp án
Chọn đáp án C
Câu 2:
Mối quan hệ giữa cấu trúc dữ liệu và giải thuật có thể minh họa bằng đẳng thức:
Xem đáp án
Chọn đáp án A
Câu 3:
Các tiêu chuẩn đánh giá cấu trúc dữ liệu. Để đánh giá một cấu trúc dữ liệu chúng ta thường dựa vào một số tiêu chí:
Xem đáp án
Chọn đáp án D
Câu 4:
Đoạn mã giả dưới đây mô tả thuật toán gì?
Thuật toán:
B1: k = 1
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
Thuật toán:
B1: k = 1
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
Xem đáp án
Chọn đáp án C
Câu 5:
Cho hàm tìm kiếm tuyến tính như sau:
int TimKiem (int M[], int N, int X)
{ int k = 0;
M[N] = X;
while (M[k] != X)
k++;
if (k < N)
return (k);
return (-1);
}
Chọn câu đúng nhất:
Xem đáp án
Chọn đáp án C
Câu 6:
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:
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:
Xem đáp án
Chọn đáp án B
Câu 7:
Chọn câu đúng nhất để mô tả thuật toán sắp xếp nổi bọt (Bubble Sort) trên mảng M có N phần tử:
Xem đáp án
Chọn đáp án A
Câu 8:
Hàm mô tả sắp xếp nổi bọt (Bubble Sort) trên mảng M có N phần tử
void BubbleSort(int M[], int N)
{
[2] int Temp;
[3] for (int I = 0; I < N-1; I++)
[4] …………………………………..
[5] if (M[J] < M[J-1])
[6] {
[7] Temp = M[J];
[8] M[J] = M[J-1];
[9] M[J-1] = Temp;
[10] }
[11] return;
[12] }
[13]
Lệnh nào sau đây sẽ được đưa vào dòng lệnh thứ [5] của thủ tục:
void BubbleSort(int M[], int N)
{
[2] int Temp;
[3] for (int I = 0; I < N-1; I++)
[4] …………………………………..
[5] if (M[J] < M[J-1])
[6] {
[7] Temp = M[J];
[8] M[J] = M[J-1];
[9] M[J-1] = Temp;
[10] }
[11] return;
[12] }
[13]
Lệnh nào sau đây sẽ được đưa vào dòng lệnh thứ [5] của thủ tục:
Xem đáp án
Chọn đáp án C
Câu 9:
Thủ tục mô tả thuật toán sắp xếp chọn trực tiếp (Straight Selection Sort):
void SapXepChonTrucTiep(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]
void SapXepChonTrucTiep(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]
Xem đáp án
Chọn đáp án D
Câu 10:
Đối với thuật toán sắp xếp chọn trực tiếp cho dãy các phần tử sau (10 pt) 16 60 2 25 15 45 5 30 33 20
Cần thực hiện ..................... chọn lựa phần tử nhỏ nhất để sắp xếp mảng M có thứ tự tăng dần.
Cần thực hiện ..................... chọn lựa phần tử nhỏ nhất để sắp xếp mảng M có thứ tự tăng dần.
Xem đáp án
Chọn đáp án C
Câu 11:
Thuật toán sắp xếp chèn trực tiếp (Straight Insertion Sort) được mô tả bằng đoạn mã giả như sau:
B1: K = 1
B2: IF (K = N) Thực hiện BKT
B3: X = M[K+1]
B4: Pos = 1
B5: IF (Pos > K) Thực hiện B7
B6: ELSE // Tìm vị trí chèn
B6.1: If (X <= M[Pos]) Thực hiện B7
B6.2: Pos++
B6.3: Lặp lại B6.1
B7: I = K+1 B8: IF (I > Pos)
B8.1: M[I] = M[I-1]
B8.2: I--
B8.3: Lặp lại B8
B9: ELSE
B9.1: M[Pos] = X
B9.2: K++
B9.3: Lặp lại B2
BKT: Kết thúc Trong đó B8 mô tả trường hợp
B1: K = 1
B2: IF (K = N) Thực hiện BKT
B3: X = M[K+1]
B4: Pos = 1
B5: IF (Pos > K) Thực hiện B7
B6: ELSE // Tìm vị trí chèn
B6.1: If (X <= M[Pos]) Thực hiện B7
B6.2: Pos++
B6.3: Lặp lại B6.1
B7: I = K+1 B8: IF (I > Pos)
B8.1: M[I] = M[I-1]
B8.2: I--
B8.3: Lặp lại B8
B9: ELSE
B9.1: M[Pos] = X
B9.2: K++
B9.3: Lặp lại B2
BKT: Kết thúc Trong đó B8 mô tả trường hợp
Xem đáp án
Chọn đáp án C
Câu 12:
Giả sử cần sắp xếp mảng M có N phần tử sau theo phương pháp sắp xếp chèn trực tiếp 11 16 12 75 51 54 5 73 36 52 98
Cần thực hiện ..................... chèn các phần tử vào dãy con đã có thứ tự tăng đứng đầu dãy M để sắp xếp mảng M có thứ tự tăng dần.
Cần thực hiện ..................... chèn các phần tử vào dãy con đã có thứ tự tăng đứng đầu dãy M để sắp xếp mảng M có thứ tự tăng dần.
Xem đáp án
Chọn đáp án D
Câu 14:
Tìm mô tả đúng cho hàm sau:
int SC (int M[], int Len, int CM[])
{ for (int i = 0; i < Len; i++)
CM[i] = M[i];
return (Len);
}
int SC (int M[], int Len, int CM[])
{ for (int i = 0; i < Len; i++)
CM[i] = M[i];
return (Len);
}
Xem đáp án
Chọn đáp án D
Câu 17:
Định nghĩa cấu trúc dữ liệu của danh sách liên kết đơn được mô tả như sau:
typedef struct Node
{ int Key;
Node * NextNode;
} OneNode;
Trong đó, khai báo Node * NextNode; dùng để mô tả:
typedef struct Node
{ int Key;
Node * NextNode;
} OneNode;
Trong đó, khai báo Node * NextNode; dùng để mô tả:
Xem đáp án
Chọn đáp án B
Câu 18:
Với cấu trúc dữ liệu của danh sách liên kết đơn lưu trữ thông tin về phòng máy:
typedef struct PM
{
int maPM; int tongsoMay;
} PHONGMAY;
typedef struct Node { PHONGMAY Data; Node * NextNode;
} OneNode;
typedef OneNode * SLLPointer;
Để quản lý danh sách liên kết đơn bằng phần tử đầu và phần tử cuối, cần định nghĩa kiểu dữ liệu:
typedef struct PM
{
int maPM; int tongsoMay;
} PHONGMAY;
typedef struct Node { PHONGMAY Data; Node * NextNode;
} OneNode;
typedef OneNode * SLLPointer;
Để quản lý danh sách liên kết đơn bằng phần tử đầu và phần tử cuối, cần định nghĩa kiểu dữ liệu:
Xem đáp án
Chọn đáp án B
Câu 19:
Tổ chức cấu trúc dữ liệu cho danh sách liên kết đơn:
typedef struct Node
{ int Data; Node * Link;
} OneNode; typedef OneNode * SLLPointer;
Mã giả thuật toán thêm một phần tử có giá trị thành phần dữ liệu là NewData vào trong danh sách liên kết đơn SLList vào ngay sau nút có
địa chỉ InsNode:
B1: NewNode = new OneNode
B2: IF (NewNode = NULL) Thực hiện BKT
B3: NewNode ->Link = NULL
B4: NewNode ->Data = NewData
B5: IF (InsNode-> Link = NULL)
B5.1: InsNode-> Link = NewNode
B5.2: Thực hiện BKT // Nối các nút kế sau InsNode vào sau NewNode
B6: ………………………………………………..
// Chuyển mối liên kết giữa InsNode với nút kế của nó về NewNode
B7: ………………………………………………..
BKT: Kết thúc
B6 và B7 dùng để nối nút kế sau InsNode vào sau NewNode và chuyển mối liên kết giữa InsNode với nút kế nó về NewNode.
Hãy chọn câu đúng nhất cho B6 và B7
typedef struct Node
{ int Data; Node * Link;
} OneNode; typedef OneNode * SLLPointer;
Mã giả thuật toán thêm một phần tử có giá trị thành phần dữ liệu là NewData vào trong danh sách liên kết đơn SLList vào ngay sau nút có
địa chỉ InsNode:
B1: NewNode = new OneNode
B2: IF (NewNode = NULL) Thực hiện BKT
B3: NewNode ->Link = NULL
B4: NewNode ->Data = NewData
B5: IF (InsNode-> Link = NULL)
B5.1: InsNode-> Link = NewNode
B5.2: Thực hiện BKT // Nối các nút kế sau InsNode vào sau NewNode
B6: ………………………………………………..
// Chuyển mối liên kết giữa InsNode với nút kế của nó về NewNode
B7: ………………………………………………..
BKT: Kết thúc
B6 và B7 dùng để nối nút kế sau InsNode vào sau NewNode và chuyển mối liên kết giữa InsNode với nút kế nó về NewNode.
Hãy chọn câu đúng nhất cho B6 và B7
Xem đáp án
Chọn đáp án D
Câu 20:
Với định nghĩa cấu trúc dữ liệu cho danh sách liên kết đơn:
typedef struct Node
{
int Data; Node * Link;
} OneNode;
typedef OneNode * SLLPointer;
Hàm dưới đây để thêm một phần tử có giá trị thành phần dữ liệu là NewData vào trong danh sách liên kết đơn SLList vào ngay sau nút có địa chỉ InsNode.
SLLPointer ThemGiua(SLLPointer &SList, int NewData, SLLPointer &InsNode)
{ SLLPointer NewNode = new OneNode;
if (NewNode != NULL)
NewNode ->NextNode = NULL;
NewNode ->Data = NewData;
else
return (NULL);
if (InsNode->Link == NULL)
{
InsNode-> Link = NewNode; return (SList);
}
…………………………………………………………….
…………………………………………………………….
return (SList);
}
Hãy lựa chọn câu đúng nhất:
typedef struct Node
{
int Data; Node * Link;
} OneNode;
typedef OneNode * SLLPointer;
Hàm dưới đây để thêm một phần tử có giá trị thành phần dữ liệu là NewData vào trong danh sách liên kết đơn SLList vào ngay sau nút có địa chỉ InsNode.
SLLPointer ThemGiua(SLLPointer &SList, int NewData, SLLPointer &InsNode)
{ SLLPointer NewNode = new OneNode;
if (NewNode != NULL)
NewNode ->NextNode = NULL;
NewNode ->Data = NewData;
else
return (NULL);
if (InsNode->Link == NULL)
{
InsNode-> Link = NewNode; return (SList);
}
…………………………………………………………….
…………………………………………………………….
return (SList);
}
Hãy lựa chọn câu đúng nhất:
Xem đáp án
Chọn đáp án B