Câu hỏi trắc nghiệm môn Cấu trúc dữ liệu và giải thuật - Công nghệ thông tin | Đại học Mở Hà Nội

Để tính biểu thức s = ½ + 2/3 + ¾ + … + n/(n+1)
ta chọn hàm
float F(int n)
{
if (n==1)
return 1.0/2;
else
return (float)n/(n+1) + F(n-1);
} . Tài liệu được sưu tầm giúp bạn tham khảo, ôn tập và đạt kết quả cao trong kì thi sắp tới. Mời bạn đọc đón xem !

Trường:

Đại học Mở Hà Nội 405 tài liệu

Thông tin:
32 trang 3 tháng trước

Bình luận

Vui lòng đăng nhập hoặc đăng ký để gửi bình luận.

Câu hỏi trắc nghiệm môn Cấu trúc dữ liệu và giải thuật - Công nghệ thông tin | Đại học Mở Hà Nội

Để tính biểu thức s = ½ + 2/3 + ¾ + … + n/(n+1)
ta chọn hàm
float F(int n)
{
if (n==1)
return 1.0/2;
else
return (float)n/(n+1) + F(n-1);
} . Tài liệu được sưu tầm giúp bạn tham khảo, ôn tập và đạt kết quả cao trong kì thi sắp tới. Mời bạn đọc đón xem !

