220 câu trắc nghiệm Cấu trúc dữ liệu và giải thuật
Nhằm giúp các bạn ôn tập và hệ thống lại kiến thức nhanh chóng để đạt kết quả cao trong kì thi sắp tới, tracnghiem.net tổng hợp và chia sẻ đến các bạn 220 câu trắc nghiệm Cấu trúc dữ liệu và giải thuật (có đáp án). Hi vọng sẽ trở thành nguồn tài liệu bổ ích giúp các bạn học tập và nghiên cứu một cách tốt nhất. Để ôn tập hiệu quả các bạn có thể ôn theo từng phần trong bộ câu hỏi này bằng cách trả lời các câu hỏi và xem lại đáp án và lời giải chi tiết. Sau đó các bạn hãy chọn mục "Thi thử" để hệ thống lại kiến thức đã ôn. Chúc các bạn thành công với bộ đề "Cực Hot" này nhé.
Chọn hình thức trắc nghiệm (20 câu/20 phút)
Chọn phần
-
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;
}
A. Hàm tính tổng N số nguyên đầu tiên
B. Hàm tính tổng N số nguyên tố nhỏ hơn N
C. Cả a, b đều sai
D. Cả a, b đều đúng
-
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:
A. Cấu trúc dữ liệu + Giải thuật = Chương trình
B. Cấu trúc dữ liệu + Chương trình = Giải thuật
C. Chương trình + Giải thuật = Cấu trúc dữ liệu
D. Cấu trúc dữ liệu = Chương trình
-
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í:
A. Cấu trúc dữ liệu phải tiết kiệm tài nguyên (bộ nhớ trong)
B. Cấu trúc dữ liệu phải phản ảnh đúng thực tế của bài toán
C. Cấu trúc dữ liệu phải dễ dàng trong việc thao tác dữ liệu
D. Cả a, b, c đều đúng
-
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
A. Tìm nhị phân phần tử có giá trị X
B. Tìm phần tử nhỏ nhất của mảng M bao gồm N phần tử
C. Tìm tuyến tính phần tử có giá trị X
D. Cả a, b, c đều sai
-
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:
A. Hàm sẽ trả về 0 nếu không tìm thấy phần tử có giá trị là X
B. Hàm sẽ trả về 1 nếu tìm thấy phần tử có giá trị là X
C. Hàm sẽ trả về -1 nếu không tìm thấy phần tử có giá trị là X
D. Hàm sẽ trả về 1 nếu không tìm thấy phần tử có giá trị là X
-
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:
A. Thủ tục hỗ trợ tìm kiếm 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
B. Thủ tục hỗ trợ 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. Thủ tục hỗ trợ 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ừ Last đến chỉ số First
D. Thủ tục hỗ trợ tìm kiếm không đệ quy phần tử có giá trị là X trên mảng các phần tử từ chỉ số từ Last đến chỉ số First
-
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ử:
A. Đi từ cuối mảng về đầu mảng, trong quá trình đi nếu phần tử ở dưới (đứng phía sau) nhỏ hơn phần tử đứng ngay trên (trước) nó thì hai phần tử này sẽ được đổi chỗ cho nhau. Sau mỗi lần đi chúng ta đưa được một phần tử trồi lên đúng chỗ. Sau N–1 lần đi thì tất cả các phần tử trong mảng M sẽ có thứ tự tăng
B. Đi từ đầu mảng về cuối mảng, trong quá trình đi nếu phần tử ở dưới (đứng phía sau) nhỏ hơn phần tử đứng ngay trên (trước) nó thì hai phần tử này sẽ được đổi chỗ cho nhau. Sau mỗi lần đi chúng ta đưa được một phần tử trồi lên đúng chỗ. Sau N lần đi thì tất cả các phần tử trong mảng M sẽ có thứ tự tăng.
C. Đi từ cuối mảng về đầu mảng, trong quá trình đi nếu phần tử ở dưới (đứng phía sau) nhỏ hơn phần tử đứng ngay trên (trước) nó thì hai phần tử này sẽ được đổi chỗ cho nhau. Sau mỗi lần đi chúng ta đưa được một phần tử trồi lên đúng chỗ. Sau N lần đi thì tất cả các phần tử trong mảng M sẽ có thứ tự tăng
D. Cả a, b, c đều sai
-
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:
A. for (int J = N-1; J > I; J++)
B. for (int J = N; J < I; J--)
C. for (int J = N-1; J > I; J--)
D. Không có dòng lệnh nào phù hợp, không cần thêm vào thuật toán vẫn chạy đúng
-
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]
A. Temp = M[K] ; Temp = M[PosMin]; M[PosMin] = Temp;
B. M[K] = Temp; M[K] = M[PosMin]; M[PosMin] = Temp ;
C. Temp = M[K] ; M[PosMin] = M[K]; M[PosMin] = Temp ;
D. Temp = M[K] ; M[K] = M[PosMin]; M[PosMin] = Temp ;
-
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.
A. 7 lần
B. 8 lần
C. 9 lần
D. 10 lần
-
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
A. Nếu còn phải dời các phần tử từ Pos->I về phía sau 1 vị trí
B. Nếu còn phải dời các phần tử từ Pos->K+1 về phía sau 1 vị trí
C. Nếu còn phải dời các phần tử từ Pos->K về phía sau 1 vị trí
D. Nếu còn phải dời các phần tử từ Pos->I+1 về phía sau 1 vị trí
-
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.
A. 7 lần
B. 8 lần
C. 9 lần
D. 10 lần
-
Câu 13:
Lựa chọn định nghĩa về danh sách đúng nhất?
A. 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 đó
B. Số phần tử của danh sách gọi là chiều dài của danh sách
C. Một danh sách có chiều dài bằng 0 là một danh sách rỗng
D. Cả a, b, c đều đúng
-
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);
}
A. Hàm thực hiện việc sao chép nội dung mảng CM có chiều dài Len về mảng M có cùng chiều dài. Hàm trả về chiều dài của mảng M sau khi sao chép
B. Hàm thực hiện việc sao chép nội dung mảng M có chiều dài Len -1 về mảng CM có cùng chiều dài. Hàm trả về chiều dài của mảng CM sau khi sao chép
C. Hàm thực hiện việc sao chép nội dung mảng CM có chiều dài Len -1 về mảng M có cùng chiều dài. Hàm trả về chiều dài của mảng M sau khi sao chép
D. Hàm thực hiện việc sao chép nội dung mảng M có chiều dài Len về mảng CM có cùng chiều dài. Hàm trả về chiều dài của mảng CM sau khi sao chép
-
Câu 15:
Cấu trúc dữ liệu mảng có các ưu điểm nào?
A. Việc thêm, bớt các phần tử trong danh sách đặc có nhiều khó khăn do phải di dời các phần tử khác đi qua chỗ khác
B. Việc truy xuất và tìm kiếm các phần tử của mảng là dễ dàng vì các phần tử đứng liền nhau nên chúng ta chỉ cần sử dụng chỉ số để định vị vị trí các phần tử trong danh sách (định vị địa chỉ các phần tử)
C. Mật độ sử dụng bộ nhớ của mảng là tối ưu tuyệt đối
D. Câu a, b, c đúng
-
Câu 16:
Định nghĩa nào là đúng với danh sách liên kết?
A. Danh sách liên kết là cấu trúc dữ liệu dạng cây
B. Danh sách liên kết là cấu trúc dữ liệu tự định nghĩa
C. 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
D. Danh sách liên kết là tập hợp các phần tử mà đặt kề cận với nhau trong vùng nhớ
-
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ả:
A. Con trỏ trỏ tới phần dữ liệu
B. Vùng liên kết quản lý địa chỉ phần tử kế tiếp
C. Con trỏ trỏ tới địa chỉ vùng nhớ của phần tử trước đó trong danh sách liên kết đơn
D. Con trỏ trỏ tới địa chỉ vùng nhớ của phần tử đầu tiên trong danh sách liên kết đơn
-
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:
A. SLLPointer DanhSach;
B. typedef struct SSLLIST { SLLPointer First; SLLPointer Last; } LIST; LIST DanhSach;
C. typedef struct SSLLIST { SLLPointer First; SLLPointer Last; int total; } LIST; LIST DanhSach;
D. typedef struct SSLLIST { SLLPointer First; int total; } LIST; LIST DanhSach;
-
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
A. B6: InsNode-> Link = NewNode-> Link B7: NewNode = InsNode-> Link
B. B6: InsNode-> Link = NewNode-> Link B7: InsNode-> Link = NewNode
C. B6: NewNode-> Link = InsNode-> Link B7: NewNode = InsNode-> Link
D. B6: NewNode-> Link = InsNode-> Link B7: InsNode-> Link = NewNode
-
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:
A. InsNode -> Link = NewNode -> Link; InsNode-> Link = NewNode;
B. NewNode-> Link = InsNode-> Link; InsNode-> Link = NewNode;
C. InsNode -> Link = NewNode -> Link; NewNode = InsNode-> Link;
D. NewNode-> Link = InsNode-> Link; NewNode = InsNode-> Link;