!
"#!$%"&$ '()**+,)*-).
"/01!23 45
6/0784984:6"
;<=>?/@0,0-A
BC DCE DFG
H!IJKLJC
1 a. Phương php biu din danh sch liên kt kp
- Danh sch liên kt kp là một cấu trúc dữ liệu bao gồm 1 tập
hợp cc phần tử, trong đó mỗi phần tử là một nút, trong mỗi
nút có chứa hai liên kt tới nút liền trước và liền sau nút đó.
- Cấu trúc 1 nút của danh sch liên kt kp
Lptr INFO Rptr
Trong đó:
+ INFO: là trường chứa thông tin (dữ liệu) của nút
+ Lptr: là con trỏ chứa địa chỉ của nút liền trước (bên
tri) nút này trong danh sch.
+ Rptr: là con trỏ chứa địa chỉ của nút liền sau (bên
phải) nút này trong danh sch.
- Danh sch liên kt kp luôn được quản lý bởi hai con trỏ trỏ:
một vào nút cực tri của danh sch và một trỏ vào nút cực
phải của danh sch.
- Một danh sch liên kt kp được biu din tổng qut như
sau:
1,0
b. ,Thêm một nút có thông tin là X vào trước nút M đang trỏ,
nu không tồn tại nút M thì chèn vào đầu cực tri
Trang: 1/5
L R
void themtruocM(L, R, X, M)
{
// Tạo nút mới
new<= avail;
new->info=X;
if(L==NULL);
{L=R=new; new->rptr=new->lprt=NULL;}
else
{
// Tìm nút M
P=L;
while(p!=M && p!=NULL) p=p->rptr;
if(P!=NULL) // tìm thấy nút M
If(M==L) // M trùng với nút cực trái
{new->rptr = M; M->lptr=new;
new->lptr=NULL; L=new; }
else
{ p=M->lptr;
New->rptr=M; M->lptr=new;
p->rptr=new; new->lptr=p;}
else // Không tìm thấy nút M
{new->rptr = M; M->lptr=new;
new->lptr=NULL; L=new; }
}
}
1,0
, Xóa nút thứ k trong danh sch.
void xoa_nut_thu_k(L, R, M)
{
// Tìm nút thứ k
if(L== NULL) count<<”Danh sach rong”;
else
{ dem=1; p=L;
while(dem<k && p!=NULL) p=p->link;
if(p!=NULL)
{
switch
{
case L==R: {L=R=NULL; break;}
case L==p: {L=L->rptr; L-
>lptr=NULL;break;}
case R==p: {R=R->lptr; R-
>rptr=NULL;break;}
default: {q=p->lptr; M=p->rptr;
q->rptr=M; M->lptr=q;
break;}
}
free(p);
}
else cout<<”Khong ton tai nút thu ”<<k;
} }
1,0
Trang: 2/5
2
a. Tính (AB)
+
- Gọi X={A, B}
- Do AB C nên
+
F
X
={A, B, C}
- Do B D nên
+
F
X
={A, B, C, D}
- Do CD E nên
+
F
X
={A, B, C, D, E}
- Do CE GH nên
+
F
X
={A, B, C, D, E, G, H}
1,0
b. Tính (BG)
+
- Gọi X={B, G}
- Do G A nên
+
F
X
={A, B, G}
- Do AB C nên
+
F
X
={A, B, C, G}
- Do B D nên
+
F
X
={A, B, C, D, G}
- Do CD E nên
+
F
X
={A, B, C, D, E, G}
- Do CE GH nên
+
F
X
={A, B, C, D, E, G, H}
1,0
'
#include"conio.h"
#include"iostream.h"
#include"string.h"
#include"stdio.h"
class diem
{
private:
char *mahs;
char *hoten;
float t,l,h;
public:
diem()
{
mahs=new char[10];hoten=new char[40];
t=0;l=0;h=0;
}
~diem()
{
delete mahs;
delete hoten;
}
void nhap()
{
cout<<"\nMa hoc sinh:";gets(mahs);
cout<<"\nHo va ten:"; gets(hoten);
fflush(stdin);
cout<<"diem toan:";cin>>t;
cout<<"diem ly:";cin>>l;
cout<<"diem hoa:";cin>>h;
}
0,25
0,25
Trang: 3/5
float tongdiem()
{
return t+l+h;
}
void hienthi()
{
cout<<"\n"<<mahs<<" "<<hoten<<"
"<<t<<" "<<l<<" "<<h<<"
"<<tongdiem();
}
};
0,1
0,15
class BD
{
private:
diem ds[50];
int n;
public:
void nhapBD();
void hienthiBD();
void tongdiem_Max();
};
0,25
void BD::nhapBD()
{
cout<<"\nNhap so hoc sinh (<50)";cin>>n;
for(int i=0;i<n;i++)
{
cout<<"\nNhap thong tin cua hoc sinh
thu "<<i<<":\n";
ds[i].nhap();
}
}
void BD::hienthiBD()
{
cout<<"\nMahs Ho va ten Toan
Ly Hoa Tongdiem";
for(int i=0;i<n;i++)
ds[i].hienthi();
}
0,25
0,15
Trang: 4/5
void BD::tongdiem_Max()
{
float tg=0.0;
int max,i;
for(i=0;i<n;i++)
if (ds[i].tongdiem()>tg)
{tg=ds[i].tongdiem(); max=i;}
cout<<"\nDanh sach thi sinh thu khoa";
cout<<"\nMahs Ho va ten Toan
Ly Hoa Tongdiem";
for(i=max;i<n;i++)
if (ds[i].tongdiem()==tg)
ds[i].hienthi();
}
0,5
void main()
{
BD ds;
ds.nhapBD();
ds.hienthiBD();
ds.tongdiem_Max();
getch();
}
0,1
E(.
H!ILM
1
2
…
E(.
NEE(O.
………, ngày ………. thng ……. năm ………
Trang: 5/5
. hienthi()
{
cout < < "
" < < mahs < < " " < < hoten < < "
" < < t < < " " < < l < < ". {L=L->rptr; L-
>lptr=NULL;break;}
case R==p: {R=R->lptr; R-
>rptr=NULL;break;}
default: {q=p->lptr; M=p->rptr;
q->rptr=M; M->lptr=q;
break;}
}
free(p);