Đâu là định nghĩa của Ngăn xếp
A. Một kiểu danh sách trong đó được trang bị hai phép toán bổ sung một phần tử vào cuối danh sách và loại bỏ một phần tử ở đầu danh sách
B. Dạng danh sách đặc biệt trong đó các phép toán thêm vào một phần tử mới hoặc loại bỏ một phần tử trong danh sách chỉ được phép thực hiện ở một đầu của danh sách
C. Cả hai đáp án đều sai
D. Cả hai đáp án đều đúng
Cho đoạn mã sau, cho biết kết quả của x?
Queue Q;
InitQueue(Q);
Put(Q, “Green”);
Put(Q, “Red”);
Put(Q, “Yellow”);
Get(Q,x);
Get(Q,x);
A. Green
B. Tất cả các phương án đều sai
C. Yellow
D. Red
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
Cho s là Stack chứa các giá trị nguyên, Kết quả của đoạn mã sau là gì?
void main()
{
int n=3553, du, b=8;
stack *s;
InitStack(s);
while(n!=0)
{
du = n%b;
Push(s, du);
n = n/b;
}
cout<<“Ket qua la:”;
while( !isEmpty(s))
{
cout<<Pop(s);
}
}
A. 3553
B. 1476
C. 6741
D. 0
Cho đoạn mã sau, cho biết kết quả của x?
Queue Q;
InitQueue(Q);
Put(Q, “Green”);
Put(Q, “Red”);
Put(Q, “Yellow”);
Get(Q,x);
A. Green
B. Yellow
C. Tất cả các phương án đều sai
D. Red
Các thao tác được định nghĩa cho hàng đợi một cách tổng quát
A. Cả hai đáp án đều sai
B. Put
C. Cả hai đáp án đều đúng
D. Get
Cho đoạn mã sau
stack <int> s; for (int i = 1; i <= 4; i++)
s.push(i);
Phần tử được lấy ra đầu tiên của Stack là gì?
Cho các phần tử 5, 10, 3, 42 lần lượt được bổ sung vào hàng đợi (Queue). Phần tử nào được lấy ra cuối cùng
Hàng đợi còn được gọi là danh sách
A. Cả hai đáp án đều đúng
B. Cả hai đáp án đều sai
C. FIFO
D. LIFO
Để tiến hành tìm kiếm một phần tử trong danh sách liên kết đôi sử dụng phương pháp tìm kiếm gì?
A. Cả ba phát biểu đều đúng
B. Tìm kiếm tuyến tính và tìm kiếm nhị phân
C. Tìm kiếm tuyến tính
D. Tìm kiếm nhị phân
Đoạn mã để tạo ra nút mới có thành phần là x trong danh sách liên kết đôi với mỗi nút gồm các thành phần (infor, next, pre) sau:
Node* get_node( Data x ){
Node *p;
p = (Node*)malloc(sizeof(Node));
if ( p == NULL )
{
printf(“Ko du bo nho”);
exit(1);
}
p -> …….. = x;
p -> next = NULL;
p -> pre = NULL;
return p;
}
Điền phần còn thiếu vào chỗ …………..
A. infor
B. link
C. data
D. next
Để sử dụng hàm cấp phát bộ nhớ malloc(), calloc(), new(). Ta phải sử dụng thư viện nào?
A. stdlib.h
B. conio.h
C. string.h
D. stdio.h
Để sắp xếp các phần tử của danh sách liên kết có mấy phương án sử dụng:
A. 5 phương án
B. 3 phương án
C. 2 phương án
D. 4 phương án
Đị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:
struct Node
{
int Key;
struct Node *next;
struct Node *pre;
};
Trong đó, khai báo Node *next dùng để mô tả
A. Vùng liên kết quản lý địa chỉ phần tử kế tiếp của phần tử cuối
B. Vùng liên kết quản lý địa chỉ phần tử kế tiếp
C. Con trỏ trở tới phần dữ liệu cuối của danh sách
D. Con trỏ trở tới phần dữ liệu
Thao tác thêm một phần tử vào cây khi so sánh giá trị của phần tử cần thêm vào so với nút đang xét nếu phần tử cần thêm vào lớn hơn thì được thêm vào vị trí nào?
A. Phần tử mới được bổ sung vào nhánh trái của nút đang xét
B. Cả hai phát biểu trên đều đúng
C. Cả hai phát biểu trên đều sai
D. Phần tử mới được bổ sung vào nhánh phải của nút đang xét
Cho dãy số sau: 30, 18, 35, 17, 40, 16, 32, 31, 43, 19. Cho biết kết quả khi duyệt cây được tạo lần lượt từ các phần tử trên bằng phương pháp duyệt RNL(Right Node Left):
A. 16, 17, 19, 18, 31, 32, 43, 40, 35, 30
B. 30, 18, 35, 17, 40, 16, 32, 31, 43, 19
C. 30, 35, 40, 43, 32, 31, 18, 19, 17, 16
D. 43, 40, 35, 32, 31, 30, 19, 18, 17, 16
Tổng các phần tử trên một hàng hoặc của một cột trong ma trận kề của đồ thị vô hướng G = <V,E> đúng bằng
A. Số cạnh liên thuộc với đỉnh của cột hoặc hàng đó
B. Hai lần số cạnh của đồ thị
C. Một nửa số cạnh của đồ thị
D. Tổng bán đỉnh bậc ra của tất cả các đỉnh
Tổng các phần tử hàng i, cột j của ma trận kề đồ thị vô hướng G = <V,E> đúng bằng
A. Hai lần số bậc của đỉnh i, đỉnh j
B. Bậc của đỉnh i, đỉnh j
C. Một nửa số bậc của đỉnh i, đỉnh j
D. Cả ba phương án đều sai
Cho khai báo cấu trúc đồ thị dạng danh sách cạnh như sau:
struct Canh
{
int dd,dc;
float ts;
};
struct DoThiCanh
{
int m;
Canh ds[max];
};
Đâu là đoạn mã để liệt kê danh sách tất cả các cạnh hiện có của đồ thị
A. void XuLy(DoThiCanh G)
{
printf("\n Danh sach canh la: \n");
for(int i = 1; i<=G.m; i++)
printf("\n %d -> %d: %7.1f",
G.ds[i].dd,G.ds[i].dc, G.ds[i].ts);
}
B. void XuLy(DoThiCanh G,int k)
{
int i;
printf("\n Cac dinh ke cua dinh %d la:",k);
for(i=1;i<=G.m;i++)
{
if(G.ds[i].dd == k)
printf("%7d",G.ds[i].dc);
if(G.ds[i].dc == k)
printf("%7d",G.ds[i].dd);
}
}
C. void XuLy(DoThi G, int k){ int i,j; printf("\n Cac dinh ke cua %d la:",k); for(i=1;i<=G.n;i++) if(G.C[k][i]>0) printf("%7d",i);}
D. void XuLy(DoThi G){ printf("\n Ma tran trong so la:\n"); for(int i =1; i<=G.n; i++) { for(int j=1;j<=G.n;j++) printf("%8.1f",G.C[i][j]); printf("\n"); }}