CÁC THAO TÁC TRÊN DANH SÁCH LIÊN KẾT ĐƠN C++ 5.. Thêm phần tử vào đầu danh sách SV tự vẽ hình minh họa ..... Thêm phần tử vào cuối danh sách SV tự vẽ hình minh họa ..... Thêm phần t
Trang 1CÁC THAO TÁC TRÊN DANH SÁCH LIÊN KẾT ĐƠN C++
5 Thêm
5.1 Thêm phần tử vào đầu danh sách
(SV tự vẽ hình minh họa)
- Đầu vào: DSLK đơn l, phần tử p cần thêm
- Kết quả: DSLK đơn l sau khi thêm
- Giải thuật:
*Trường hợp 1: Nếu l rỗng thì
Con trỏ đầu và cuối của danh sách = p
*Trường hợp 2: (l khác rỗng)
B1: p trỏ kế tiếp vào đầu danh sách
B2: Gán con trỏ đầu = p
- Cài đặt:
void ThemDau(LIST &l, NODE *p)
{
if(l.pHead==NULL)
l.pHead=l.pTail=p;
else
{
p->pNext = l.pHead;
Trang 2}
}
5.2 Thêm phần tử vào cuối danh sách
(SV tự vẽ hình minh họa)
- Đầu vào: DSLK đơn l, phần tử p cần thêm
- Kết quả: DSLK đơn l sau khi thêm
- Giải thuật:
*Trường hợp 1: Nếu l rỗng thì
Con trỏ đầu và cuối của danh sách = p
*Trường hợp 2: (l khác rỗng)
B1: Con trỏ cuối của danh sách trỏ kế tiếp vào p
B2: Gán con trỏ cuối = p
- Cài đặt:
void ThemCuoi(LIST &l, NODE *p)
{
if(l.pHead==NULL)
l.pHead=l.pTail=p;
else
{
l.pTail->pNext =p;
l.pTail = p;
Trang 3}
}
5.3 Thêm phần tử vào sau một phần tử cho trước
(SV tự vẽ hình minh họa)
- Đầu vào: DSLK đơn l, phần tử k cần thêm và phần tử p
- Kết quả: DSLK đơn l sau khi thêm k sau p
- Giải thuật:
*Trường hợp 1: Nếu p là con trỏ cuối của danh sách thì
Thêm k vào cuối danh sách l
*Trường hợp 2: (p khác con trỏ cuối)
B1: pSau là con trỏ đứng sau p
B2: Cho p trỏ tới k
B3: Cho k trỏ tới pSau
- Cài đặt:
void ThemkSaup(LIST &l, NODE *p, NODE *k)
{
if(p==l.pTail)
ThemCuoi(l, k);
else
{
Trang 4p->pNext = k;
k->pNext = pSau;
}
}
5.4 Thêm phần tử k vào trước một phần tử p cho trước
(SV tự vẽ hình minh họa)
- Đầu vào: DSLK đơn l, phần tử k cần thêm và phần tử p
- Kết quả: DSLK đơn l sau khi thêm k trước p
- Giải thuật:
B1: Thêm k vào sau p
B2: Hoán vị giá trị của p và k
- Cài đặt:
void ThemkTruocp(LIST &l, NODE *p, NODE *k)
{
ThemkSaup(l, p, k);
int tam = p->Key;
p->Key = k->Key;
k->Key = tam;
}
Trang 56 Xóa
6.1 Xóa phần tử đầu
(SV tự vẽ hình minh họa)
- Đầu vào: DSLK đơn l
- Kết quả: DSLK đơn l sau khi xóa phần tử đầu
- Giải thuật:
*Trường hợp 1: Nếu l rỗng thì kết thúc
*Trường hợp 2: (l khác rỗng)
B1: pXoa là con trỏ đầu của danh sách
B2: Cho con trỏ đầu trỏ vào phần tử kế tiếp
B3: Xóa pXoa
B4: Nếu con trỏ đầu = NULL thì gán con trỏ cuối = NULL