Cấu trúc dữ liệu và giải thuật - IT05 (255)
Các thành phần của danh sách liên kết kép gồm:
A. Dữ liệu (infor), liên kết với nút trước (previous) và liên kết với nút sau (next)
B. Liên kết với nút trước (previous) và liên kết với nút sau (next)
C. Dữ liệu (infor) và liên kết với nút sau (next)
D. Dữ liệu (infor) và liên kết với nút trước (previous)
Cho khai báo cấu trúc đồ thị dạng ma trận trọng số như sau:
struct DoThi { int n; float C[ max ][ max ]; };
Cho biết đoạn chương trình con sau thực hiện gì?
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"); }}
A. In ma trận kề của đồ thị
B. In ma trận trọng số của đồ thị
C. In danh sách kề của đồ thị
D. In danh sách cạnh của đồ thị
Cho biết đây là ý tưởng của thuật toán nào:
Xuất phát từ dãy đầu a0, a1, …, ai, xét các phần tử sau đó từ ai+1 đến an xem có phần tử nào nhỏ hơn ai không thì hoán đổi vị trí => Sau mỗi lần luôn được dãy a0, a1, …, ai đã được sắp thứ tự
A. Ý tưởng của thuật toán sắp xếp InterchangeSort
B. Ý tưởng của thuật toán tìm kiếm nhị phân
C.
Ý tưởng của thuật toán sắp xếp InsertionSort
D. Ý tưởng của thuật toán tìm kiếm tuyến tính
Trong đồ thị vô hướng, số đỉnh bậc lẻ là một số
A. Chia hết cho 3
B. Chính phương
C. Chia hết cho 2
D. Số lẻ
Cho khai báo CTDL như sau:
struct CB { int mcb; char hoten[20]; char ns[12]; float hsl,pc ; }; struct Node { CB info; struct Node *next , *pre ; };
struct List { Node *head , *tail ; };
Đâu là đoạn mã để in ra màn hình thông tin đầy đủ của các Cán Bộ có trong danh sách liên kết lần lượt từ cuối trở về đầu
A. void InDSCanBo (DList Q) { Node *p; for (p=Q.Tail; p!= NULL ; p=p->pre) { System.out.print(“%5d”, p->info.mcb); System.out.print(“%15s”, p->info.hoten); System.out.print(“%10s”, p->info.ns); System.out.print(“%7.1f”, p->info.hsl); System.out.print(“%7.0f”, p->info.pc); } }
B. void InDSCanBo (DList Q) { Node *p= Q.Head; While( p!= NULL ) { System.out.print(“%5d”, p->info.mcb); System.out.print(“%15s”, p->info.hoten); System.out.print(“%10s”, p->info.ns); System.out.print(“%7.1f”, p->info.hsl); System.out.print(“%7.0f”, p->info.pc); } }
C. void InDSCanBo (DList Q) { Node *p= Q.Tail; While( p!= NULL ) { System.out.print(“%5d”, p->info.mcb); System.out.print(“%15s”, p->info.hoten); System.out.print(“%10s”, p->info.ns); System.out.print(“%7.1f”, p->info.hsl); System.out.print(“%7.0f”, p->info.pc); } }
D. void InDSCanBo (DList Q) { Node *p; for (p=Q.Head; p!= NULL ; p=p->next) { System.out.print(“%5d”, p->info.mcb); System.out.print(“%15s”, p->info.hoten); System.out.print(“%10s”, p->info.ns); System.out.print(“%7.1f”, p->info.hsl); System.out.print(“%7.0f”, p->info.pc); } }
Tổng các phần tử hàng i, cột j của ma trận kề đồ thị có hướng G =<V,E> đúng bằng:
A. Bán đỉnh bậc ra của đỉnh i, bán đỉnh bậc vào đỉnh j.
B. Bán đỉnh bậc vào của đỉnh i, bán đỉnh bậc vào đỉnh j.
C. Bán đỉnh bậc vào của đỉnh i, bán đỉnh bậc ra đỉnh j
D. Bán đỉnh bậc ra của đỉnh i, bán đỉnh bậc ra đỉnh j.
Để 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/
+ 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
;
}
Cho G =<V,E> là đồ thị vô hướng liên thông n đỉnh. T =<V, H> được gọi là cây khung của đồ thị nếu:
A. T liên thông và mỗi cạnh của nó đều là cầu;
B. T liên thông và không có chu trình.
C. T liên thông không có chu trình và H E
D. T liên thông và có đúng n-1 cạnh.
Các hàm để giải phóng bộ nhớ là
A. malloc(), delete(), new(), free().
B. delete(),free().
C. malloc(), delete(), free().
D. calloc(), delete(), new(), free().
Ta gọi đỉnh v là đỉnh cô lập trong đồ thị vô hướng G = <V, E>
A. Nếu bậc của đỉnh v là một số chẵn
B. Nếu bậc của đỉnh v là 0
C. Nếu bậc của đỉnh v là 1
D. Nếu bậc của đỉnh v là một số lẻ
Cho khai báo cấu trúc đồ thị dạng ma trận trọng số như sau:
struct DoThi { int n; float C[ max ][ max ]; };
Đâu là đoạn mã để in ma trận trọng số biểu diễn đồ thị
A. void XuLy (DoThi &G) { int dd,dc; int i,j; float ts; printf( "Nhap so dinh do thi:" ); scanf( "%d" ,&G.n); for (i =1; i<=G.n; i++) for (j=1; j<=G.n; j++) G.C[i][j]=0; }
B. 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++) if (G.C[i][j]>0) printf("%8.1f",G.C[i][j]); printf("\n"); }}
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"); }}
Tổ chức của danh sách liên kết kép gồm có mấy thành phần:
A. 2 thành phần
B. 5 thành phần
C. 3 thành phần
D. 4 thành phần
Cho đoạn chương trình như sau:
void AddAfter(DLIST &DQ, DNode *q, DNode *new_element)
{
DNode *p = q -> next;
if (q != NULL)
{
new_element -> next = p;
new_element -> pre = q;
q -> next = new_element;
if (p != NULL)
p -> pre = new_element;
if (q == DQ.Tail)
…[1]…
}
else
AddFirst( DQ, new_element);
}
Đoạn lệnh nào được điền vào [1] cho đúng?
A. new_element= DQ.Tail;
B. DQ.Tail = new_element;
C. DQ.Head = new_element;
D. DQ.Tail = NULL;
Đ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;
……………………..
if ( p == NULL )
{
printf(“Ko du bo nho”);
exit(1);
}
p -> infor = x;
p -> next = NULL;
p -> pre = NULL;
return p;
}
Điền phần còn thiếu vào chỗ …………..
A. p = malloc(Node);
B. p = malloc(sizeof(Node));
C. p = (Node*)malloc(sizeof(Node));
D. p = (Node*)malloc(Node));
Tổng các phần tử trên hàng trong ma trận kề của đồ thị có hướng G = <V,E> đúng bằng
A. Cả ba phương án đều sai
B. Số cung của đồ thị
C. Hai lần số cung của đồ thị
D. Một nửa số cung của đồ thị
Các dạng biểu diễn của biểu thức toán học gồm
A. Tiền tố, trung tố và hậu tố
B. Trung tố và hậu tố
C. Tiền tố và trung tố
D. Tiền tố và hậu tố
Lựa chọn câu đúng nhất về danh sách liên kết đôi.
A. Vùng liên kết của một phần tử trong danh sách đôi có 02 mối liên kết với 01 phần tử trong danh sách
B. Vùng liên kết của một phần tử trong danh sách liên kết đôi có 02 mối liên kết với phần tử trước và sau nó trong danh sách
C. Vùng liên kết của một phần tử trong danh sách liên đôi có 01 mối liên kết với 02 phần tử khác trong danh sách
D. 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 với phần tử đầu và cuối danh sách
Cho thông tin của Hang Hoa gồm: mã hàng, tên hàng, số lượng và đơn giá.
Đâu là đoạn mã khai báo Cấu trúc dữ liệu dạng danh sách liên kết kép để lưu trữ danh sách Hang Hoa
A. struct HH { int mHang ; char tenHang [20]; float soLuong, donGia ; }; struct Node { HH info; struct Node *next; }; struct List { Node *head, *tail; };
B. struct HH { int mHang ; char tenHang [20]; float soLuong, donGia ; }; struct Node { HH info; struct Node *next, *pre; }; struct List { Node *head, *tail; };
C. struct HH { int mHang ; char tenHang [ 20 ]; float soLuong, donGia ; }; HH ds[10];
D. struct HH{ int mHang; char tenHang [20]; float soLuong, donGia;};HH x;
Đồ thị vô hướng G = <V,E> gồm n đỉnh và mỗi đỉnh có số bậc là 6 thì có bao nhiêu cạnh
A. 6n cạnh
B. N cạnh
C. 3n cạnh
D. 2n cạnh
Ta gọi đỉnh v là đỉnh treo trong đồ thị vô hướng G = <V, E>
A. Nếu bậc của đỉnh v là một số lẻ
B. Nếu bậc của đỉnh v là 0
C. Nếu bậc của đỉnh v là 1
D. Nếu bậc của đỉnh v là một số chẵn