Trường Cao đẳng Công ngh Thông tin Tp. H Chí Minh
Bài tp thc hành Môn Cu trúc D
liu- Khoa Công ngh Thông tin
Bài 1: Cho danh sách liên kết đơn gồm các phn t là s nguyên, viết
chương trình thc
hin các yêu cu sau:
1. Thêm mt phn t vào đầu danh sách.
void ThemDau(LIST &l, NODE *p);
2. Xut danh sách ra màn hình.
void Xuat(LIST l);
3. Lit kê các phn t mang giá tr chn.
void XuatChan(LIST &l)
{
NODE *p=l.pHead;
while(p)
{
Nếu p->Key chn
in giá tr p->Key
p=p->pNext;
}
}
4. Tìm phn t có giá tr ln nht.
NODE *TimMax(LIST l)
{
NODE *pmax=l.pHead;
for(NODE *p=l.pHead->pNext; p; p=p->pNext)
Nếu giá tr ca pmax < giá tr ca p thì
gán li pmax = p;
return max;
}
5. Đếm s lượng s nguyên t trong danh sách.
bool LaSNT(int x); //Kim tra x có phi là s nguyên t
int DemSNT(LIST l);//Đếm s ng s nguyên t trong danh sách
6. Thêm phn t có giá tr nguyên X vào trước phn t có giá tr
chẵn đầu tiên trong danh
sách. Nếu không có phn t chn thì thêm vào đầu danh sách.
NODE *TimChanDau(LIST l);//Tìm chẵn đầu trong danh sách
void ThemkTruocp(LIST &l, NODE *p, NODE *k);//Thêm k vào
trước p
void ThemXTruocChanDau(LIST &l, int X)//Thêm X vào trước chn
đầu
{ NODE *k=TaoNode(X);//Phn t cn thêm
NODE *p=TimChanDau(l);//Node có giá tr chẵn đầu tiên
if(p==NULL)
ThemDau(l, k);
else
ThemkTruocp(l, p, k);
}
Ví d cách s dng hàm ThemXTruocChanDau()
void main()
{
LIST l;
int x;
Nhap(l);
cout<<“Danh sach vua nhap: \n”;
Xuat(l);
cout<<“\nNhap gia tri can them vao truoc chan dau: “;
cin>>x;
ThemXTruocChanDau(l, x);
cout<<“\nDanh sach sau khi them vao truoc chan dau:\n”;
7. Thêm phn t có giá tr nguyên X vào sau phn t có giá tr l
cui cùng trong danh sách.
Nếu không có phn t l thì thêm vào cui danh sách.
NODE *TimLeCuoi(LIST l);//Tìm l cui cùng trong danh sách
void ThemCuoi(LIST &l, NODE *p);//Thêm p vào cui danh sách
void ThemkSaup(LIST &l, NODE *p, NODE *k);//Thêm k vào sau p
void ThemXSauLeCuoi(LIST &l, int X);//Thêm X vào sau l cui
8. Xóa phn t nh nht trong danh sách (Nếu trùng cha phn
t nh nhất đầu tiên).
NODE *TimMin(LIST l);//Tìm node có giá tr nh nht
void XoaDau(LIST &l);//Xóa node đu ca danh sách
void XoaCuoi(LIST &l);//a node cui ca danh sách
void Xoap(LIST &l, NODE *p);//Xóa node p
void XoaMin(LIST &l);//Xóa phn t nh nht trong danh sách
9. Nhp vào phn t X, xóa phn t đứng sau và đứng trước phn
t X trong danh sách.
NODE *TimX(LIST l, int X);//Tìm X
void XoakTruocp(LIST &l, NODE *p, NODE *k);//Xóa k trước p
void XoakSaup(LIST &l, NODE *p, NODE *q);//Xóa k sau p