Tải bản đầy đủ (.pdf) (5 trang)

CÁC THAO TÁC TRÊN DANH SÁCH LIÊN KẾT ĐƠN C++ pps

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (138.04 KB, 5 trang )


CÁC THAO TÁC TRÊN DANH
SÁCH LIÊN KẾT ĐƠN C++


Cài đặt:

NODE *TimChanCuoi(LIST l)
{
NODE *p=l.pHead, *pChanCuoi=NULL;
while(p)
{
if(p->Key%2==0)
pChanCuoi=p;
p=p->pNext;
}
return pChanCuoi;
}


1.5. Tìm phần tử có giá trị max (min) thỏa điều kiện cho trước
(Giả sử tìm phần tử có giá trị chẵn lớn nhất trên danh sách số nguyên)
(SV tự vẽ hình minh họa)












- Đầu vào: DSLK đơn l
- Kết quả: Trả về con trỏ chứa giá trị chẵn lớn nhất (hoặc NULL: Nếu
không có
chẵn)
- Giải thuật:
B1: pMaxChan là phần tử chẵn đầu tiên của danh sách
Nếu không có chẵn trả về NULL. Kết thúc
B2: p trỏ vào sau pMaxChan
B3: Nếu p trỏ đến NULL thì trả về pMaxChan. Kết thúc
Ngược lại sang B4
B4: Nếu giá trị của p là chẵn và lớn hơn giá trị pMaxChan thì
Gán pMaxChan = p
B5: p trỏ đến phần tử kế tiếp, quay lại B3
- Cài đặt:


NODE *TimMaxChan(LIST l)
{
NODE *pMaxChan=TimChanDau(l), *p;
if(pMaxChan==NULL)
return NULL;
p=pMaxChan->pNext;
while(p)
{
if(p->Key%2==0&&p->Key>pMaxChan->Key)
pMaxChan=p;
p=p->pNext;

}
return pMaxChan;
}


1.6. Tìm phần tử đứng trước phần tử p cho trước
(SV tự vẽ hình minh họa)











- Đầu vào: DSLK đơn l, phần tử p
- Kết quả: Trả về con trỏ đứng trước phần tử p (hoặc NULL: Nếu không
có)
- Giải thuật:
*Trường hợp 1: Nếu p trỏ vào đầu danh sách thì trả về NULL
*Trường hợp 2: Ngược lại trường hợp 1
B1: pTruoc trỏ và đầu danh sách
B2: Trong khi pTruoc trỏ đến phần tử kế chưa bằng p thì
Dời pTruoc sang phần tử kế tiếp
B3: Trả về pTruoc. Kết thúc
- Cài đặt:


NODE *TimNodeTruocp(LIST l, NODE *p)
{
if(p==l.pHead)
return NULL;
NODE *pTruoc=l.pHead;
while(pTruoc->pNext!=p)
pTruoc=pTruoc->pNext;
return pTruoc;
}

2. Duyệt
2.1. Xuất danh sách
(SV tự vẽ hình minh họa)











- Đầu vào: DSLK đơn l
- Kết quả: In giá trị các phần tử của danh sách ra màn hình
- Giải thuật:
B1: p trỏ và đầu danh sách
B2: Nếu p = NULL thì kết thúc
Ngược lại In giá trị p

B3: p trỏ đến phần tử kế tiếp, quay lại B2
- Cài đặt: (Giả sử l là danh sách số nguyên)

void Xuat(LIST l)
{
NODE *p=l.pHead;
while(p)
{
printf(“%d->”, p->Key);
p=p->pNext;
}
}


2.2. Xuất danh sách thỏa điều kiện cho trước
(SV tự vẽ hình minh họa)











- Đầu vào: DSLK đơn l
- Kết quả: In giá trị các phần tử của danh sách thỏa điều kiện ra màn
hình

- Giải thuật:
B1: p trỏ vào đầu danh sách
B2: Nếu p = NULL thì kết thúc
B3: Nếu giá trị của p thỏa điều kiện thì in giá trị p
B4: p trỏ đến phần tử kế tiếp, quay lại B2
- Cài đặt: (Giả sử xuất các giá trị có giá trị chẵn trong danh sách số
nguyên)

void XuatChan(LIST l)
{
NODE *p=l.pHead;
while(p)
{
if(p->Key%2==0)
printf(“%d->”, p->Key);
p=p->pNext;
}
}

×