32 16 lượt tải Tải xuống
Để tính biu thc s = ½ + 2/3 + ¾ + + n/(n+1)
ta chn hàm
float F(int n)
{
if (n==1)
return 1.0/2;
else
return (float)n/(n+1) + F(n-1);
}
Thut toán đưc biu din bng cách nào
Tấất c các cách được lit
Cho biết kết qu ca đon chương trình sau:
6
int F(int a[], int n)
Tham kho Tài liu ng dn hc Bài 1 Đánh
{
giá thut toán, mc V, bn Text
if (n==1)
return a[0];
F(a,5) = 1 + F(a,4) = 6
else
F(a,4) = 1 + F(a,3) = 5
return 1 + F(a,n-1);
F(a,3) = 1 + F(a,2) = 4
}
F(a,2) = 1 + F(a,1) = 3
int main()
F(a,1) = a[0] = 2
{
int a[] = {2, 3, 4, 5, 6};
printf("%d",F(a,5));
getch();
}
Cho mng a N (N>=2) phn t, x mt biến,
xét đon sau cho biết đon biu din
thut toán gì?
c 1: Khi gán i = 0, s = 0, qua c 2;
c 2: Nếu a[i] == x thì
s++; qua c 3
c 3: i = i + 1;
Nếu i == n: hết mng. Dng, in s ra màn hình
Đếm s phn t giá tr bng x trong mng
Ngưc li: Lp li c 2
Đây định nghĩa ca độ phc nào? “được tính
tng s chi phí v mt tng thi gian cn thiết
để hoàn thành thut toán, đưc đánh giá da
vào s ng c thao tác đưc s dng trong
thut toán da trên b d liu đầu vào
Thi gian
Để xác định gii thut đệ quy cn xác định gì?
C hai la chn đều đúng
Cho biết kết qu ca đon chương trình sau:
long f5(int n)
{
if (2*n==2)
return 2;
else
return 2*n + f5(n-1);
}
int main()
{
long x = f5(3);
printf("%ld", x);
getch();
}
12
Tham kho: Tham kho Tài liu ng dn hc
Bài 1 Đánh giá thut toán, mc V, bn Text
F5(3) = 2*3 + F5(2) = 12
F5(2) = 2*2 + F5(1) = 6
F5(1) = 2
Cho đon sau, cho biết đon biu din
thut toán gì?
c 1: S = 1, i = 1;
c 2: Nếu i<n thì s = s*i, qua c 3;
Ngưc li qua c 4;
c 3: i = i + 1;
Quay li c 2;
c 4: Xut S ra màn hình
Tính (n-1)!
Độ phc tp thut toán đưc đánh giá loi
nào?
Cho biết kết xut ca đon chương trình sau:
16
long F(int n)
Tham kho: Tham kho Tài liu ng dn hc
{
Bài 1 Đánh g thut toán, mc V, bn Text
if ((2*n+1) ==1)
F(3) = 2*3+1 + f(2) = 16
return 1;
F(2) = 2*2 + 1 + F(1) = 9
else
F(1) = 2*1 + 1 + f(0) = 4
return (2*n+1)+F(n-1);
F(0) = 1
}
void main()
{
long x=F(3);
printf("%ld", x);
}
Cho biết kết qu sau khi thc hin đon chương
trình sau:
int main()
{
int a[20], n,i,k;
k = a[0];
for(i=0; i<n; i++)
if (a[i] > k)
k = a[i];
}
k giá tr ln nht
Cho biết kết qu ca đon chương trình sau:
14
long f3(int n)
{
Tham kho: Tham kho Tài liu ng dn hc
Bài 1 Đánh giá thut toán, mc V, bn Text
if (n==1)
F(3) = 3*3 + F3(2)
return 1;
F3(2) = 2*2 + F3(1)
F3(1) = 1
else
return n*n + f3(n-1);
}
int main()
{
long x = f3(3);
printf("%ld", x);
getch();
}
Để tính biu thc s = ½ + ¼ + + 1/(2n) vi
n>=1 ta chn hàm
Cho biết kết qu ca đon chương trình sau:
20
Tham kho: Tham kho Tài liu ng dn hc
Bài 1 Đánh giá thut toán, mc V, bn Text
F(a,5) = a[4] + F(a,4)
F(a,4) = a[3] + F(a,3)
F(a,3) = a[2] + F(a,2)
F(a,2) = a[1] + F(a,1)
F(a,1) = a[0]
int F(int a[], int n)
{
if (n==1)
return a[0];
else
return a[n-1] + F(a,n-1);
}
int main()
{
int a[] = {2, 3, 4, 5, 6};
printf("%d",F(a,5));
getch();
}
Mt chương trình cài đặt trên máy tính đưc xác
định bi thành phn o
Cu trúc d liu
C hai thành phn
Đây định nghĩa ca độ phc nào? “Được tính
tng s chi phí v mt không gian (b nh)
cn thiết s dng cho thut toán
Không gian
C hai la chn đều sai
Thi gian
Cho mng a N (N>=2) phn t, x mt biến,
xét đon sau cho biết đon biu din
thut toán gì?
c 1: Khi gán i = 0, s = 0, qua c 2;
c 2: Nếu a[i] == x thì
s++; qua c 3
c 3: i = i + 1;
Nếu i == n: hết mng. Dng, in s ra màn hình
Ngưc li: Lp li c 2
Đếm s phn t trong mng đầu tiên trong
mng
Đếm s phn t giá tr bng x trong mng
Tìm kiếm tuyến tính phn t mang giá tr x trong
mng
Để tính biu thc s = xn vi n>=0 ta chn hàm
long F(int x, int n)
{
if (n==1)
return 1;
else
return x*F(x,n-1);
}
Cho thut toán sau:
int LinenearSearch( int M[], int N, int X)
{
int k = 0;
while (M[k] !=X && k<N)
k++;
if (k<N) return k;
return -1;
}
S phép gán: Gmax = 1 S phép so sánh: Smax =
2N + 1
S phép gán: Gmax = 1 S phép so nh: Smax
= N + 2
S phép gán: Gmax = 2 S phép so nh: Smax
= 2N + 2
S phép gán: Gmax = 2 S phép so sánh: Smax
= N + 2
Cho dãy sau: 42, 23, 74, 11, 65, 58. Dùng
11, 23, 42, 58, 65, 74
phương pháp sp xếp chèn trc tiếp (Insertion
Sort) để sp xếp tăng dn, sau 5 ln lp kết qu
ca dãy thế nào?
Các phương pháp tìm kiếm
Tìm kiếm tuyến tính nh pn
Cho đon t sau:
c 1: Khi đầu tìm kiếm trên tt c các phn
t ca dãy
(left = 0 right = n - 1)
c 2: Tính middle = (left + right)/2. So sánh
a[middle] vi x. 3 kh năng:
a[middle] = x thì thông báo Tìm thy => Dng
a[middle] > x thì right = middle - 1
a[middle] < x thì left = middle + 1
c 3:
Nếu left <= right quay li c 2 để tìm kiếm
tiếp
Ngưc li thông báo không tìm thy dng
thut toán
t thut toán tìm kiếm nh phân
Cho dãy sau: 42, 23, 74, 11, 65, 58. Dùng
phương pháp sp xếp đổi ch trc tiếp
(Interchange Sort) để sp xếp tăng dn, sau 4
ln lp kết qu ca dãy thế o?
11, 23, 42, 58, 74, 65
Gi s cn sp xếp mng M N phn t sau
theo phưuơng pháp sp xếp chèn trc tiếp:
11 16 12 75 51 54 5 73 36 52 98
Cn thc hin bao nhiêu ln chèn các phn t
vào dãy con đã th t tăng dn đứng đầu dãy
M để sp xếp mng tăng dn:
10
Cho thut toán tìm nh phân không đệ quy sau:
int NrecBinarySearch( int M[], int N, int X)
{
int First = 0;
int Last = N -1;
S phép gán: Gmin = 3 S phép so sánh: Smin
= 2
while ( First <= Last)
{
int Mid = (First + Last)/2;
if ( X == M[Mid]) return Mid;
if ( X < M[Mid]) Last = Mid - 1;
else First = Mid + 1;
}
return -1;
}
Cho dãy sau: 42, 23, 74, 11, 65, 58. Dùng
phương pháp sp xếp đổi ch trc tiếp
(Interchange Sort) để sp xếp tăng dn, sau 3
ln lp kết qu ca dãy thế o?
11, 23, 42, 74, 65, 58
Đon i đặt hàm tìm kiếm nh phân phn t
0 n-1
x trên dãy sp xếp tăng dn:
int BinarySearch( int a[ ], int n, int x )
{
int left = ……….., right = .................... ;
int middle;
do
{
middle = (left+right)/2;
if (x == a[middle]) break;
else if (x<a[middle]) right = middle - 1;
else left = middle + 1;
} while ( left <= right );
if ( left <= right ) return middle;
else return -1;//ko tìm thy phn t x
}
Cho biết đây ý ng ca thut toán nào:
Xut phát t dãy đầu a0, a1, …, ai, t các phn
Ý ng ca thut toán sp xếp InterchangeSort
t sau đó t ai+1 đến an xem phn t nào
nh hơn ai không thì hoán đổi v trí => Sau mi
ln luôn đưc dãy a0, a1, …, ai đã đưc sp th
t
Cho mng a gm các phn t giá tr như sau:
3126
S ln hoán v 2 phn t khác nhau khi áp dng
thut toán đổi ch trc tiếp (Bubble Sort) để sp
xếp mng gim dn là:
4
Cho mng a gm các phn t giá tr như sau:
3126
S ln hoán v 2 phn t khác nhau khi áp dng
thut toán đổi ch trc tiếp (Interchange Sort) để
sp xếp mng tăng dn là:
2
Cho hàm tìm kiếm tuyến tính trong mng 1 chiu
n phn 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);
}
Hàm tr v v trí phn t đầu tiên giá tr bng
x, ngưc li tr v -1
Đon t này thuc thut toán nào:
c 1: i = 0
c 2: tính các giá tr j = i + 1
c 3: Trong khi j<n thc hin
- nếu a[j] < a[i] thì hoán đổi a[i] vi a[j]
- j = j + 1;
Sp xếp chèn trc tiếp
Sp xếp đổi ch trc tiếp
Tìm kiếm tuyến tính
c 4: i = i +1
nếu i<n-1 thì lp li c 2, ngưc li thì dng
Cho dãy sau: 42, 23, 74, 11, 65, 58. Dùng
phương pháp sp xếp chèn trc tiếp (Insertion
Sort) để sp xếp tăng dn, sau 2 ln lp kết qu
ca dãy thế nào?
23, 42, 74, 11, 65, 58
Cho dãy sau: 42, 23, 74, 11, 65, 58. Dùng
phương pháp sp xếp phân hoch (Quick Sort),
đim cht a[middle] ban đầu là:
a[middle] = 74
Hàm t sp xếp ni bt (Bubble Sort) trên
mng M N phn t:
1.
void BubbleSort(int M[ ], int N)
2.
{
3.
int i,j,tg;
4.
for( i = 0 ; i < N-1 ; i++ )
5.........................................
6.
if ( M[j] < M[j-1] )
7.
{
8.tg = M[j];
9.M[ j] = M[j-1];
10.M[ j-1] = tg;
11.}
12.}
Lnh nào sau đây s đưc đưa vào dòng s [5]
ca đon trên
for( j = N-1; j>i; j--)
Cho dãy sau: 42, 23, 74, 11, 65, 58. Dùng
phương pháp sp xếp ni bt (Bubble Sort) để
sp xếp tăng dn, sau 4 ln lp kết qu ca dãy
thế nào?
11, 23, 42, 58, 65, 74
Cho đon chương trình:
void QuickSort( int a[ ], int L , int R )
{
a[(L+R)/2]
int i,j,x;
x= ......... ;
i = L; j = R;
do
{
while ( a[i] < x ) i++;
while ( a[j] > x ) j--;
if ( i <= j )
{
Hoanvi (a[i], a[j]);
i++; j--;
}
} while(i<j);
if (L<j) QuickSort(a,L,j);
if (i<R) QuickSort(a,i,R);
}
Cho dãy sau: 23, 78, 45, 8, 32, 56. Dùng phương
pháp sp xếp chn trc tiếp (Selection Sort) để
sp xếp tăng dn, sau 2 ln lp thì kết qu ca
dãy thế nào?
8, 23, 45, 78, 32, 56
Cho thut toán sp xếp Bubble Sort như sau:
- void Swap( int &X, int &Y)
void BubbleSort( int M[], int N)
{
int Temp = X;
{
X=Y;
for( int i = 0; i< N-1; i++)
for( int j = N-1; j>I; j--)
Y = Temp;
return ;
}
if( M[j] <M[j-1]) Swap( M[j], M[j-1]);
- void Swap( floatX, float Y)
return ;
{
}
int Temp = X;
X=Y;
Chn câu đúng nht cho hàm Swap:
Y = Temp;
return ;
}
Cho dãy sau: 42, 23, 74, 11, 65, 58. Dùng
phương pháp sp xếp chn trc tiếp (Selection
Sort) để sp xếp gim dn, sau ln lp th kết
qu ca dãy thế nào?
Cho mng a gm các phn t giá tr như sau:
3126
S ln hoán v 2 phn t khác nhau khi áp dng
thut toán ni bt để sp xếp mng gim dn là:
2
4
5
Các c thc hin tìm kiếm nh phân phn t x
trên dy sp xếp tăng dn đưc t như sau:
c 1: Khi đầu tìm kiếm trên tt c các phn
t ca dãy c left = ..................... right =
………………
c 2: Tính middle = (left + right)/2. So sánh
a[middle] vi x. 3 kh năng:
- a[middle] = x => Tìm thy => Dng
- a[middle] > x => tiếp tc tìm x trong dãy con
mi vi right = middle - 1 (tìm trong na đầu)
- a[middle] < x => tiếp tc tìm x trong dãy con
mi vi left = middle + 1 (tìm trong na cui)
c 3:
- Nếu left <= right => dãy còn phn t, tiếp tc
quay li c 2 để tìm kiếm tiếp
- Ngưc li => Dãy hin hành hết phn t
dng thut toán
Giá tr cn đin vào du .................... bao nhiêu
để thut toán thc hin đúng
0 n-1
Cho thut toán sau:
int LinearSearch( float M[], int N, float X)
{
int k = 0;
M[N] = X;
while (M[k] !=X)//n+1
k++;
S phép gán: Gmax = 2 S phép so nh: Smax
= N + 2
if (k<N) return k;
return -1;
}
Chn câu đúng nht trong trường hp xu nht
khi không tìm thy phn t nào g tr bng X:
Cho dãy sau: 42, 23, 74, 11, 65, 58. Dùng
phương pháp sp xếp chèn trc tiếp (Insertion
Sort) để sp xếp tăng dn, sau 3 ln lp kết qu
ca dãy thế nào?
11, 23, 42, 74, 65, 58
Đon i đây t thut toán gì: B1: k = 1
B2: if M[k] == X and k !=n
B2.1: k++
B2.2: Lp li c 2
B3: if (k<N) thông báo tìm thy ti v trí th k
B4: else thông báo không tìm thy
B5: Kết tc
Tìm kiếm tuyến tính phn t X trong mng
Tìm phn t nh nht ca mng M gm N phn
t
Cho dãy 10, 5, 7, 3, 9, 2, 15, 1. Dùng thut toán
sp xếp tăng dn bng QuickSort, cho biết ln
duyt th nht giá tr ca x, L R gì?
L=0; R=7; x=3;
Đối vi thut toán sp xếp chn trc tiếp cho dãy
phn t sau (10 phn t):
16 60 2 25 15 45 5 30 33 20
Cn thc hin bao nhiêu la chn phn t nh
nht để sp xếp mng M th t tăng dn
10
9
7
Cho mng a gm các phn t giá tr như sau:
1356
S ln hoán v 2 phn t khác nhau khi áp dng
thut toán ni bt để sp xếp mng gim dn là:
6
Cho dãy sau: 42, 23, 74, 11, 65, 58. Dùng
phương pháp sp xếp ni bt (Bubble Sort) để
sp xếp gim dn, sau ln lp th ba kết qu
74, 65, 58, 42, 23, 11
ca dãy thế o?
Cho mng a gm các phn t giá tr như sau:
3126
S ln hoán v 2 phn t khác nhau khi áp dng
thut toán đổi ch trc tiếp (Bubble Sort) để sp
xếp mng gim dn là:
4`
Cho mng a gm các phn t giá tr như sau:
3126
S ln hoán v 2 phn t khác nhau khi áp dng
thut toán đổi ch trc tiếp (Interchange Sort) để
sp xếp mng tăng dn là:
2
Cho dãy 10, 5, 7, 3, 9, 2, 15, 1. Cho biết kết qu
sau ln duyt th nht ca thut toán sp xếp
tăng dn bng QuickSort
1, 2, 3,7,9, 5, 15, 10
Cho dãy sau: 42, 23, 74, 11, 65, 58. Dùng
phương pháp sp xếp ni bt (Bubble Sort) để
sp xếp tăng dn, sau 1 ln lp kết qu ca dãy
thế nào?
11, 42, 23, 74, 58, 65
Cho dãy sau: 23, 78, 45, 8, 32, 56. Dùng phương
pháp sp xếp chn trc tiếp (Selection Sort) để
sp xếp tăng dn, sau 5 ln lp thì kết qu ca
dãy thế nào?
8, 23, 32, 45, 56, 78
Cho dãy sau: 23, 78, 45, 8, 32, 56. Dùng phương
pháp sp xếp chn trc tiếp (Selection Sort) để
sp xếp tăng dn, sau 3 ln lp thì kết qu ca
dãy thế nào?
8, 23, 32, 78, 45, 56
Các c thc hin tìm kiếm nh phân phn t x
trên dy sp xếp tăng dn đưc t như sau:
c 1: Khi đầu tìm kiếm trên tt c các phn
t ca dãy <=> left = 0 right = n-1
c 2: Tính middle = (left + right)/2. So sánh
a[middle] vi x. 3 kh năng:
- a[middle] = x => Tìm thy => Dng
- a[middle] > x => tiếp tc tìm x trong dãy con
mi vi right = middle - 1 (tìm trong na đầu)
left = middle + 1
- a[middle] < x => tiếp tc tìm x trong dãy con
mi vi ................................ (tìm trong na cui)
c 3:
- Nếu left <= right => dãy còn phn t, tiếp tc
quay li c 2 để tìm kiếm tiếp
- Ngưc li => Dãy hin hành hết phn t
dng thut toán
Giá tr cn đin vào du .................... bao nhiêu
để thut toán thc hin đúng
Cho mng a gm các phn t giá tr như sau:
74326
S ln hn v 2 phn t khác nhau khi áp dng
thut toán chn trc tiếp để sp xếp mng tăng
dn là:
3
4
Các trường hp thc hin hy phn t khi danh
sách liên kết đơn gm:
Hy phn t đầu danh sách, hy phn t đứng
sau phn t q hy phn t giá tr xác định
k
Các trường hp chèn thêm mt phn t mi vào
danh sách liên kết đơn gm:
- Chèn thêm vào đầu danh sách, vào cui danh
sách vào sau mt phn t q đã biết
Trong mt nút ca danh sách liên kết đơn, thành
phn infor thành phn gì?
Để lưu tr đa ch ca nút kế tiếp hoc giá tr
NULL nếu không liên kết đến phn t nào
Danh sách đưc cài đặt bng cách nào:
C hai đáp án đều đúng
Định nghĩa cu trúc d liu ca danh sách liên
kết đơn đưc t như sau:
struct Node{
int Key;
Node *next;
}OneNode;
Trong đó, khai báo Node *next; dùng để t
Vùng liên kết qun địa ch phn t kế tiếp
Đon để to ra nút mi thành phn x
trong danh sách liên kết đơn vi mi nút gm hai
thành phn (infor, next) sau:
next
Node* get_node( Data x ){
Node *p;
p = (Node*)malloc(sizeof(Node));
if ( p == NULL )
{
printf(“Ko du bo nho”);
exit(1);
}
p -> infor = x;
p -> ….. = NULL;
return p;
}
Đin phn còn thiếu o ch …………..
Đon khi to danh sách rng sau:
void init( List &Q ){
Q.Head = ....... ;
Q.Tail = NULL;
}
Phn còn thiếu đin vào du ..........
Null
Để sp xếp các phn t ca danh sách liên kết
đơn s dng phương án nào?
Mi nút trong danh sách đơn gm my phn:
Đon cài đặt chèn thêm mt phn t mi vào
đầu ca danh sách liên kết đơn:
void insertFirst ( LIST &Q, Node *new_element ){
if ( Q.Head == NULL ) //nếu danh ch rng
{
Q.Head = new_element;
Q.Tail = Q.Head;
}
else//danh sách không rng
{
[1] ……………
[2] ……………
}
}
Đon còn thiếu để đặt vào dòn s [1] [2].
void RemoveHead ( LIST &Q ){
Q.Head = Q.Head -> next;
Node *p;
if (Q.Head != NULL)
{
p = Q.Head;
…[1]
free(p);
if ( Q.Head == NULL )
Q.Tail = NULL;
}
}
Dòng lnh cn thiết đưc đặt vào ch trng ti
dòng s [1]:
Đon cài đặt hy b mt phn t đứng sau
mt phn t q trong danh sách liên kết đơn:
void RemoveAfter ( LIST &Q , Node *q ){
Node *p;
if (q != NULL)
{
p = q -> next;
if (p != NULL)
{
q -> next = p -> next;
Để tiến hành tìm kiếm mt phn t trong danh
sách liên kết đơn s dng phương pháp tìm
kiếm gì?
Tìm kiếm tuyến tính
Đon để to ra nút mi thành phn x
trong danh sách liên kết đơn vi mi nút gm hai
thành phn (infor, next) sau:
Node* get_node( Data x ){
Node *p;
p = (Node*)malloc(sizeof(Node));
if ( p == NULL )
{
printf(“Ko du bo nho”);
exit(1);
}
p -> infor = ……;
X
if (p == Q.Tail)
{
q->next = NULL;
Q.Tail = q;
}
[1] ………………….
free(p);
}
}
else RemoveHead(Q);
}
Dòng lnh cn thiết đưc đặt vào ch trng ti
dòng s [1]:
Các thành phn ca danh ch đơn gm:
Đ lưu tr đa ch ca t kê tiêp hoc giá tr NULL
u
không
ln
t
đên
phn
t
nào
D liu (data) liên kết (link)
Trong mt nút ca danh sách liên kết đơn, thành
phn infor thành phn gì?
p -> next = NULL;
return p;
}
Đin phn còn thiếu o ch …………..
Th tc t thut toán sp xếp chn trc tiếp:
for ( k =0; k<n-1; k++)
void SapXepChonTrucTiep( T M[], int N)
{
int K = 0, posmin;
int Temp;
................................................
{
T Min = M[K];
Posmin = K;
for( int pos = K+1; pos<N; pos++)
if( Min > M[pos])
{
Min = M[pos];
Posmin = pos;
}
Temp = M[k];
M[k] = m[posmin];
M[posmin] = Temp;
}
return;
}
Đon cn thiết để đặt o
dòng ........................ để chương trình sp xếp đúng
Các loi danh sách ln kết gm:
sách
liên
t
ng
Đon cài đặt chèn thêm mt phn t mi vào
đầu ca danh sách liên kết đơn:
void insertFirst ( LIST &Q, Node *new_element ){
Q.Tail = Q.Head;
if ( Q.Head == NULL ) //nếu danh ch rng
{
[1] ……..
[2] ……..
}
else//danh sách không rng
{
new_element -> next = Q.Head;
Q.Head = new_element;
}
}
Đon còn thiếu để đặt vào dòn s [1] [2].
Danh sách liên kết ?
tp hp các phn t liên kết c ni liên tiếp
vi nhau, kiu truy cp tun t. Mi phn t
mt nút.
Đon i đặt hy phn t đầu ca danh ch
Q.Head -> next = NULL;
liên kết đơn:
void RemoveHead ( LIST &Q ){
Q.Head -> next = Q.Head;
Node *p;
Q.Head = Q.Head -> next;
if (Q.Head != NULL)
{
p = Q.Head;
[1] …………………..
free(p);
if ( Q.Head == NULL )
Q.Tail = NULL;
}
}
Dòng lnh cn thiết đưc đặt vào ch trng ti
dòng s [1]:
Cho đon chương trình:
QuickSort(a,L,j);
void QuickSort( int a[ ], int L , int R )
QuickSort(a,i,R);
{
QuickSort(a,i,R);
int i,j,x;
QuickSort(a,L,j);
x= a[(L+R)/2];
QuickSort(a,j,L);
i = L; j = R;
QuickSort(a,i,R);
do
{
while ( a[i] < x ) i++;
while ( a[j] > x ) j--;
if ( i <= j )
{
Hoanvi (a[i], a[j]);
i++; j--;
}
} while(i<j);
if (L<j) ….
if (i<R) ….
}
Đin giá tr nào vào đon …. cho đúng
Cho đon chương trình:
i=0; j=R;
void QuickSort( int a[ ], int L , int R )
{
i=L; j=n-1;
int i,j,x;
i=L; j=R;
x= a[(L+R)/2];
i =…;
j = ...;
do
{
while ( a[i] < x ) i++;
| 1/32

Preview text:

Để tính biểu thức s = ½ + 2/3 + ¾ + … + n/(n+1) float F(int n) ta chọn hàm { if (n==1) return 1.0/2; else
return (float)n/(n+1) + F(n-1); }
Thuật toán được biểu diễn bằng cách nào
Tấất cả các cách được liệt kê
Cho biết kết quả của đoạn chương trình sau: 6 int F(int a[], int n)
Tham khảo Tài liệu hướng dẫn học Bài 1 – Đánh {
giá thuật toán, mục V, bản Text if (n==1) return a[0]; F(a,5) = 1 + F(a,4) = 6 else F(a,4) = 1 + F(a,3) = 5 return 1 + F(a,n-1); F(a,3) = 1 + F(a,2) = 4 } F(a,2) = 1 + F(a,1) = 3 int main() F(a,1) = a[0] = 2 { int a[] = {2, 3, 4, 5, 6}; printf("%d",F(a,5)); getch(); }
Cho mảng a có N (N>=2) phần từ, x là một biến,
Đếm số phần tử có giá trị bằng x trong mảng
xét đoạn mã sau cho biết đoạn mã biểu diễn thuật toán gì?
Bước 1: Khởi gán i = 0, s = 0, qua bước 2;
Bước 2: Nếu a[i] == x thì s++; qua bước 3 Bước 3: i = i + 1;
Nếu i == n: hết mảng. Dừng, in s ra màn hình
Ngược lại: Lặp lại bước 2
Đây là định nghĩa của độ phức nào? “được tính Thời gian
là tổng số chi phí về mặt tổng thời gian cần thiết
để hoàn thành thuật toán, được đánh giá dựa
vào số lượng các thao tác được sử dụng trong
thuật toán dựa trên bộ dữ liệu đầu vào
Để xác định giải thuật đệ quy cần xác định gì?
Cả hai lựa chọn đều đúng
Cho biết kết quả của đoạn chương trình sau: 12 long f5(int n)
Tham khảo: Tham khảo Tài liệu hướng dẫn học
Bài 1 – Đánh giá thuật toán, mục V, bản Text { F5(3) = 2*3 + F5(2) = 12 if (2*n==2) F5(2) = 2*2 + F5(1) = 6 return 2; F5(1) = 2 else return 2*n + f5(n-1); } int main() { long x = f5(3); printf("%ld", x); getch(); }
Cho đoạn mã sau, cho biết đoạn mã biểu diễn Tính (n-1)! thuật toán gì? Bước 1: S = 1, i = 1;
Bước 2: Nếu iNgược lại qua bước 4; Bước 3: i = i + 1; Quay lại bước 2;
Bước 4: Xuất S ra màn hình
Độ phức tạp thuật toán được đánh giá có loại
Cả hai loại được liệt kê nào?
Cho biết kết xuất của đoạn chương trình sau: 16 long F(int n)
Tham khảo: Tham khảo Tài liệu hướng dẫn học Bài {
1 – Đánh giá thuật toán, mục V, bản Text F(3) if = 2*3+1 + f(2) = 16 ((2*n+1) ==1) F(2) return = 2*2 + 1 + F(1) = 9 1; F(1) = 2*1 + 1 + f(0) = 4 else F(0) = 1 return (2*n+1)+F(n-1); } void main() { long x=F(3); printf("%ld", x); }
Cho biết kết quả sau khi thực hiện đoạn chương k có giá trị lớn nhất trình sau: int main() { int a[20], n,i,k; k = a[0]; for(i=0; iif (a[i] > k) k = a[i]; }
Cho biết kết quả của đoạn chương trình sau: 14 long f3(int n)
Tham khảo: Tham khảo Tài liệu hướng dẫn học
Bài 1 – Đánh giá thuật toán, mục V, bản Text { F(3) if = 3*3 + F3(2) (n==1) F3(2) = 2*2 + F3(1) return 1; F3(1) = 1 else return n*n + f3(n-1); } int main() { long x = f3(3); printf("%ld", x); getch(); }
Để tính biểu thức s = ½ + ¼ + … + 1/(2n) với float F( int n ) n>=1 ta chọn hàm { if (n ==1 ) return 1.0/2; else return 1.0/(2*n) + F1(n-1); }
Cho biết kết quả của đoạn chương trình sau: 20 int F(int a[], int n)
Tham khảo: Tham khảo Tài liệu hướng dẫn học
Bài 1 – Đánh giá thuật toán, mục V, bản Text { F(a,5) = a[4] + F(a,4) if (n==1) F(a,4) = a[3] + F(a,3) return a[0]; F(a,3) = a[2] + F(a,2) else F(a,2) = a[1] + F(a,1) return a[n-1] + F(a,n-1); F(a,1) = a[0] } int main() { int a[] = {2, 3, 4, 5, 6}; printf("%d",F(a,5)); getch(); }
Một chương trình cài đặt trên máy tính được xác Thuật toán
định bởi thành phần nào Cấu trúc dữ liệu Cả hai thành phần
Đây là định nghĩa của độ phức nào? “Được tính Không gian
là tổng số chi phí về mặt không gian (bộ nhớ)
Cả hai lựa chọn đều sai
cần thiết sử dụng cho thuật toán” Thời gian
Cho mảng a có N (N>=2) phần từ, x là một biến,
Đếm số phần tử trong mảng đầu tiên trong
xét đoạn mã sau cho biết đoạn mã biểu diễn mảng thuật toán gì?
Đếm số phần tử có giá trị bằng x trong mảng
Bước 1: Khởi gán i = 0, s = 0, qua bước 2;
Tìm kiếm tuyến tính phần tử mang giá trị x trong
Bước 2: Nếu a[i] == x thì mảng s++; qua bước 3 Bước 3: i = i + 1;
Nếu i == n: hết mảng. Dừng, in s ra màn hình
Ngược lại: Lặp lại bước 2
Để tính biểu thức s = xn với n>=0 ta chọn hàm long F(int x, int n) { if (n==1) return 1; else return x*F(x,n-1); } Cho thuật toán sau:
Số phép gán: Gmax = 1 Số phép so sánh: Smax = 2N + 1
int LinenearSearch( int M[], int N, int X)
Số phép gán: Gmax = 1 Số phép so sánh: Smax { = N + 2 int k = 0;
Số phép gán: Gmax = 2 Số phép so sánh: Smax
while (M[k] !=X && k= 2N + 2 k++;
Số phép gán: Gmax = 2 Số phép so sánh: Smax if (k= N + 2 return -1; }
Cho dãy sau: 42, 23, 74, 11, 65, 58. Dùng 11, 23, 42, 58, 65, 74
phương pháp sắp xếp chèn trực tiếp (Insertion
Sort) để sắp xếp tăng dần, sau 5 lần lặp kết quả của dãy là thế nào?
Các phương pháp tìm kiếm là
Tìm kiếm tuyến tính và nhị phân Cho đoạn mô tả sau:
Mô tả thuật toán tìm kiếm nhị phân
Bước 1: Khởi đầu tìm kiếm trên tất cả các phần tử của dãy (left = 0 và right = n - 1)
Bước 2: Tính middle = (left + right)/2. So sánh
a[middle] với x. Có 3 khả năng:
a[middle] = x thì thông báo Tìm thấy => Dừng
a[middle] > x thì right = middle - 1
a[middle] < x thì left = middle + 1 Bước 3:
Nếu left <= right và quay lại bước 2 để tìm kiếm tiếp
Ngược lại thông báo không tìm thấy và dừng thuật toán
Cho dãy sau: 42, 23, 74, 11, 65, 58. Dùng 11, 23, 42, 58, 74, 65
phương pháp sắp xếp đổi chỗ trực tiếp
(Interchange Sort) để sắp xếp tăng dần, sau 4
lần lặp kết quả của dãy là thế nào?
Giả sử cần sắp xếp mảng M có N phần tử sau 10
theo phưuơ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 bao nhiêu lần chèn các phần tử
vào dãy con đã có thứ tự tăng dần đứng đầu dãy
M để sắp xếp mảng tăng dần:
Cho thuật toán tìm nhị phân không đệ quy sau:
Số phép gán: Gmin = 3 Số phép so sánh: Smin = 2
int NrecBinarySearch( int M[], int N, int X) { int First = 0; int Last = N -1; while ( First <= Last) { int Mid = (First + Last)/2; if ( X == M[Mid]) return Mid;
if ( X < M[Mid]) Last = Mid - 1; else First = Mid + 1; } return -1; }
Cho dãy sau: 42, 23, 74, 11, 65, 58. Dùng 11, 23, 42, 74, 65, 58
phương pháp sắp xếp đổi chỗ trực tiếp
(Interchange Sort) để sắp xếp tăng dần, sau 3
lần lặp kết quả của dãy là thế nào?
Đoạn mã cài đặt hàm tìm kiếm nhị phân phần tử 0 và n-1
x trên dãy sắp xếp tăng dần:
int BinarySearch( int a[ ], int n, int x ) {
int left = ……….., right = .................... ; int middle; do { middle = (left+right)/2; if (x == a[middle]) break; else if (x else left = middle + 1; } while ( left <= right );
if ( left <= right ) return middle;
else return -1;//ko tìm thấy phần tử x }
Cho biết đây là ý tưởng của thuật toán nào:
Ý tưởng của thuật toán sắp xếp InterchangeSort
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ự
Cho mảng a gồm các phẩn tử có giá trị như sau: 4 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 (Bubble Sort) để sắp
xếp mảng giảm dần là:
Cho mảng a gồm các phẩn tử có giá trị như sau: 2 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à:
Cho hàm tìm kiếm tuyến tính trong mảng 1 chiều
Hàm trả về vị trí phần tử đầu tiên có giá trị bằng có n phần tử
x, ngược lại trả về -1
int Search( int a[], int n, int x) { int i;
for(i=0; iif(a[i] == x) return i; return(-1); }
Đoạn mô tả này thuộc thuật toán nào:
Sắp xếp chèn trực tiếp Bước 1: i = 0
Sắp xếp đổi chỗ trực tiếp
Bước 2: tính các giá trị j = i + 1 Tìm kiếm tuyến tính
Bước 3: Trong khi j- 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 iCho dãy sau: 42, 23, 74, 11, 65, 58. Dùng 23, 42, 74, 11, 65, 58
phương pháp sắp xếp chèn trực tiếp (Insertion
Sort) để sắp xếp tăng dần, sau 2 lần lặp kết quả của dãy là thế nào?
Cho dãy sau: 42, 23, 74, 11, 65, 58. Dùng a[middle] = 74
phương pháp sắp xếp phân hoạch (Quick Sort),
điểm chốt a[middle] ban đầu là:
Hàm mô tả sắp xếp nổi bọt (Bubble Sort) trên for( j = N-1; j>i; j--) mảng M có N phần tử:
1. void BubbleSort(int M[ ], int N) 2. { 3. int i,j,tg;
4. for( i = 0 ; i < N-1 ; i++ )
5......................................... 6. if ( M[j] < M[j-1] ) 7. { 8.tg = M[j]; 9.M[ j] = M[j-1]; 10.M[ j-1] = tg; 11.} 12.}
Lệnh nào sau đây sẽ được đưa vào dòng số [5] của đoạn mã trên
Cho dãy sau: 42, 23, 74, 11, 65, 58. Dùng 11, 23, 42, 58, 65, 74
phương pháp sắp xếp nổi bọt (Bubble Sort) để
sắp xếp tăng dần, sau 4 lần lặp kết quả của dãy là thế nào? Cho đoạn chương trình: a[(L+R)/2]
void QuickSort( int a[ ], int L , int R ) { int i,j,x; x= ......... ; i = L; j = R; do { while ( a[i] < x ) i++; while ( a[j] > x ) j--; if ( i <= j ) { Hoanvi (a[i], a[j]); i++; j--; } } while(iif (Lif (i}
Cho dãy sau: 23, 78, 45, 8, 32, 56. Dùng phương 8, 23, 45, 78, 32, 56
pháp sắp xếp chọn trực tiếp (Selection Sort) để
sắp xếp tăng dần, sau 2 lần lặp thì kết quả của dãy là thế nào?
Cho thuật toán sắp xếp Bubble Sort như sau:
- void Swap( int &X, int &Y) {
void BubbleSort( int M[], int N) int Temp = X; { X=Y;
for( int i = 0; i< N-1; i++) Y = Temp; return ;
for( int j = N-1; j>I; j--) }
if( M[j] - void Swap( floatX, float Y) return ; { int Temp = X; } X=Y;
Chọn câu đúng nhất cho hàm Swap: Y = Temp; return ; }
Cho dãy sau: 42, 23, 74, 11, 65, 58. Dùng 74, 65, 58, 42, 23, 11
phương pháp sắp xếp chọn trực tiếp (Selection
Sort) để sắp xếp giảm dần, sau lần lặp thứ tư kết
quả của dãy là thế nào?
Cho mảng a gồm các phẩn tử có giá trị như sau: 2 3126 4
Số lần hoán vị 2 phần tử khác nhau khi áp dụng 5
thuật toán nổi bọt để sắp xếp mảng giảm dần là:
Các bước thực hiện tìm kiếm nhị phân phần tử x 0 và n-1
trên dẫy sắp xếp tăng dần được mô tả như sau:
Bước 1: Khởi đầu tìm kiếm trên tất cả các phần
tử của dãy c left = ..................... và right = ………………
Bước 2: Tính middle = (left + right)/2. So sánh
a[middle] với x. Có 3 khả năng:
- a[middle] = x => Tìm thấy => Dừng
- a[middle] > x => tiếp tục tìm x trong dãy con
mới với right = middle - 1 (tìm trong nửa đầu)
- a[middle] < x => tiếp tục tìm x trong dãy con
mới với left = middle + 1 (tìm trong nửa cuối) Bước 3:
- Nếu left <= right => dãy còn phần tử, tiếp tục
quay lại bước 2 để tìm kiếm tiếp
- Ngược lại => Dãy hiện hành hết phần tử và dừng thuật toán
Giá trị cần điền vào dấu .................... là bao nhiêu
để thuật toán thực hiện đúng Cho thuật toán sau:
Số phép gán: Gmax = 2 Số phép so sánh: Smax = N + 2
int LinearSearch( float M[], int N, float X) { int k = 0; M[N] = X; while (M[k] !=X)//n+1 k++; if (k return -1; }
Chọn câu đúng nhất trong trường hợp xấu nhất
khi không tìm thấy phần tử nào có giá trị bằng X:
Cho dãy sau: 42, 23, 74, 11, 65, 58. Dùng 11, 23, 42, 74, 65, 58
phương pháp sắp xếp chèn trực tiếp (Insertion
Sort) để sắp xếp tăng dần, sau 3 lần lặp kết quả của dãy là thế nào?
Đoạn mã dưới đây mô tả thuật toán gì: B1: k = 1
Tìm kiếm tuyến tính phần tử X trong mảng B2: if M[k] == X and k !=n
Tìm phần tử nhỏ nhất của mảng M gồm N phần B2.1: k++ tử B2.2: Lặp lại bước 2
B3: if (kB4: else thông báo không tìm thấy B5: Kết thúc
Cho dãy 10, 5, 7, 3, 9, 2, 15, 1. Dùng thuật toán L=0; R=7; x=3;
sắp xếp tăng dần bằng QuickSort, cho biết ở lần
duyệt thứ nhất giá trị của x, L và R là gì?
Đối với thuật toán sắp xếp chọn trực tiếp cho dãy 10
phần tử sau (10 phần tử): 9 16 60 2 25 15 45 5 30 33 20 7
Cần thực hiện bao nhiêu lựa chọn phần tử nhỏ
nhất để sắp xếp mảng M có thứ tự tăng dần
Cho mảng a gồm các phẩn tử có giá trị như sau: 6 1356
Số lần hoán vị 2 phần tử khác nhau khi áp dụng
thuật toán nổi bọt để sắp xếp mảng giảm dần là:
Cho dãy sau: 42, 23, 74, 11, 65, 58. Dùng 74, 65, 58, 42, 23, 11
phương pháp sắp xếp nổi bọt (Bubble Sort) để
sắp xếp giảm dần, sau lần lặp thứ ba kết quả của dãy là thế nào?
Cho mảng a gồm các phẩn tử có giá trị như sau: 4` 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 (Bubble Sort) để sắp
xếp mảng giảm dần là:
Cho mảng a gồm các phẩn tử có giá trị như sau: 2 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à:
Cho dãy 10, 5, 7, 3, 9, 2, 15, 1. Cho biết kết quả 1, 2, 3,7,9, 5, 15, 10
sau lần duyệt thứ nhất của thuật toán sắp xếp tăng dần bằng QuickSort
Cho dãy sau: 42, 23, 74, 11, 65, 58. Dùng 11, 42, 23, 74, 58, 65
phương pháp sắp xếp nổi bọt (Bubble Sort) để
sắp xếp tăng dần, sau 1 lần lặp kết quả của dãy là thế nào?
Cho dãy sau: 23, 78, 45, 8, 32, 56. Dùng phương 8, 23, 32, 45, 56, 78
pháp sắp xếp chọn trực tiếp (Selection Sort) để
sắp xếp tăng dần, sau 5 lần lặp thì kết quả của dãy là thế nào?
Cho dãy sau: 23, 78, 45, 8, 32, 56. Dùng phương 8, 23, 32, 78, 45, 56
pháp sắp xếp chọn trực tiếp (Selection Sort) để
sắp xếp tăng dần, sau 3 lần lặp thì kết quả của dãy là thế nào?
Các bước thực hiện tìm kiếm nhị phân phần tử x left = middle + 1
trên dẫy sắp xếp tăng dần được mô tả như sau:
Bước 1: Khởi đầu tìm kiếm trên tất cả các phần
tử của dãy <=> left = 0 và right = n-1
Bước 2: Tính middle = (left + right)/2. So sánh
a[middle] với x. Có 3 khả năng:
- a[middle] = x => Tìm thấy => Dừng
- a[middle] > x => tiếp tục tìm x trong dãy con
mới với right = middle - 1 (tìm trong nửa đầu)
- a[middle] < x => tiếp tục tìm x trong dãy con
mới với ................................ (tìm trong nửa cuối) Bước 3:
- Nếu left <= right => dãy còn phần tử, tiếp tục
quay lại bước 2 để tìm kiếm tiếp
- Ngược lại => Dãy hiện hành hết phần tử và dừng thuật toán
Giá trị cần điền vào dấu .................... là bao nhiêu
để thuật toán thực hiện đúng
Cho mảng a gồm các phẩn tử có giá trị như sau: 3 74326 4
Số lần hoán vị 2 phần tử khác nhau khi áp dụng
thuật toán chọn trực tiếp để sắp xếp mảng tăng dần là:
Các trường hợp thực hiện hủy phần tử khỏi danh Hủy phần tử đầu danh sách, hủy phần tử đứng
sách liên kết đơn gồm:
sau phần tử q và hủy phần tử có giá trị xác định k
Các trường hợp chèn thêm một phần tử mới vào
- Chèn thêm vào đầu danh sách, vào cuối danh
danh sách liên kết đơn gồm:
sách và vào sau một phần tử q đã biết
Trong một nút của danh sách liên kết đơn, thành
Để lưu trữ địa chỉ của nút kế tiếp hoặc giá trị
phần infor là thành phần gì?
NULL nếu không liên kết đến phần tử nào
Danh sách được cài đặt bằng cách nào:
Cả hai đáp án đều đúng
Định nghĩa cấu trúc dữ liệu của danh sách liên
Vùng liên kết quản lý địa chỉ phần tử kế tiếp
kết đơn được mô tả như sau: struct Node{ int Key; Node *next; }OneNode;
Trong đó, khai báo Node *next; dùng để mô tả
Đoạn mã để tạo ra nút mới có thành phần là x next
trong danh sách liên kết đơn với mỗi nút gồm hai
thành phần (infor, next) sau: Node* get_node( Data x ){ Node *p;
p = (Node*)malloc(sizeof(Node)); if ( p == NULL ) { printf(“Ko du bo nho”); exit(1); } p -> infor = x; p -> ….. = NULL; return p; }
Điền phần còn thiếu vào chỗ …………..
Đoạn mã khởi tạo danh sách rỗng sau: Null void init( List &Q ){ Q.Head = ....... ; Q.Tail = NULL; }
Phần còn thiếu điền vào dấu .......... là gì
Để sắp xếp các phần tử của danh sách liên kết
Thay đổi mối liên kết của phần tử
đơn sử dụng phương án nào?
c. Cả hai phương án trên đều đúng
Mỗi nút trong danh sách đơn gồm có mấy phần: 2
Đoạn mã cài đặt chèn thêm một phần tử mới vào - new_element -> next = Q.Head;
đầu của danh sách liên kết đơn:
Q.Head -> next = new_element;
- new_element -> next = Q.Head;
void insertFirst ( LIST &Q, Node *new_element ){ Q.Head = new_element;
if ( Q.Head == NULL ) //nếu danh sách rỗng - Q.Head = new_element; {
new_element -> next = Q.Head; 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].
void RemoveHead ( LIST &Q ){ Q.Head = Q.Head -> next; Node *p; if (Q.Head != NULL) { p = Q.Head; …[1] … free(p); if ( Q.Head == NULL ) Q.Tail = NULL; } }
Dòng lệnh cần thiết được đặt vào chỗ trống tại dòng số [1]:
Đoạn mã cài đặt hủy bỏ một phần tử đứng sau
một phần tử q trong danh sách liên kết đơn: q -> next = p -> next;
void RemoveAfter ( LIST &Q , Node *q ){ Node *p; if (q != NULL) { p = q -> next; if (p != NULL) { if (p == Q.Tail) { q->next = NULL; Q.Tail = q; } [1] …………………. free(p); } } else RemoveHead(Q); }
Dòng lệnh cần thiết được đặt vào chỗ trống tại dòng số [1]:
Để tiến hành tìm kiếm một phần tử trong danh Tìm kiếm tuyến tính
sách liên kết đơn sử dụng phương pháp tìm kiếm gì?
Trong một nút của danh sách liên kết đơn, thành
Để lưu trữ địa chỉ của nút k ê ấ tiêấp hoặc giá trị NULL
phần infor là thành phần gì?
nêấu không liên kêất đ êấn phấần tử nào
Các thành phần của danh sách đơn gồm:
Dữ liệu (data) và liên kết (link)
Đoạn mã để tạo ra nút mới có thành phần là x X
trong danh sách liên kết đơn với mỗi nút gồm hai
thành phần (infor, next) sau: Node* get_node( Data x ){ Node *p;
p = (Node*)malloc(sizeof(Node)); if ( p == NULL ) { printf(“Ko du bo nho”); exit(1); } p -> infor = ……; p -> next = NULL; return p; }
Điền phần còn thiếu vào chỗ …………..
Thủ tục mô tả thuật toán sắp xếp chọn trực tiếp:
for ( k =0; kvoid SapXepChonTrucTiep( T M[], int N) { int K = 0, posmin; int Temp;
................................................ { T Min = M[K]; Posmin = K; for( int pos = K+1; pos if( Min > M[pos]) { Min = M[pos]; Posmin = pos; } Temp = M[k]; M[k] = m[posmin]; M[posmin] = Temp; } return; }
Đoạn mã cần thiết để đặt vào
dòng ........................ để chương trình sắp xếp đúng
Các loại danh sách liên kết gồm:
Danh sách liên kêất đơn, danh sách liên kêất kép và danh sách liên kêất vòng
Đ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: Q.Head = new_element;
void insertFirst ( LIST &Q, Node *new_element ){ Q.Tail = Q.Head;
if ( Q.Head == NULL ) //nếu danh sách rỗng { [1] …….. [2] …….. }
else//danh sách không rỗng {
new_element -> next = Q.Head; Q.Head = new_element; } }
Đoạn mã còn thiếu để đặt vào dòn số [1] và [2].
Danh sách liên kết là gì?
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.
Đoạn mã cài đặt hủy phần tử đầu của danh sách Q.Head -> next = NULL; liên kết đơn: Q.Head -> next = Q.Head;
void RemoveHead ( LIST &Q ){ Node *p; Q.Head = Q.Head -> next; if (Q.Head != NULL) { p = Q.Head; [1] ………………….. free(p); if ( Q.Head == NULL ) Q.Tail = NULL; } }
Dòng lệnh cần thiết được đặt vào chỗ trống tại dòng số [1]: Cho đoạn chương trình: QuickSort(a,L,j); QuickSort(a,i,R);
void QuickSort( int a[ ], int L , int R ) { QuickSort(a,i,R); int i,j,x; QuickSort(a,L,j); x= a[(L+R)/2]; QuickSort(a,j,L); i = L; j = R; QuickSort(a,i,R); do { while ( a[i] < x ) i++; while ( a[j] > x ) j--; if ( i <= j ) { Hoanvi (a[i], a[j]); i++; j--; } } while(i if (L if (i }
Điền giá trị nào vào đoạn …. cho đúng Cho đoạn chương trình: i=0; j=R;
void QuickSort( int a[ ], int L , int R ) i=L; j=n-1; { int i,j,x; i=L; j=R; x= a[(L+R)/2]; i =…; j = ...; do { while ( a[i] < x ) i++;