Các ứng dụng cơ bản của hàng đợi gồm
A. Tất cả các phương án đều sai
B. Đảo ngược xâu ký dự
C. Tất cả các phương án đều đúng
D. Chuyển đổi cơ số
Cho khai báo cấu trúc:
struct NodeQueue
{
int info;
struct NodeQueue *next;
struct NodeQueue *pre;
};
struct Queue
{
NodeQueue *Rear, *Front;
}
Queue Q;
Đoạn mã sau đây thực hiện yêu cầu gì?
void initQueue(Queue &Q)
{
Q.Rear = NULL;
Q.Front = NULL;
}
A. Khởi tạo mảng rỗng
B. Khởi tạo hàng đợi rỗng
C. Khởi tạo danh sách rỗng
D. Khởi tạo Stack rỗng
Cho cây NPTK, Cho biết kết quả duyệt cây theo thứ tự RNL là:

A. 46, 36, 33, 31, 30, 16, 14, 11, 8, 6
B. 6, 8, 11, 14, 16, 30, 31, 33, 36, 46
C. 30, 11, 6, 8, 16, 14, 36, 31, 33, 46
D. 8, 6, 14, 16, 11, 33, 31, 46, 36, 30
Phương pháp duyệt NLR là phương pháp duyệt gì?
A. Left - Right - Node
B. Left - Node - Righ
C. Cả 3 lựa chọn đều đúng
D. Node - Left - Right
Cho các phần tử sau: 31, 19, 36, 20, 41, 17, 33, 32. Tạo cây NPTK từ các phần tử trên. Hãy cho biết sau khi xóa phần tử 33 trên cây sau đó áp dụng phương pháp duyệt NLR thì kết quả thu được thứ tự các phần tử là như thế nào?
A. 31, 19, 36, 20, 41, 17, 32
B. 17, 19, 20, 31, 32, 36, 41
C. 17, 20, 19, 32, 41, 36, 31
D. 31, 19, 17, 20, 36, 32, 41
Cho khai báo Stack như sau:
struct Stack
{
int top
int nut[max];
};
Đoạn mã thực hiện thao tác gì?
int Top(Stack &s)
{
int tg;
if ( isEmpty(s) == 1 )
{
printf("Ngan xep rong");
exit(1);
}
else
{
tg = s.nut[s.top];
}
return tg;
}
A. Thực hiện tính tổng các phần tử đang có trong Staclk
B. Trả lại giá trị của phần tử đỉnh hiện tại của Stack
C. Duyệt qua lần lượt từng phần tử trong Stack và in thông tin lần lượt ở đỉnh ra
D. Bổ sung thêm phần tử mới vào đỉnh của Stack
Cho khai báo cấu trúc cây NPTK:
struct Node
{
int key;
Node *Left, *Right;
};
typedef Node *Tree;
và CTC insertNode(Tree &T, item x) để chèn thêm phần tử mới vào cây nhị phân tìm kiếm, nếu chèn thành công trả lại giá trị 0 nếu không chèn thành công trả lại giá trị -1
Đoạn mã nào sau đây để cho phép nhập liên tiếp các số nguyên đến khi bằng 0 thì dừng và tạo cây nhị phân tìm kiếm từ các số nguyên đã nhập đó.
A. Node* searchKey(Tree T, int x) { if (T!=NULL) { if (T->key == x)
{ Node *P = T; return P;} if (T->key > x)
return searchKey(T->Left, x); if (T->key < x)
return searchKey(T->Right, x); } return NULL;}
B. void CreateTree(Tree &T)
{
int x;
while (1)
{
printf("Nhap vao Node: ");
scanf("%d", &x);
if (x == 0) break;
int check = insertNode(T, x);
if (check == -1)
printf("Node da ton tai!");
else if (check == 0)
printf("Khong du bo nho");
}
}
C. void LNR(Tree T){ if(T!=NULL) { LNR(T->Left); printf("%7d",T->key); LNR(T->Right); }}
D. int insertNode(Tree &T, int x){ if (T != NULL) { if (T->key == x) return -1; if (T->key > x)
return insertNode(T->Left, x); else if (T->key < x)
return insertNode(T->Right, x); } T = (Node *) malloc(sizeof(Node)); if (T == NULL) return 0; T->key = x; T->Left = T->Right = NULL; return 1;}
Ứng dụng cơ bản của ngăn xếp gồm
A. Tính giá trị biểu thức
B. Chuyển đổi cơ số
C. Đảo ngược xâu ký tự
D. Tất cả các phương án đều đúng
Đoạn mã khởi tạo danh sách rỗng sau:
void init( DList &Q ){
Q.Head = ......;
Q.Tail = NULL;
}
Phần còn thiếu điền vào dấu ……. là gì
A. NILL
B. O
C. NULL
D. Các đáp án đều sai
Định nghĩa nào đúng với danh sách liên kết
A. 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ớ
B. Danh sách liên kết là cấu trúc dữ liệu dạng cây
C. Danh sách liên kết là cấu trúc dữ liệu tự định nghĩa
D. Danh sách liên kết là tập hợp các phần tử mà giữa chúng có sự kết nối với nhau dựa vào liên kết của chúng
Cho các bước mô tả thuật toán như sau:
Nếu danh sách rỗng:
DQ.Head = new_element;
DQ.Tail = DQ.Head;
Ngược lại (d/s khác rỗng):
new_element -> next = DQ.Head;
DQ.Head -> pre = new_element;
DQ.Head = new_element;
Đây là mô tả của thuật toán chèn một phần tử vào danh sách liên kết đôi với vị trí chèn là?
A. Chèn sau phần tử đã biết
B. Chèn trước phần tử đã biết
C. Chèn vào đầu danh sách
D. Chèn vào cuối danh sách
Cho các phần tử sau: 31, 19, 36, 20, 41, 17, 33, 32. Tạo cây NPTK từ các phần tử trên. Hãy cho biết sau khi xóa phần tử 33 trên cây sau đó áp dụng phương pháp duyệt NRL thì kết quả thu được thứ tự các phần tử là như thế nào?
A. 31, 19, 36, 20, 41, 17, 32
B. 41, 36, 32, 31, 20, 19, 17
C. 41, 32, 36, 20, 17, 19, 31
D. 31, 36, 41, 32, 19, 20, 17
Phần tử thế mạng có thể được dùng khi xóa nút trong trường hợp nút có hai nhánh con là gì?
A. Cả hai phát biểu đều sai
B. là phần tử nhỏ nhất trong số các phần tử bên nhánh phải
C. là phần tử lớn nhất trong số các phần tử bên nhánh trái
D. Cả hai phát biểu đều đúng
Cho đồ thị vô hướng có 5 đỉnh với tổng bậc các đỉnh là 10. Vậy số số cạnh của đồ thị là bao nhiêu
Độ phức tạp thuật toán được đánh giá có loại nào?
A. Cả hai loại được liệt kê
B. Độ phức tạp thời gian
C. Độ phức tạp không gian
D. Không phải các loại liệt kê
Thuật toán được biểu diễn bằng cách nào
A. Sơ đồ khối
B. Tất cả các cách được liệt kê
C. Giả mã
D. Liệt kê từng bước
Để xác định giải thuật đệ quy cần xác định gì?
A. Phần tử neo
B. Cả hai lựa chọn đều đúng
C. Công thức tổng quát
D. Cả hai lựa chọn đều sai
Để tính biểu thức s = ½ + 2/3 + ¾ + … + n/(n+1) ta chọn hàm
A. float F(int n)
{
if (n==1)
return 1.0/2;
else
return (float)(n+1)/(n+1) + F(n-1);
}
B. float F(int n)
{
if (n==1)
return 1.0/2;
else
return (float)n/ ( n) + F(n-1);
}
C. float F(int n)
{
if (n==1)
return 1.0/2;
else
return (float)n/(n+1) + F(n-1);
}
D. float F(int n)
{
if (n==1)
return 1.0/2;
else
return (float)n/(n+1) + F (n-1);
}
Để tính biểu thức s = ½ + ¼ + … + 1/(2n) với n>=1 ta chọn hàm
A. float F( int n )
{
if (n ==1 )
return 1.0/2;
else
return 1.0/n + F(n-1);
}
B. float F( int n )
{
if (n ==1 )
return 1.0/2;
else
return 1.0/2*n + F(n-1);
}
C. float F( int n )
{
if (n ==1 )
return 1.0/2;
else
return 1.0/(2*n) + F(n-1);
}
D. float F( int n )
{
if (n ==1 )
return 1.0/2;
else
return 1.0/(2*n) + F1(n-1);
}
Cho biết kết xuất của đoạn chương trình sau:
long F(int n)
{
if ((2*n+1) ==1)
return 1;
else
return (2*n+1)+F(n-1);
}
void main()
{
long x=F(3);
printf("%ld", x);
}