Cấu trúc dữ liệu và giải thuật - IT05 (255)
Cho khai báo CTDL như sau:
struct CB { int mcb; char hoten[20]; char ns[12]; float hsl,pc,tt; }; struct Node { CB info; struct Node *next; };
struct List { Node *head , *tail ; };
Đâu là đoạn mã tìm kiếm CanBo theo mã cán bộ trong DSLK đơn
A. Node *TimCBMa(List Q,char k[]){ Node *p; for(p=Q.Head; p!=NULL; p=p->next) if(strcmp(p->info.ns,k)==0) break; return p;}
B. Node *TimCBMa(List Q,int k) { Node *p; for (p=Q.Head; p!= NULL ; p=p->next) if (p->info .mcb == k ) break ; return p;}
C. Node *TimCBMa( List Q,char k[]) { Node *p; for (p=Q. Head ; p!= NULL ; p=p-> next ) if (strcmp ( p-> info .hoten, k) ==0) break ; return p; }
D. void TimCBMa(List Q,char k[]){ Node *p; for(p=Q.Head; p!=NULL; p=p->next) if(p->mcb == k) break;}
Danh sách được cài đặt bằng cách nào:
A. Cài đặt bằng mảng
B. Cài đặt bằng danh sách liên kết
C. Cả hai đáp án đều sai
D. Cả hai đáp án đều đúng
Các thành phần của danh sách đơn gồm:
A. Dữ liệu (data)
B. Liên kết (link)
C. Số phần tử của danh sách (number)
D. Dữ liệu (data) và liên kết (link)
Đoạn mã cài đặt chèn thêm một phần tử mới vào đầu của danh sách liên kết đơn:
void insertFirst ( LIST &Q, Node *new_element ){
if ( Q.Head == NULL ) //nếu danh sách rỗng
{
Q.Head = new_element;
Q.Tail = Q.Head;
}
else//danh sách không rỗng
{
[1] ……………
[2] ……………
}
}
Đoạn mã còn thiếu để đặt vào dòn số [1] và [2].
A. Q.Head = new_element; new_element -> next = Q.Head;
B. new_element -> next = Q.Head; Q.Head = new_element;
C. new_element -> next = Q.Head; Q.Head -> next = new_element;
D. new_element -> next = NULL; Q.Head -> next = new_element;
Cho khai báo CTDL như sau:
struct CB { int mcb; char hoten[20]; char ns[12]; float hsl,pc,thanhtien ; }; struct Node { CB info; struct Node *next; };
struct List { Node *head , *tail ; };
Đâu là đoạn mã tính tổng tiền lương của các CanBo trong DSLK đơn.
A. float TinhTongLuong (List Q ) { Node *p; float s = 0; for (p=Q.Head; p!= NULL ; p=p->next) s = s + p->info.hsl; return s;}
B. float TinhTongLuong (List Q ) { Node *p; float s = 0; for (p=Q.Head; p!= NULL ; p=p->next) s = s + p->info.pc; return s;}
C. float TinhTongLuong (List Q ) { Node *p; float s = 0; for (p=Q.Head; p!= NULL ; p=p->next) s = s + p->info.thanhtien; return s;}
D. void TinhTongLuong (List Q) { Node *p; for (p=Q.Head; p!= NULL ; p=p->next) printf(“%7.1f”, p->info.tt); }
Danh sách liên kết là gì?
A. là tập hợp các phần tử liên kết móc nối liên tiếp với nhau, có kiểu truy cập ngẫu nhiên. Mỗi phần tử là một nút.
B. Cả hai phát biểu đều đúng
C. Cả hai phát biểu đều sai
D. là tập hợp các phần tử liên kết móc nối liên tiếp với nhau, có kiểu truy cập tuần tự. Mỗi phần tử là một nút.
Các trường hợp thực hiện hủy phần tử khỏi danh sách liên kết đơn gồm:
A. Hủy phần tử đầu danh sách, hủy phần tử đứng sau phần tử q và hủy phần tử có giá trị xác định k
B. Hủy phần tử có giá trị xác định k và hủy phần tử đứng sau phần tử q
C. Hủy phần tử đầu danh sách và hủy phần tử đứng sau phần tử q
D. Hủy phần tử đầu danh sách và hủy phần tử có giá trị xác định k
Để sắp xếp các phần tử của danh sách liên kết đơn sử dụng phương án nào?
A. Tất cả các đáp án đều sai
B. Hoán vị nội dung của phần tử
C. Cả hai phương án trên đều đúng
D. Thay đổi mối liên kết của phần tử
Cho hàm tìm kiếm tuyến tính trong mảng 1 chiều có n phần tử
int Search( int a[], int n, int x)
{
int i;
for(i=0; i<n; i++)
if(a[i] == x) return i;
return(-1);
}
Chọn phát biểu đúng nhất trong các phát biểu sau
A. Hàm trả về vị trí phần tử đầu tiên có giá trị bằng x, ngược lại trả về -1
B. Hàm luôn luôn trả về vị trí phần tử cuối cùng có giá trị bằng x
C. Hàm trả về vị trí phần tử cuối cùng có giá trị bằng x, ngược lại trả về n
D. Hàm trả về vị trí phần tử cuối cùng có giá trị bằng x, ngược lại trả về -1
Cho mảng a gồm các phẩn tử có giá trị như sau:
3126
Số lần hoán vị 2 phần tử khác nhau khi áp dụng thuật toán đổi chỗ trực tiếp (Interchange Sort) để sắp xếp mảng tăng dần là:
Đoạn mô tả này thuộc thuật toán nào:
Bước 1: i = 0
Bước 2: tính các giá trị j = i + 1
Bước 3: Trong khi j<n thực hiện
- nếu a[j] < a[i] thì hoán đổi a[i] với a[j]
- j = j + 1;
Bước 4: i = i +1
nếu i<n-1 thì lặp lại bước 2, ngược lại thì dừng
B. Tìm kiếm tuyến tính
C. Sắp xếp chèn trực tiếp .
D. Sắp xếp đổi chỗ trực tiếp
Bậc của nút trong cây có nghĩa là gì?
A. Là số nhánh con phải của nút đó
B. Là số nhánh con của nút đó
C. Là số nhánh con nhỏ nhất của nút con của nút đó
D. Là số nhánh con trái của nút đó
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 RLN 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, 32, 36, 20, 17, 19, 31
C. 31, 36, 41, 32, 19, 20, 17
D. 41, 36, 32, 31, 20, 19, 17
Cho cây NPTK, Cho biết kết quả duyệt cây theo thứ tự LRN là:
A. 46, 36, 33, 31, 30, 16, 14, 11, 8, 6
B. 6, 8, 11, 14, 16, 30, 31, 33, 36, 46
C. 8, 6, 14, 16, 11, 33, 31, 46, 36, 30
D. 30, 11, 6, 8, 16, 14, 36, 31, 33, 46
Bậc của cây có nghĩa là gì?
A. Cả hai phát biểu đều đúng
B. Là bậc nhỏ nhất của các nút trong cây
C. Là bậc lớn nhất của các nút trong cây
D. Cả hai phát biểu đều SAI
Cho biết kết quả khi CTC CreateTree_mang(T) được gọi trong chương trình chính
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; }
void DuyetCay ( Tree T) { if (T!= NULL ) { LNR(T-> Left ); printf( " %7d " ,T-> key ); LNR(T-> Right ); } }
void CreateTree_mang(Tree &T) { int x; int n=7; int a[] = { 8, 6, 10, 4, 9, 7, 11}; for ( int i=0;i<n;i++) { int check = insertNode(T, a[i]); if (check == -1) printf( "\n Node da ton tai!" ); else if (check == 0) printf( "\n Khong du bo nho" ); }
printf( " \n Duyet cay:" ); DuyetCay (T);
}
A. Duyet cay: 4 6 7 8 9 10 11
B. Duyet cay : 8 6 10 4 9 7 11
C. Duyet cay : 8 6 4 7 10 9 11
D. Duyet cay : 4 7 6 9 11 10 8
Cho đoạn mã cài đặt phương pháp duyệt NLR:
void NLR( Tree Root )
{
if ( root != NULL )
{
< Xử lý Root >; NLR ( Root -> Left );
NLR(Root->Left) ;
[1] ……….
}
}
Đoạn mã điền vào phần trống ở dòng số [1]
A. LRN ( Root -> Right );
B. LRN ( Root -> Left );
C. NLR ( Root -> Right );
D. NLR ( Root -> Left );
Cho các phần tử 5, 10, 3, 42 lần lượt được bổ sung vào ngăn xếp (Stack). Phần tử nào được lấy ra đầu tiên
Đâu là định nghĩa của Hàng đợi
A. 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
B. Cả hai đáp án đều sai
C. Cả hai đáp án đều đúng
D. 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
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=53, du, b=2;
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. 00211
B. 11100
C. 110202
D. 102021