You are on page 1of 2

CẤU TRÚC DỮ LIỆU & GIẢI THUẬT

BÀI TẬP ÔN – PHẦN 1


DANH SÁCH LIÊN KẾT + STACK
---oOo---
Baøi 1:
Cho moät danh saùch lieân keát ñôn nhö sau:

a. p1 = pHead->pNext;
b. p3 = p1->pNext->pNext;
c. p3->data = p1->data;
d. pCurr = p1;
while (pCurr != NULL) {
pCurr->data *= 5;
pCurr = pCurr->pNext;
}
ÖÙng vôùi moãi tröôøng hôïp [a] – [d], haõy veõ laïi danh saùch, theå hieän roõ söï thay ñoåi.

Baøi 2:
Cho moät ngaên xeáp s vaø 1 ñoaïn chöông trình nhö sau:
struct STACK s;
InitStack(s, 10);
int x, y = 5;
Push(s, 8);
Push(s, y);
Push(s, 9);
Pop(s, x);
Push(s, 18);
Pop(s, x);
Push(s, 22);
while (IsEmpty(s) == 0)
{
Pop(s, x);
printf(“%d “, x);
}
Haõy cho bieát keát quaû in ra maøn hình khi thi haønh ñoaïn chöông trình treân laø gì ?

Baøi 3: Cho moät danh saùch lieân keát ñôn. Cho bieát ñòa chæ P, Q taïi caùc vò trí nhö hình 1.

Haõy vieát caùc leänh caàn thieát ñeå chuyeån danh saùch sang daïng bieåu dieãn ôû hình 2.

© Nguyen Tri Tuan – DH.KHTN Tp.HCM 1/2


Baøi 4:
Cho moät danh saùch lieân keát ñôn vôùi phaàn töû ñaàu laø pHead. Haõy cho bieát taùc duïng cuûa haøm sau
neáu lôøi goïi haøm laø fn(pHead).
int fn ( NODE *p )
{
if (p!=NULL) return (1 + fn(p->Next));
else return 0;
}

Baøi 5:
Cho moät danh saùch lieân keát ñôn coù phaàn töû ñaàu laø pHead, moãi phaàn töû cuûa DSLK bao goàm:
Key : khoùa löu tröõ, kieåu int;
pNext : con troû ñeán phaàn töû keá tieáp trong DSLK;
a. Haõy vieát moät haøm khoâng ñeä qui ñeám soá phaàn töû trong DSLK.
b. Haõy vieát moät haøm ñeä qui ñeám soá phaàn töû trong DSLK.

Bài 6:
Hãy viết hàm “Xóa phần tử đầu tiên trong một danh sách liên kết đơn”. Hàm có dạng như sau:

NODE *List_1st_Delete(NODE *pHead);

với pHead là con trỏ đầu danh sách.

Yêu cầu xử lý được cho các trường hợp:


- pHead == NULL
- Danh sách chỉ có 1 phần tử
- Danh sách có nhiều phần tử
- Nếu pHead == NULL hoặc danh sách chỉ có 1 phần tử thì sau khi xóa, hàm trả về giá trị
NULL
- Nếu danh sách có nhiều phần tử thì sau khi xóa, hàm trả về con trỏ của phần tử kế sau
pHead

Bài 7:
Cho 1 danh sách liên kết đơn trong đó, mỗi phần tử chứa 1 số nguyên.
Hãy viết hàm xóa phần tử có giá trị lớn nhất trong danh sách.
Lưu ý:
- Chỉ được phép duyệt danh sách 1 lần
- Nếu có nhiều phần tử lớn nhất giống nhau, xóa phần tử đầu tiên

- Hết -

© Nguyen Tri Tuan – DH.KHTN Tp.HCM 2/2