You are on page 1of 96

TRNG I HC S PHM K THUT HNG YN KHOA CNG NGH THNG TIN

BI TP THC HNH

HC PHN: CU TRC D LIU V GII THUT

Trnh o to : i hc H o to : Chnh quy

Hng Yn nm 2012

Bi tp thc hnh CTDL & GT MC LC

Trang 2

BI THC HNH 1. BI THC HNH 2. BI THC HNH 3+4. BI THC HNH 5. BI THC HNH 6. BI THC HNH 7. BI THC HNH 8. BI THC HNH 9. BI THC HNH 10.

KIU D LIU C CU TRC ................................................................................ 3 PHC TP TNH TON .................................................................................. 16 DANH SCH NI N......................................................................................... 22 NGN XP - STACK ............................................................................................. 42 HNG I - QUEUE ........................................................................................... 53 DANH SCH LIN KT KP ................................................................................. 59 DANH SCH LIN KT VNG ............................................................................. 70 CY NH PHN .................................................................................................. 81 Kim tra thc hnh .......................................................................................... 96

Bi tp thc hnh CTDL & GT

Trang 3

BI THC HNH 1.
* Mc tiu

KIU D LIU C CU TRC

H thng li kin thc v kiu d liu mng, xu, tp, cu trc: Cch khai bo, cc thao tc trn, cch thc t chc b nh ca mng, xu, tp, cu trc * Yu cu: A. Bi tp mu Bi 1: Cho n s nguyn dng a0,a1,a2,...,an-1. a.Chn phn t x vo v tr k ca dy. b.Xa tt c cc s nguyn t trong dy. Gi : a.Khi to mt mng trung gian tmp c di l (a.Length+1) sau gn cc gi tr : tmp[i]=a[i] vi i t 0 ->k-1 (k-1 l v tr trc v tr cn chn) tmp[k]=gi tr cn chn tmp[i+1]=a[i] vi i t k->a.Length-1 Cui cng gn mng a=tmp. b.Thc hin duyt cc phn t trong mng kim tra xem phn t c phi l s nguyn t hay khng (s nguyn t l s ch chia ht cho 1 v chnh n) : + Nu l s nguyn t: Duyt mng t tri sang phi.T v tr s nguyn t tin hnh di cc phn t v pha trc cho n khi kt thc mng, sau gim kch thc mng +Ngc li, chuyn sang kim tra phn t k tip Li gin mu using System; class VD { static int[] a; static void Nhap() { int n; Console.Write("Nhap n="); n = int.Parse(Console.ReadLine()); a = new int[n];

Bi tp thc hnh CTDL & GT for (int i = 0; i < a.Length; ++i) { Console.Write("a[" + i + "]="); a[i] = int.Parse(Console.ReadLine()); } } static void Chen(int x, int k) { if (k >= 0 && k <= a.Length - 1) { int[] tmp = new int[a.Length + 1]; for (int i = 0; i < k; ++i) tmp[i] = a[i]; tmp[k] = x; for (int i = k; i < a.Length; ++i) tmp[i + 1] = a[i]; a = tmp; } else Console.WriteLine("Du lieu khong hop le"); } static bool ngto(int x) { bool ok = true; for (int i = 2; i < x - 1; ++i) if (x % i == 0) { ok = false; break; } return ok; } static void Xoa() { int n = a.Length; for (int i = 0; i < n; ) if (ngto(a[i]))

Trang 4

Bi tp thc hnh CTDL & GT { for (int j = i; j < a.Length - 1; ++j) a[j] = a[j + 1]; n = n - 1; } else ++i; int[] tmp = new int[n]; for (int i = 0; i < n; ++i) tmp[i] = a[i]; a = tmp; } static void Hien() { for (int i = 0; i < a.Length; ++i) Console.Write(a[i] + "\t"); Console.WriteLine(); } static void Main() { Nhap(); Chen(333, 1); Hien(); Xoa(); Hien(); Console.ReadKey(); } }

Trang 5

Bi 2: Cho mt danh sch lu tr thng tin v cc nhn vin trong mt cng ty, thng tin gm : - M nhn vin - H v tn - Nm sinh (s nguyn)

Bi tp thc hnh CTDL & GT - Phng ban - Lng c bn (s nguyn) - Thng (s nguyn) - Thc lnh (s nguyn, trong thc lnh = lng c bn + thng ) Hy thc hin cc yu cu sau: a.Tnh tng thc lnh thng ca tt c nhn vin trong cng ty. b.In danh sch nhng nhn vin c mc lng c bn thp nht. Gi :

Trang 6

lu tr thng tin ca tng nhn vin ta khai bo mt cu trc lu tr cc thng tin struct NhanVien { public string MaNV; public string Hoten; public int Namsinh; public string Phongban; public int LuongCB; public int Thuong; } class VD { static NhanVien[] DS; a.Thc hin duyt tng nhn vin : tnh thc lnh ca tng ngi sau cng cc thc lnh li vi nhau b.Trc tin ta tm mc lng c bn thp nht bng cch : + Gn mt gi tr min bng ln v cng : int min = int.MaxValue; +Duyt qua tng nhn vin nu nhn vin no c mc lng nh hn min th gn min bng mc lng Cui cng in ra thng tin ca cc nhn vin c mc lng bng min Li gin mu using System; struct NhanVien {

Bi tp thc hnh CTDL & GT public string MaNV; public string Hoten; public int Namsinh; public string Phongban; public int LuongCB; public int Thuong; } class VD { static NhanVien[] DS; static void Nhap() { int n; Console.Write("Nhap n="); n = int.Parse(Console.ReadLine()); DS = new NhanVien[n]; for (int i = 0; i < DS.Length; ++i) { Console.WriteLine("Nhap thong tin NV thu:" + i); Console.Write("Ma nhan vien:"); DS[i].MaNV = Console.ReadLine(); Console.Write("Ho ten:"); DS[i].Hoten = Console.ReadLine();

Trang 7

Console.Write("Nam sinh:"); DS[i].Namsinh = int.Parse(Console.ReadLine()); Console.Write("Phong ban:"); DS[i].Phongban = Console.ReadLine(); Console.Write("Luong co ban:"); DS[i].LuongCB = int.Parse(Console.ReadLine()); Console.Write("Thuong:"); DS[i].Thuong = int.Parse(Console.ReadLine()); } } static int ThucLinh(int i) { return DS[i].Thuong + DS[i].LuongCB; } static void HienMin()

Bi tp thc hnh CTDL & GT { int min = int.MaxValue; for (int i = 0; i < DS.Length; ++i) if (min > DS[i].LuongCB) min = DS[i].LuongCB; Console.WriteLine("Danh sach luong cb min"); for (int i = 0; i < DS.Length; ++i) if (DS[i].LuongCB == min)

Trang 8

Console.WriteLine(DS[i].MaNV + "\t" + DS[i].Hoten + "\t" + DS[i].Namsinh + "\t" + DS[i].Phongban + "\t" + DS[i].LuongCB + "\t" + DS[i].Thuong + "\t" + ThucLinh(i)); } static void TongLuongCTy() { int t = 0; for (int i = 0; i < DS.Length; ++i) t += ThucLinh(i); Console.WriteLine("Tong luong cty:" + t); } static void Main() { Nhap(); TongLuongCTy(); HienMin(); Console.ReadKey(); } } B. Bi tp t gii Bi 1: Cho n s nguyn dng a0,a1,a2,...,an-1. a.Chn phn t x vo v tr k ca dy. b.Xa tt c cc s nguyn t trong dy. c.Kim tra dy c tng dn hay khng ? d.Tm s nh nht chia ht cho tt c cc s ca dy.

Bi tp thc hnh CTDL & GT t cng nhau nu c s chung ln nht ca chng bng 1). f.Tm tn s xut hin ca cc s trong dy. Gi :

Trang 9

e.Tm cc cp s nguyn t cng nhau (hai s nguyn dng c gi l nguyn

a. Khi to mt mng trung gian tmp c di l (a.Length+1) sau gn cc gi tr : tmp[i]=a[i] vi i t 0 ->k-1 (k-1 la v tr trc v tr cn chn) tmp[k]=gi tr cn chn tmp[i+1]=a[i] vi i t k->a.Length-1 Cui cng gn mng a=tmp. b. Thc hin duyt cc phn t trong mng kim tra xem phn t c phi la s nguyn t hay khng (s nguyn t l s ch chia ht cho 1 v chnh n) : + Nu l s nguyn t: Duyt mng t tri sang phi. T v tr s nguyn t tin hnh di cc phn t v pha trc cho n khi kt thc mng,sau gim kch thc mng + Ngc li,chuyn sang kim tra phn t k tip c. Duyt qua cc phn t a[i] ca mng vi i t 0->n-2, ti mi phn t kim tra xem n c nh hn cc phn t a[j] k tip khng vi j=i+1->n-1 + Nu khng, thot khi vng lp tr ra gi tr False (khng tng dn) + Ngc li, kim tra phn t a[i] k tip d. u tin ta xy dng mt hm BCNN(int x,int y) tnh BCNN ca 2 s. Sau ta khi to gi tr int bc = 1 ri thc hin tnh BCNN ca bc vi tng phn t ca mng, kt qu thu c a vo bc e. Xy dng mt hm tm UCLN ca 2 s Thc hin duyt qua tng phn t a[i] ca mng vi i t 0->n-2, vi mi phn t ta tm UCLN ca phn t vi tng phn t a[j] k tip n vi j t i+1 -> n-1 . nu UCLN =1 ta in ra cp a[i],a[j] . f. Ta to 2 mng mi: mng b cha cc phn t khng trng nhau ca mng a, mng c cha tn s xut hin ca cc s tng ng mng b ( khi to cc phn t ca c =0) Khi to b[0]=a[0]. Duyt qua cc phn t ca mng a: +Nu a[i] = b[i] th c[i] =c[i]+1 +Nu a[i] !=b[i] th b[i+1]=a[i]

Bi tp thc hnh CTDL & GT Vit cc hm thc hin cc yu cu sau: a.Tnh tng tt c cc phn t ca ma trn. b.Tm gi tr dng nh nht ca ma trn. c.Tnh tng cc phn t nm trn ng cho ph.

Trang 10

Bi 2: Cho ma trn vung n dng v n ct; cc phn t l cc s nguyn (0 n < 100).

d.Kim tra xem cc phn t nm trn ung cho chnh c tng dn hay khng ? (theo chiu t gc trn bn tri xung gc di bn phi). Gi : a. Khi to 1 gi tr t=0.Sau duyt qua tng phn t ca ma trn , thc hin cng t vi tng phn t trong ma trn: b. Khi to gi tr min bng dng v cng int min = int.MaxValue; Thc hin duyt qua cc phn t ca ma trn,nu thy phn t nh hn min v ln hn 0 th gn vo min c.Ta nhn thy rng cc phn t a[i,j] thuc ng cho chnh ca ma trn cp n th c j=(n-1)-i vi i ,j chy t 0 ->n-1 tnh tng cc phn t ng cho ph ta duyt qua cc phn t a[i,j] ca ma trn nu phn t no tha mn j=(n-1)-i th ta thc hin cng cc phn t li d.Ta thy trong ma trn cp n th s phn t trn ng cho chnh la n. + u tin , ta thc hin vic khai bo mt mng mt chiu []tg c n phn t cha cc phn t a[i,j] trn ng cho chnh ca ma trn(vi i=j) theo chiu t gc bn tri pha trn n bn phi pha di + Duyt qua cc phn t tg[i] ca mng tg vi i t 0->n-2, ti mi phn t kim tra xem n c nh hn cc phn t tg[j] k tip khng vi j=i+1 ->n-1 *Nu khng ,thot khi vng lp tr ra gi tr False (khng tng dn) *Ngc li,kim tra phn t tg[i] k tip Bi 3: Cho ma trn vung n dng n ct; mi phn t ca ma trn l mt phn s (gi thit rng t s v mu s ca cc phn s ny l cc s nguyn). Hy thc hin cc yu cu sau: a.Tm phn s c gi tr nh nht nm trong khong.(0;1). b.m s lng phn s nm trong ma trn tam gic trn c gi tr nm trong khong (0,1)

Bi tp thc hnh CTDL & GT di. Gi :

Trang 11

c.Sp xp cc phn s trong ma trn tng dn t tri qua phi v t trn xung

lu tr thng tin ca tng phn t phn s ma trn ta khai bo mt trng lu tr cc thng tin ca mt phn s(t s v mu s) struct Phanso { public int Tu; public int Mau; } class VD { static Phanso[] DS; a.Khi to gi tr nh nht double min = 1 . +Thc hin duyt qua cc phn t ca ma trn.Ti mi phn t thc hin so snh gi tr ca t s chia cho mu s vi min ,nu nh hn min va ln hn 0 th gn min bng gi tr : +Hin ra phn t c gi tr t s chia mu s bng min .Dng mt bin m int d=0 m cc gi tr bng min,nu ra khi vng lp m d=0 ta kt lun khng c phn s cn tm b.Ta thy cc phn t nm trong ma trn tam gic trn th lun c v tr hng nh hn v tr ct (i<j) .T ta thc hin vic m cc phn t ca mng o vi tr DS[i,j] tha mn i<j v c gi tr T chia cho mu trong khong (0,1): c.Thc hin duyt cc phn t DS[i,j] ca mng vi i t 0->n-1 v j t 0->n-2, Vi mi phn t ta so snh vi tng phn t k tip n nu phn t k tip c gi tr nh hn th thc hin i ch 2 phn t vi nhau: Bi 4: Cho mt danh sch lu tr thng tin v cc nhn vin trong mt cng ty, thng tin gm : - M nhn vin - H v tn - Nm sinh (s nguyn) - Phng ban

Bi tp thc hnh CTDL & GT - Lng c bn (s nguyn) - Thng (s nguyn) - Thc lnh (s nguyn, trong thc lnh = lng c bn + thng ) Hy thc hin cc yu cu sau: a.Tnh tng thc lnh thng ca tt c nhn vin trong cng ty. b. In danh sch nhng nhn vin c mc lng c bn thp nht. c. m s lng nhn vin c mc thng >= 1200000.

Trang 12

d. In danh sch cc nhn vin tng dn theo phng ban, nu phng ban trng nhau th gim dn theo m nhn vin. e. Cp nht tng lng ca tt c cc nhn vin ln 5% Gi : lu tr thng tin ca tng nhn vin ta khai bo mt trng lu tr cc thng tin struct NhanVien { public string MaNV; public string Hoten; public int Namsinh; public string Phongban; public int LuongCB; public int Thuong; } class VD { static NhanVien[] DS;

a.Trc ht ta xy dng mt hm thuclinh(int x) tnh thc lnh ca mt nhn vin bt k. Sau ta duyt t u n cui danh sch nhn vin ri gi hm thuclinh(i) ra. Khi ta s c tng s thc lnh thng ca tt c cc nhn vin trong cng ty. b.u tin ta gn mt bin min=int.MaxValue(gi tr dng v cng).

Bi tp thc hnh CTDL & GT khng? -Nu tho mn min = DS[i].LuongCB -Ngc li,tip tc duyt cc nhn vin tip theo.

Trang 13

+Tip theo duyt qua tt c cc nhn vin kim tra xem min>DS[i].LuongCB hay

+Khi kt thc vng lp kim tra ta s tm c danh sch nhng ngi c mc lng c bn thp nht. +Tip tc c. +Khi to bin dem=0,duyt qua cc phn t ca danh sch. Ti mi phn t kim tra xem DS[i].Thuong >= 1200000 nu tho mn th dem++. d. Duyt qua tt c cc phn t trong mng. Ti mi phn t ta thc hin in ra cc thng tin ca nhn vin . Ring phn thng tin v lng th ta tng thm 5%na Bi 5:Vit chng trnh to tp tin vn bn c tn l BANGSO.INP c cu trc nh sau: -Dng u tin ghi hai s m v n (m, n l cc s nguyn dng nhp t bn phm) -Trong m dng tip theo mi dng ghi n s nguyn ngu nhin trong phm vi t 0 n 1000 (cc s cch nhau t nht mt du cch) Hy thc hin cc cng vic sau: a.Hy cho bit ch s cc dng c cha s nguyn t (gi thit cc dng trong tp tin vn bn c nh s t 0 n m-1). b.Xoay vng cc ct qua phi mt v tr (ct 0 s qua ct 1, ct 1 qua ct 2,... ct n-1 v ct 0). c.Sp xp cc phn t tng dn trn tng ct. Hy ghi cc kt qu trn vo file vn bn c tn l BANGSO.OUT. Bi 6: Cho mng vung n. Hy tm phn t ln nht trn mi ng cho song song vi ng cho chnh. Gi : Xy dng 2 hm tnh max ca ng cho thuc ma trn ng cho trn c phn t u tin thuc ct jv max ca ng cho thuc ma trn ng cho di c phn t u tin thuc hng i:

Bi tp thc hnh CTDL & GT *Vi ng cho thuc ma trn ng cho trn.Khi to

Trang 14

gi

tr

max=int.MinValue.Duyt qua cc phn t ca mng ti mi phn t a[i ,j] c j-i =a ch ct nu a[i ,j]>max gn max =a[i,j]. * Vi ng cho thuc ma trn ng cho di.Khi to gi tr

max=int.MinValue.Duyt qua cc phn t ca mng ti mi phn t a[i ,j] c i-j =a ch hng nu a[i ,j]>max gn max =a[i,j]. Ti hm Main() thc hin: +Duyt qua s ct ca ma trn ,ti mi ct gi hm tnh max cho trn ca ct va in ra +Duyt qua s hang ca ma trn ,ti mi hang gi hm tnh max cho di ca hng v in ra C. Bi tp lm thm Bi 1: Cho mng mt chiu gm n ta im (gi s honh v tung ca cc im l cc s nguyn). a.Hy tm mt im trong mng xa gc ta nht. b.Hy tm ta hai im gn nhau nht. c.Hy xc nh ta ca hnh ch nht nh nht bao ht c n im trn (ta gc trn bn tri v ta gc di bn phi ca hnh ch nht). V d n = 5 v ta 5 im l: (0,0); (0,3); (3,3); (4,1); (4,4). Th kt qu cu a l im (4,4), kt qu cu b l (3,3) v (4,4), kt qu cu c l (0,4); 4(,0). Bi 2: Vit chng trnh to mt tp tin vn bn c tn l DAYSO.INP c cu trc nh sau: -Dng u tin ghi n (n l s nguyn dng nhp t bn phm). -Trong cc dng tip theo ghi n s nguyn ngu nhin trong phm vi t 1 n 10000, mi dng 10 s (cc s cch nhau t nht mt du cch). Hy thc hin cc cng vic sau y: a.Tm gi tr ln nht ca cc s trong tp tin DAYSO.INP. b.m s lng s chn, s lng s l trong tp tin DAYSO.INP. c.Hy m s lng s nguyn t, s chnh phng, s hon ho, s Amstrong trong tp tin DAYSO.INP. Hy ghi kt qu ca cc cu a,b,c trn vo tp tin vn bn c tn l DAYSO.OUT.

Bi tp thc hnh CTDL & GT

Trang 15

Bi 3: Mt n v quan tm v dn s lp mt bn thng k s lng ngi sinh trong tng nm, k t nm 1920 n 1970 v lu tr bng trong my tnh tnh bng mt mng mt chiu N[1920..1970] vi N[k] c gi tr bng s ngi sinh trong nm k. Hy vit gii thut thc hin: a. In ra nhng nm m khng c ngi no c sinh ra b. Tnh s lng nhng nm m s ngi sinh ra khng qu 10 c. Tnh s ngi trn 50 tui tnh n nm 1985.

Bi tp thc hnh CTDL & GT

Trang 16

BI THC HNH 2. PHC TP TNH TON


* Mc tiu

La chn thut ton tt tit kin c thi gian, khng gian nh tt nht cho mi bi ton
* Yu cu:

A. Bi tp mu Bi 1: Gi s n 0 v x l s thc.Hy tnh gi tr ca biu thc sau y.

Gi : Algorithms1: O(N2) double s=1; for (int i=1;i<=n;i++) s=s+pow(x,i)/giaithua(i);// giaithua(i) = i!=1.2.3.i phc tp theo cch ny l O(N2), tuy nhin chng trnh khng th thc hin c khi n ln; chng hn n =100 - do php tnh giai tha ca n khng th thc hin.. Algorithms2: O(N2) double s=1,p; for (int i=1; i<=n;i++) { p=1; for (int j=1; j<=i;j++) p=p*x/j; s=s+p; } phc tp theo cch ny vn l l O(N2), tuy nhin chng trnh khng cn tnh giai tha ca n. Algorithms3: O(N) phc tp tuyn tnh double s=1,p=1; for (int i=1;i<=n;i++) {

Bi tp thc hnh CTDL & GT

Trang 17

p=p*x/i; s=s+p; } Li gin mu using System; class VD { static void Main() { double s = 1, p = 1, x; int n; Console.Write("Nhap n="); n = int.Parse(Console.ReadLine()); Console.Write("Nhap x="); x = double.Parse(Console.ReadLine()); for (int i = 1; i <= n; i++) { p = p * x / i; s = s + p; } Console.WriteLine("Ket qua:" + s); Console.ReadKey(); } } Bi 2: Cng hai s nguyn ln a v b, trong s a c m ch s v s b c n ch s. S nguyn ln y l s c th c n vi trm ch s. lu tr cc s nguyn ln ny ta c th dng chui (mi k t ca chui l mt ch s) hoc dng mng mt chiu (mi phn t ca mng mt chiu l mt ch s).
Gi :Gi s c 2 s a,b nhp vo dng xu so1 v so2

u tin ta thc hin chun ha 2 s nh sau : kim tra xem xu no c di nh hn th thm 0 vo u xu cho n khi thu c 2 xu so1 v so2 c di nh nhau Thc hin tnh tng :Khai bo mt bin nh =0; Thc hin duyt qua cc phn t ca 2 xu t phn t cui n phn t u, ti mi phn

Bi tp thc hnh CTDL & GT

Trang 18

Li gin mu using System; using System.Text; class BaiXau { static void chuanHoaSo(ref string so1, ref string so2) { StringBuilder s1 = new StringBuilder(so1); StringBuilder s2 = new StringBuilder(so2); if (s1.Length > s2.Length) while (s2.Length < s1.Length) s2.Insert(0, "0"); else if (s2.Length > s1.Length) while (s1.Length < s2.Length) s1.Insert(0, "0"); so1 = s1.ToString(); so2 = s2.ToString(); }

static string tinhTong(string so1, string so2) { string s; int t, a, b, nho = 0; int n; chuanHoaSo(ref so1, ref so2); StringBuilder kq = new StringBuilder(""); n = so1.Length - 1; while (n >= 0) { a = so1[n] - 48; b = so2[n] - 48;

Bi tp thc hnh CTDL & GT

Trang 19

t = a + b + nho; s = t.ToString(); if (s.Length == 1) s = "0" + s; nho = s[0] - 48; kq.Insert(0, s[1]); n = n - 1; } if (nho == 1) kq.Insert(0, "1"); return kq.ToString(); } static void Main() { string so1, so2; StringBuilder x = new StringBuilder(""); StringBuilder y = new StringBuilder(""); StringBuilder s = new StringBuilder(""); Console.WriteLine("\t\t BAN HAY NHAP VAO HAI SO NGUYEN"); Console.Write(" "); so1 = Console.ReadLine(); Console.WriteLine("+"); Console.Write(" "); so2 = Console.ReadLine();

x.Append('-', so1.Length > so2.Length ? so1.Length : so2.Length); y.Append(' ', Math.Abs(so1.Length - so2.Length));

s.AppendFormat("\t\t{0}\n\n", "BAN HAY NHAP VAO HAI SO NGUYEN"); if (so1.Length < so2.Length) s.AppendFormat(" {0}{1}\n", y.ToString(), so1); else s.AppendFormat(" {0}\n", so1); s.AppendFormat("{0}\n", "+"); if (so2.Length < so1.Length) s.AppendFormat(" {0}{1}\n", y.ToString(), so2);

Bi tp thc hnh CTDL & GT

Trang 20

else s.AppendFormat(" {0}\n", so2); s.AppendFormat(" {0}\n", x.ToString()); s.AppendFormat(" {0}", tinhTong(so1, so2)); Console.Clear(); Console.WriteLine(s); Console.ReadKey(); } } B. Bi tp t gii Bi 1: Gi s n 0 v x l s thc.Hy tnh gi tr ca biu thc sau y.

Gi :

Ta nhn thy (x ^ n)/n!=(x.x.xx)/(n(n-1)(n-2)2.1) . tnh S, khai bo 2 bin p v s Duyt qua cc s t nhin t 1->n ,ti mi s ta thc hin tnh tch ca thng x v s vi thng x v cc s trc n (p=p*x/i) sau thc hin cng dn cc kt qu li ta c tng S Bi 2: Cho dy n s nguyn a0,a1,...,an-1. Hy chuyn k phn t u tin ca dy v cui dy.
Gi : S dng mt mng tg cha k phn t v mng tmp cha n-k phn t. Duyt qua

cc phn t a[i] ca mng (i: 0->n): +Nu i < k tg[i]=a[i] (chuyn k phn t u sang tg +Ngc lai, tmp[j++] =a[i] ( khi to j=0) chuyn cc phn t cn li sang tmp Sau thc hin ghp 2 mng tmp v tg vi nhau Bi 3: Cho dy n s nguyn {ai, y gi s i=1..n} Dy con lin tip l dy m thnh phn ca n l cc thnh phn lin tip nhau trong {a}, ta gi tng ca dy con l tng tt c cc thnh phn ca n. Tm tng ln nht trong tt c cc tng ca cc dy con ca {a}. V d nu n = 7; 4 5 6 4 2 3 -7

Bi tp thc hnh CTDL & GT

Trang 21

Th kt qu tng l 7. Bi 4. Gi s n 1 v x l s thc. Hy vit hm tnh gi tr ca biu thc sau y (vi phc tp tuyn tnh):

Gi : Xy dng mt hm tnh biu thc mu vi i s l mt s t nhin bt k, gi s

ta c hm Mau(int n) tr gi tr 1+1/2++1/n Ti hm Main ta duyt qua cc s t nhin i t 1->n.Ti mi s i ta tnh tch ca (1)m i vi x m i v chia cho hm Mau (vi i s l s i ), ng thi tin hnh cng dn cc kt qu li c S C. Bi tp lm them Bi 1: Cng hai s nguyn ln a v b, trong s a c m ch s v s b c n ch s. S nguyn ln y l s c th c n vi trm ch s. lu tr cc s nguyn ln ny ta c th dng chui (mi k t ca chui l mt ch s) hoc dng mng mt chiu (mi phn t ca mng mt chiu l mt ch s). Tuy nhin trong hai phng n ny th phng n dng mng mt chiu lu tr s c thut ton tt hn. Bi 2: Tm s hng th n ca dy Fibonasci (gii quyt khi n l mt s ln khi ta khng th s dng quy v cng khng th s dng mng lu tr). Bi 3: Cho dy n s nguyn a0,a1,...,an-1.Hy tm dy con lin tip tng di nht. Bi 4: Cho dy n s nguyn a0,a1,...,an-1.Hy tm on con di nht cha ton s 0. Bi 5: Cho dy n s nguyn a0,a1,...,an-1.Hy tm dy con tng cha nhiu s

Bi tp thc hnh CTDL & GT

Trang 22

BI THC HNH 3+4. DANH SCH NI N


* Mc tiu

H thng li nhng kin thc lin quan n danh sch lin kt v cc php ton trn n
* Yu cu:

A. Bi tp mu Bi 1: Cho mt danh sch lin kt n l (l cha a ch nt u tin ca danh sch), mi nt l mt s nguyn dng. a.m xem trong danh sch c bao nhiu s bng x ? b.Tm phn t dng nh nht trong danh sch. c. Xa phn t x xut hin u tin trong danh sch.
Gi : Khi to mt danh sch ton cc l

a.Khi to mt bin m d=0.Duyt qua tng phn t ca danh sch, nu phn t no c gi tr l x th tng d=d+1; b.Khi to bin minduong=int.MaxValue .Duyt qua tng phn t ca danh sch nu phn t no nh hn min th gn bng min c.S dng 2 nt p v t ,vi p=l ,t tr vo nt pha trc nt p.Duyt qua cc phn t ca danh sch n khi gp phn t c gi tr x .Lc ny p tr vo phn t cn xa ,ta xa nt p bng cch cho nt t nm thng tin ca nt sau nt p *Ch : + C 3 trng hp p tr vo l (phn t u), p tr vo cui (p=null), p tr vo gia + quan st kt qu ta nhp d liu cho danh sch lin kt l Li gin mu using System; class Node { public int info; public Node link; } class DSLKD

Bi tp thc hnh CTDL & GT

Trang 23

{ static Node l = new Node(); // l dng cha a ch ca nt u tin trong danh sch static void Nhap() { Console.WriteLine("Nhap vao day so nguyen"); int i = 0; l = null; Node tg; char kt; do { Console.WriteLine("Nhap so nguyen thu:" + ++i); tg = new Node(); Console.Write("Info="); tg.info = int.Parse(Console.ReadLine()); tg.link = null; // b sung nt tg vo u danh sch l if (l == null) l = tg; else { tg.link = l; l = tg; } Console.WriteLine("Ban nhap tiep C/K"); kt = char.Parse(Console.ReadLine()); } while (char.ToUpper(kt) == 'C'); } static void Hien() { Console.WriteLine("Cac phan tu co trong danh sach"); Node tg = l; while (tg != null) { Console.Write(tg.info + "\t"); tg = tg.link; } Console.WriteLine(); } static int Dem(int x) { int d = 0;

Bi tp thc hnh CTDL & GT

Trang 24

Node tg = l; while (tg != null) { if (x == tg.info) d++; tg = tg.link; } return d; } static int MinDuong() { if (l == null) throw new Exception("Danh sach rong"); else { int m = int.MaxValue; Node tg = l; while (tg != null) { if (m > tg.info && tg.info >= 0) m = tg.info; tg = tg.link; } return m; } } static void Xoa(int x) { Node p = l; Node t = p; while (p != null && p.info != x) { t = p; p = p.link; }

Bi tp thc hnh CTDL & GT

Trang 25

if (p == null) Console.WriteLine("x khong ton tai trong danh sach"); else { if (p == l) l = l.link; else if (p.link == null) t.link = null; else t.link = p.link; } } //Ham thuc hien cac chuc nang cua chuong trinh static void Main() { Nhap(); Xoa(3); Hien(); Console.WriteLine("Min duong nho nhat:" + MinDuong()); Console.ReadKey(); } } Bi 2: Hy vit phn khai bo cu trc d liu m t mt danh sch lin kt n l m mi phn t cha mt s nguyn. Vit cc hm thc hin cc yu cu sau: a.To mt danh sch l1 ch cha cc s chn v chia ht cho 3 t danh sch l. b.Sp xp cc phn t ca danh sch theo chiu gim dn.
Gi : Khi to 1 danh sch ton cc l

a.To mt danh sch l1. S dng mt nt tg duyt qua tng phn t ca danh sch l nu c phn t tha mn l s chn v chia ht cho 3 th ta gn 1 nt tmp =tg v tmp.link=null v a tmp vo danh sch l1 : +Nu l1 =null th l=tmp +Ngc li them tmp vo danh sch l1 ( tmp.link=l1;l1=tmp) b.Thc hin so snh tng nt i ca danh sch vi cc nt j pha sau n nu gi tr ca nt i > nt j ta i gi tr ca 2 nt cho nhau Li gii mu using System;

Bi tp thc hnh CTDL & GT

Trang 26

class Node { public int info; public Node link; } class DSLKD { static Node l; static void Nhap() { Console.WriteLine("Nhap vao day so nguyen"); int i = 1; l = null; Node tg; char kt; do { Console.WriteLine("Nhap so nguyen thu:" + i); tg = new Node(); Console.Write("Info="); tg.info = int.Parse(Console.ReadLine()); tg.link = null; if (l == null) l = tg; else { tg.link = l; l = tg; } Console.WriteLine("Ban nhap tiep C/K"); kt = char.Parse(Console.ReadLine()); } while (char.ToUpper(kt) == 'C'); } static void Hien(Node l) { Console.WriteLine("Cac phan tu co trong danh sach"); Node tg = l; while (tg != null) { Console.Write(tg.info + "\t"); tg = tg.link; }

Bi tp thc hnh CTDL & GT

Trang 27

Console.WriteLine(); } static Node Tach() { Node tg = l, tmp, l1 = null; while (tg != null) { if (tg.info % 3 == 0 && tg.info % 2 == 0) { tmp = new Node(); tmp.info = tg.info; tmp.link = null; //b sung nt tmp vo u danh sch l1 if (l1 == null) l1 = tmp; else tmp.link = l1; l1= tmp; } tg = tg.link; } return l1; } static void SapXep() { Node i, j; i = l; while (i.link != null) { j = i.link; while (j != null) { if (i.info > j.info) { int tg = i.info; i.info = j.info; j.info = tg; }

Bi tp thc hnh CTDL & GT

Trang 28

j = j.link; } i = i.link; } } //Ham thuc hien cac chuc nang cua chuong trinh static void Main() { Nhap(); SapXep(); Hien(l); Node l1 = Tach(); Hien(l1); Console.ReadKey(); } } Bi 2: Dng danh sch lin kt n cng hai a thc bt k R(x) =P(x)+Q(x) Vi P(x)=a0xn+a1xn-1++an Q(x)=b0xm+b1xm-1++bm
Gi : Khai bo danh sch gm 2 trng s m v h s lu tr tng phn t ca a

thc Khai bo cc danh sch ton cc P,Q, R Nhp vo danh sch P va Q Xy dng mt hm thm 1 nt tg vo danh sch l: +Nu l=null th l=tg; +Ngc li l!=null : Duyt qua cc phn t ca danh sch l bng mt nt p *Nu p.s m =tg.s m th cng h s ca p vi h s ca tg a kt qu vo p.h s *Nu trong ds l khng c s m = s m ca tg ta thc hin chn tg vo sau nt cui cng c s m nh hn tg ( c 3 th :chn u chn cui chn gia) Xy dng hm tnh tng nh sau: khai bo R=null

Bi tp thc hnh CTDL & GT

Trang 29

Duyt qua cc nt ca danh sch cha a thc P v Q ti mi phn t ta gi hm thm nt vi tham s truyn vo l ds R v nt ang duyt Li gii mu using System; class Node { public int hs; public int mu; public Node next; } class DaThuc { static Node P, Q, R; // nt P, Q, R ln lt cha a ch nt u tin ca cc danh sch tng ng static void Nhap(out Node l) { Console.WriteLine("Nhap thong tin cho da thuc"); int i = 1; l = null; Node tg; char kt; do { Console.WriteLine("Nhapa thong tin cho phan tu thu:" + i); tg = new Node(); Console.Write("He so:"); tg.hs = int.Parse(Console.ReadLine()); Console.Write("Mu:"); tg.mu = int.Parse(Console.ReadLine()); tg.next = null; Add(ref l, tg); // b sung nt tg vo v tr thch hp theo s m Console.WriteLine("Ban nhap tiep C/K"); kt = char.Parse(Console.ReadLine()); } while (char.ToUpper(kt) == 'C'); } static void Add(ref Node l, Node tg) { if (l == null) l = tg;

Bi tp thc hnh CTDL & GT

Trang 30

else { Node p = l, t = l; while (p != null && p.mu < tg.mu) { t = p; p = p.next; } //Neu mu da co if (p != null && tg.mu == p.mu) p.hs = p.hs + tg.hs; else //Them vao dau if (p == l) { tg.next = l; l = tg; } //Them vao sau else if (p == null && t.next == null) t.next = tg; //Them vao giua else { tg.next = p; t.next = tg; } } } static void Hien(Node l) { Node tg = l; string kq = "";

Bi tp thc hnh CTDL & GT

Trang 31

while (tg != null) { if (tg.mu == 0) kq = kq + tg.hs; else if (tg.mu == 1) kq = kq + (tg.hs > 0 ? "+" : "-") + tg.hs + "X"; else kq = kq + (tg.hs > 0 ? "+" : "-") + tg.hs + "X^" + tg.mu; tg = tg.next; } Console.WriteLine(kq); } static void Tong() { R = null; Node tmp = P, tg; while (tmp != null) { tg = new Node(); tg.hs = tmp.hs; tg.mu = tmp.mu; tg.next = null; Add(ref R, tg); tmp = tmp.next; } tmp = Q; while (tmp != null) { tg = new Node(); tg.hs = tmp.hs; tg.mu = tmp.mu; tg.next = null; Add(ref R, tg); tmp = tmp.next; }

Bi tp thc hnh CTDL & GT

Trang 32

} //Ham thuc hien cac chuc nang cua chuong trinh static void Main() { Console.WriteLine("Nhap thong tin da thuc P"); Nhap(out P); Hien(P); Console.WriteLine("Nhap thong tin da thuc Q"); Nhap(out Q); Hien(Q); Console.WriteLine("Tong hai da thuc"); Tong(); Hien(R); Console.ReadKey(); } } B.Bi tp t gii
Bui 1

Bi 1: Cho mt danh sch lin kt n l, mi nt l mt s nguyn dng. a.Tm phn t ln nht danh sch l. b.Tnh tng cc phn t ca danh sch l. c.m xem trong danh sch l c bao nhiu s nguyn t ? d.m xem trong danh sch c bao nhiu s m ? bao nhiu s bng 0 ? bao nhiu s dng ? e.m xem trong danh sch c bao nhiu s bng x ? f.Tm phn t dng nh nht trong danh sch.
Gi : Khai bo danh sch ton cc l

a.Khi to gi tr max=int.MinValue.Duyt qua cc phn t ca danh sch ti mi phn t so snh vi max, nu ln hn max gn max bng phn t b.Khi to t=0.Duyt qua cc phn t ca danh sch v thc hin cng dn cc gi tr ca n vo t

Bi tp thc hnh CTDL & GT

Trang 33

c.Xy dng mt hm kim tra mt s bt k c phi l s nguyn t khng ( gi s hm KTNT(int x) .Sau duyt qua cc phn t ca danh sch vi mi phn t ta gi hm KTNT( gi tr phn t) nu tr gi tr True ta tng bin m ln 1 ( vi khi to bin m =0) d.Khi 3 bin m m ,dng v 0 bng 0.Duyt qua cc phn t ca danh sch ti mi phn t tin hnh kim tra: +Nu c gi tr <0 tng bin m m ln 1 +Nu c gi tr >0 tng bin m dng ln 1 +Nu c gi tr =0 tng bin m 0 ln 1 e.Duyt qua cc phn t ca danh sch ,ti mi phn t nu c gi tr = x ta thc hin tng gi tr bin m ln 1 (vi khi to bin m =0) f.Khi to gi tr minduong=int.MaxValue .Thc hin duyt qua cc phn t ca danh sch ,nu c gi tr nh hn minduong v ln hn 0 th gn min= gi tr Bi 2: Cho mt danh sch lin kt n l, mi nt l mt s nguyn dng. a.Xa phn t u tin trong danh sch. b.Xa phn t cui cng trong danh sch. c.Xa mt phn t c tr bi con tr q. d.Xa mt phn t ngay trc phn t c tr bi con tr q. e.Xa mt nt c gi tr k.
Gi : Khai bo danh sch ton cc l

a.Mun xa phn t u ta cho phn t u nm thng tin ca phn t k tip n(l=l.next) b. xa phn t cui ta cho phn t tr vo null c.Xa con tr q: +Nu q tr vo u danh sch ta thc hin xa u ( l=l.next cu a) +Nu q tr vo cui danh sch ta thc hin xa cui ( cho phn t cui tr vo null cu b) +Cn lai, ta cho con tr t ( vi t tr vo phn t pha trc q) nm bt thong tin ca phn t m q nm bt (t.next =q.next) d.S dng 2 con tr t v p ( t tr vo phn t trc p,p=l) duyt qua cc phn t ca danh sch n khi p.next =q.Sau khi thot khi vng lp p l nt cn xa: +Nu p=l thc hin xa u

Bi tp thc hnh CTDL & GT

Trang 34

+Nu q=null thc hin xa cui +Ngc li,cho t nm bt thng tin ca q e.S dng 2 con tr t v p( t tr vo phn t trc p,p=l) duyt qua cc phn t ca danh sch n khi p=null hoc gi tr ca p =k.Thot khi vng lp p tr vo nt c gi tr k v t tr vo nt trc p +Nu p=l thc hin xa u +Nu p.next=null thc hin xa cui +Ngc li,cho t nm bt thng tin ca nt sau p (t.next =p.next) Bi 3: Cho mt danh sch lin kt n l, mi nt l mt s nguyn dng. a.Hy to danh sch l1 ch cha cc s nguyn t t danh sch l. b.Tch danh sch l thnh 2 danh sch: mt danh sch cha ton s chn, mt danh sch cha ton s l.
Gi : Khi to danh sch ton cc l

a.Xy dng hm kim tra 1 s bt k c l s nguyn t khng gi s l hm KTNT(int x).Khai bo danh sch l1=null v con tr p=l1.Duyt qua cc phn t ca danh sch ,ti mi phn t gi hm KTNT(phn t ) nu gi tr tr v True ta a n vo danh sch l1 ( p.info=gi tr phn t v p..next=null) b.Khi to 2 danh sch l1=null , l2=null v 2 con tr p=l1 ,q=l2 .Duyt qua cc phn t ca danh sch l: Nu phn t l chn a vo l1: p.info=gi tr phn t v p.next=null Nu phn t l l a vo l2: q.info=gi tr phn t v q.next=null Bi 4: Cho mt danh sch lin kt n l, mi nt l mt s nguyn dng. a.Trn hai danh sch tng dn thnh mt danh sch tng dn. b.Sp xp cc phn t ca L gim dn theo phng php chn trc tip
Gi : Khai bo danh sch ton cc l

a.Trc tin ta xy dng hm thm 1 nt tg vo danh sch l sao cho danh sch tng dn: +Nu l=null th l=tg ,l.next=null +Ngc li .S dng 1 con tr p duyt qua cc phn t ca l cho n khi danh sch rng hoc gp gi tr ln hn gi tr nt tg .Sau vng lp: *Nu p=null Bi 5: Vit chng trnh thc hin cc yu cu sau:

Bi tp thc hnh CTDL & GT

Trang 35

a.Khai bo cu trc d liu ca mt danh sch lin kt n cc tnh. Bit rng thng tin ca mi tnh bao gm: tn tnh, din tch, dn s b.Ci t cc thao tc c bn cho danh sch lin kt n cc tnh (thm, sa , xa, duyt). c.Tnh tng din tch ca tt c cc tnh trong danh sch lin kt d.Tm a ch ca node cha tnh c din tch ln nht trong danh sch lin kt. e.Tm mt tnh c dn s ln nht f.Sp xp danh sch tng dn theo din tch.
Gi : Khai bo danh sch ton cc l

a.Khai bo lp Node bao gm 3 trng thng tin gi tr tn tnh (string) ,din tch v dan s (int) v a ch nt k tip b.Cc thao tc : *Thm :Khai bo nt tg cha thng tin tnh cn thm v tg.next=null. S dng con tr t v p=l ( t tr vo nt pha trc p) duyt qua cc phn t ca danh sch cho n v tr cn thm : +Nu p=null bo li v tr +Ngc li ,cho t nm thng tin ca tg v tg nm thng tin ca p *Sa: S dng mt nt tg =l duyt qua cc phn t ca danh sch n khi gp v tr cn sa +Nu tg=null bo li +Ngc li,gn cc trng thng tin gi tr ca nt tg tr vo bng cc gi tr mi *Xa: Khai bo nt tg cha thng tin tnh cn thm v tg.next=null. S dng con tr t v p=l ( t tr vo nt pha trc p) duyt qua cc phn t ca danh sch cho n v tr cn xa : +Nu p=null bo li +Ngc li, xa nt p : Nu p=l, thc hin xa nt u Ngc li, cho t nm thng tin ca nt sau p (xa gia v cui) c. S dng con tr tg =l duyt qua cc phn t trong danh sch v thc hin cng dn gi tr thng tin Din tch ca tng phn t vo mt bin tng d. Khai bo mt bin max c gi tr l gi tr Din tch ca phn t u tin trong danh sch v mt bin v tr =0. Thc hin duyt qua cc phn t trong danh sch

Bi tp thc hnh CTDL & GT

Trang 36

nu phn t no c gi tr din tch ln hn max th gn bng max v tng bin v tr ln 1 e. Khai bo mt bin max c gi tr l gi tr Dn s ca phn t u tin trong danh sch. Thc hin duyt qua cc phn t trong danh sch nu phn t no c gi tr dn s ln hn max th gn bng max. hin ra tnh c dn s max ta duyt qua cc phn t ca danh sch nu phn t no c gi tr dn s = max th hin cc thng tin ca phn t ra mn hnh f. Thc hin duyt qua cc phn t ca danh sch ti mi phn t so snh gi tr din tch ca phn t vi tng phng t k tip n nu ln hn thc hin i ch ton b cc gi tr (tn tnh dn s - din tch)ca 2 nt vi nhau

Bui 2

Bi 6: Cho danh sch ni n, c con tr LIST tr ti nt u tin ca danh sch ny. Hy vit gii thut thc hin: a. Cng thm mt s A vo s ang cha ti trng INFO ca mi nt. b. m s lng cc nt c trong danh sch . c. m s lng cc nt ang cha s dng thuc danh sch (gi s cc s cha trong mi nt l s i s khc khng). Bi 7: Hy vit phn khai bo cu trc d liu m t mt danh sch lin kt n m mi phn t cha mt s nguyn. Vit cc hm thc hin cc yu cu sau: a.m cc s nguyn t ca danh sch b.To mt danh sch l1 ch cha cc s chn v chia ht cho 3 t danh sch l. c.Sp xp cc phn t ca danh sch theo chiu gim dn. Gi : Trc tin ta khai bo 1 lp node gm trng lu tr thng tin ,trng cha a ch v nhp mt danh sch mi: class node { public int x; public node link; }

Bi tp thc hnh CTDL & GT

Trang 37

Sau vi mi yu cu ta thc hin nh sau: a. Ta phi xy dng mt hm kim tra xem mt s bt k no c phi l s nguyn t khng gi s hm l bool kiemtraNT(int n). Sau chng ta duyt qua tt c cc phn t ca danh sch, vi mi phn t tg.info chng ta gi hm kiemtraNT ra thc hin nu kiemtraNT (tg.info) tr v gi tr l True ngha l phn t tg.info chng ta ang kim tra l s nguyn t ta tng bin m khi to bng 0 ln 1. S nguyn t bng gi tr ca bin m . b. Ta khai bo mi danh sch mi l1=null,mt node c=null v node tg=l Duyt cc phn t trong danh sch tg cho n khi tg=null,kim tra nu phn t chia ht cho 3 v chia ht cho 2(s chia ht cho 2 l s chn) th ta thm phn t vo l1 bng cch:khai bo 1 node tmp mi cha phn t ang xt,ri kim tra,nu l1=null th ta gn l1=tmp,ngc li c.link = tg;c = tmp; c. Khai bo node i,j,gn i=l,ta s dng 2 vng lp while. Trong khi i.link!=null ta gn j=i.link,ri duyt j cho n khi j=null. Kim tra gi tr ca phn t i.info nu ln hn j.info th ta hon i gi tr ca hai phn t ny qua mt bin trung gian no . Kt thc cng vic ta c 1 danh sch gim dn. Bi 8: Hy khai bo kiu danh sch lin kt n c tn LIST m mi phn t cha cc thng tin v mt sinh vin bao gm mt s nguyn dng ch m s sinh vin v mt chui k t cho bit h v tn ca sinh vin. Thc hin cc cng vic sau: a.Xy dng hm sp xp danh sch sinh vin theo th t tng dn ca m s sinh vin. b.Xy dng hm thm mt sinh vin mi vo danh sch( c th t) sao cho vn bo m th t tng dn ca m s. Gi : u tin ta khai bo cu trc sinhvien gm h tn v m sinh vin,sau khai 1 lp node gm thnh phn d liu info kiu sinhvien,thnh phn lu tr a ch phn t k tip trong danh sch. a.Khai bo 2 node mi i=l(l l danh sch ton cc)v j Trong khi phn t tip theo ca i cha bng null th ta s gn j=i.next(ngha l j s chy trc i,j bng phn t k tip ca i),trong khi j khc null th kim tra nu gi tr ca i.masv.info<j.masv.info th i ch i.masv.info v j.masv.info vi nhau qua 1 bin trung gian no .

Bi tp thc hnh CTDL & GT

Trang 38

b. Khai bo 2 node mi p=l,t=l. Trong khi p.masv.info<m sinh vin mi nhp vo v p cha rng th gn t=p. Khi to 1 node tg mi gn tg.masv.info=m sinh vin mi nhp vo. Kim tra nu l rng gn l=tg lun,nu p=l th thm vo u gn phn t tip theo ca tg:tg.next=l;l=tg.,nu p rng th them vo sau gn t.next=tg,ngc li tt c iu trn ta thm vo gia. Bi 9: Cho mt danh sch lin kt, mi nt cha mt s nguyn. a.Thm mt phn t c gi tr x vo u danh sch b.Ch gi li mt gi tr trong s cc gi tr ging nhau. c.Kim tra xem danh sch c c sp xp tng dn hay khng? d.o ngc danh sch. e.Sp xp cc s chn trong danh sch theo th t tng, sp xp cc s l theo th t gim dn, cc s 0 gi nguyn v tr. Gi : Trc tin ta khai bo 1 lp node gm trng lu tr thng tin ,trng cha a ch v nhp mt danh sch mi, sau vi mi yu cu ta thc hin nh sau: a.Kim tra danh sch nu rng th ta gn l=tg ngha l l phn t u tin ca danh sch,ngc li ta cho a ch tip theo ca tg nm bt ly l(tg.next=l)v gn l=tg. b.u tin kim tra xem danh sch nu rng(l=null) th in ra thng bo danh sch rng. Ngc li khi to node i=l,j,ta s dng 2 vng lp. Thc hin cc cng vic sau cho n khi j=l:gn j=i.next,trong khi j!=l th kim tra nu i.info=j.info th xa j i. c. Kim tra xem danh sch nu rng(l=null) th in ra thng bo danh sch rng. Ngc li khai bo node tg=l,kim tra xem phn t bn phi ca tg khng bng l(tg.next!=l) v gi tr ca tg ln hn gi tr ca phn t tip theo(tg.next.info) th gn ok=false(ok l bin theo di tnh ng hay sai) ri thot khi vng lp. Nu ok=true th dy tng dn ngc li l dy k tng dn. d. u tin ta m xem danh sch c bao nhiu phn t. Sau ta duyt ngc danh sch cho 1 vng lp lng trong 1 vng lp khc. Vng lp bn trong chy sau vng lp ngoi 1 phn t ta hon v 2 phn t k nhau cho n khi no ht danh sch th thi. e.Khi to thm 2 node l1,l2 rng. duyt ht danh sch nu phn t chia ht cho 2 th them vo danh sch l1,khng chia ht them vo danh sch l2,bng 0 th gi

Bi tp thc hnh CTDL & GT

Trang 39

nguyn. Sau sp xp tng dn cho l1,gim dn cho l2. Cui cng ta chn l1,l2 vo l. C. Bi tp lm thm Bi 1:.Vit chng trnh thc hin cc yu cu sau: a.Khai bo cu trc d liu ca mt danh sch lin kt n lu ta cc nh ca mt a gic li trong mt phng OXY. b.Tnh chu vi ca a gic. c.Tnh din tch ca a gic. Gi : To mt lp node gm 2 trng info lu tr thng tin tung , honh v 1 con tr ch n cu trc node lu ta cc nh ca mt a gic li. Sau thc hin vic nhp danh sch vi cc ta ca cc nh a gic . a. Tnh di vect cc cnh ca a gic. Sau p dng cng thc tnh chu vi a gic bng tng cc cnh ca a gic . b. Din tch ca 1 a gic li p dng cng thc s=1/2(x1.y2-x2.y1+x2y3x3y2+.+(xn-1)yn-xn(yn-1)+xny1-x1yn). Ghi ch: a gic li (Convex polygon): ton b a gic nm v mt pha ca ng thng cha cnh bt k no ca a gic. Bi 2: Cho mt danh sch ni n c con tr P tr ti nt u tin ca n. Bit rng danh sch ny khng rng. Hy vit gii thut: a. B sung mt nt mi vo sau nt c a ch T (hay : con tr T tr ti n) ang c trong danh dch . b. B sung mt nt mi vo trc nt tr bi T ang c trong danh sch . Bit rng phn thng tin dnh cho nt mi ang cha trong c a ch l X. c. B sung mt nt vo v tr th k ca danh sch. d. Tm xem trong danh sch c nt mang gi tr l Y hay khng? Nu thy th tr ra a ch ca nt , ngc li tr ra gi tr null. Bi 3: Cho mt danh sch ni n c con tr Q tr ti nt u tin ca danh sch. Bit rng danh shc ny khng rng. Hy vit gii thut: a. Loi b nt u tin ca danh sch. b. loi b nt tr bi T ang c trong danh sch. Bit rng T khng phi l i ch nt u tin v cng khng phi l i ch nt cui cng. c. Loi b nt th k ca danh sch.

Bi tp thc hnh CTDL & GT

Trang 40

Bi 4: Cho ba danh sch ni n, ln lt c nt u tin c tr bi L1, L2, L3. Hy vit gii thut: a. Ghp danh sch L2 vo sau danh sch L1 v cho L tr ti danh sch tng hp. b. Ghp danh sch L3 vo trc L2 v L1 vo sau L2 v cho L tr ti danh sch tng hp. Gi s rng c ba danh sch ny u khng rng. Bi 5: Cho mt danh sch ni n c con tr P tr ti nt u tin ca n, danh sch ny khng rng. Cho con t Q tr ti mt nt ang c trong danh sch. Hy vit gii thut tch danh sch ny thnh hai danh sch con. Danh sch th nht s c tr bi P. Danh sch th hai s tr bi Q (nt tr bi Q s l nt u tin ca danh sch th hai). Bi 6: Cho danh sch ni n, khng rng, c con tr LIST tr ti nt u tin. Bit rng trng INFO ca mi nt u cha mt s dng. Hy vit gii thut: Tnh gi tr trung bnh ca cc s cha trong danh sch. Bi 7: Vit khai bo v cc th tc ci t danh sch bng mng. Dng cc th tc ny vit: a. Th tc nhn mt dy cc s nguyn nhp t bn phm, lu tr n trong danh sch theo th t nhp vo. b. Th tc nhn mt dy cc s nguyn nhp t bn phm, lu tr n trong danh sch theo th t ngc vi th t nhp vo. c. Vit th tc in ra mn hnh cc phn t trong danh sch theo th t ca n trong danh sch. Bi 8: Vit th tc thm mt phn t trong danh sch lin kt c th t sao cho ta vn c mt danh sch c th t. Bi 9: Vit th tc nhn vo t bn phm mt dy s nguyn, lu tr n trong mt danh sch c th t khng gim, theo cch sau: vi mi phn t c nhp vo th tc phi tm v tr thch hp xen n vo danh sch cho ng th t. Vit th tc trn cho trng hp danh sch c ci t bng mng v ci t bng con tr. Bi 10: Vit th tc loi b cc phn t trng nhau (gi li duy nht 1 phn t) trong mt danh sch c th t khng gim, trong hai trng hp: ci t bng mng v ci t bng con tr.

Bi tp thc hnh CTDL & GT

Trang 41

Bi 11: Vit th tc nhn vo t bn phm mt dy s nguyn, lu tr n trong mt danh sch c th t tng khng c hai phn t trng nhau, theo cch sau: vi mi phn t c nhp vo th tc phi tm kim xem n c trong danh sch cha, nu cha c th xen n vo danh sch cho ng th t. Vit th tc trn cho trng hp danh sch c ci t bng mng v ci t bng con tr. Bi 12: Vit th tc trn hai danh sch lin kt cha cc s nguyn theo th t tng c mt danh sch cng c th t tng. Bi 13: Vit th tc xa khi danh sch lu tr cc s nguyn cc phn t l s nguyn l, cng trong hai trng hp: ci t bng mng v bng con tr. Bi 14: Vit th tc tch mt danh sch cha cc s nguyn thnh hai danh sch: mt danh sch gm cc s chn cn ci kia cha cc s l. Bi 15: Cho a thc P(x)= anxn+ an-1xn-1+... + a1x + a0 c lu tr trong my tnh di dng mt danh sch lin kt m mi phn t ca danh sch l mt record c ba trng lu gi h s, s m, v trng NEXT tr n phn t k tip. Ch cch lu tr m bo th t gim dn theo s m ca tng hng t ca a thc. V d: a thc 5x4 - x + 3 c lu tr trong danh sch c 3 phn t nh sau:

a. Hy vit chng trnh thc hin c s lu tr ny. b. Da vo s ci t trn, vit th tc thc hin vic cng hai a thc. c. Vit th tc ly o hm ca a thc.

Bi tp thc hnh CTDL & GT

Trang 42

BI THC HNH 5. NGN XP - STACK


* Mc tiu

- H thng li nhng kin thc lin quan Stack v cc php ton trn n - Ci t c cc php ton trn Stack s dng mng v danh sch lin kt
* Yu cu:

A. Bi tp mu Bi 1: Ci t cc php ton trn Stack bng mng gm cc php ton: Kim tra Stack rng khng IsEmpty() Kim tra Stack c y khng IsFull() Thm mt phn t vo Stack Push(x) Loi mt phn t khi Stack Pop() Khi to Stack Init()

Gi : Trc tin khai bo mng s v bin top ton cc. -Stack rng khi top=-1(top l bin theo di nh ca stack), vy ta ch cn tr v gi tr ca top=-1. -Stack y khi top bng hoc ln hn di ca stack, ta tr v gi tr ca top>=s.length. -u tin ta kim tra xem stack y cha, nu y ri ta in ra 1 thng bo khng th thm phn t vo stack na,ngc li gn s[++top]=x. -Kim tra xem stack c rng khng? Nu rng khng c g ly c th in ra 1 thng bo ngoi l, ngc li ta tr v gi tri s[top--]. -Khi to stack bng cch to 1 mng mi vi di ty v gn top=-1; Li gii mu using System; class Stack { public int top; public int[] s; public bool isEmpty() { return top == -1;

Bi tp thc hnh CTDL & GT

Trang 43

} public bool isFull() { return top >= s.Length; } public void Init() { s = new int[20]; top = -1; } public void Push(int x) { if (!isFull()) s[++top] = x; else Console.Write("Stack tran"); } public int Pop() { if (isEmpty()) throw new Exception("Tack Empty"); else return s[top--]; } } Bi 2: Chuyn mt s t h m thp phn sang h m thp lc phn Gi : u tin ta phi xy dng 1 lp stack gm cc hm kim tra rng, kim tra y, thm 1 phn t, ly ra 1 phn t, khi to stack. -Ti hm Main ta thc hin cc cng vic sau: 1. Khi tao 1 stack t mi. 2. Nhp s cn chuyn i n. 3. Khai bo string st = "0123456789ABCDEF"; 4. Trong khi n!=0 ta dng hm push(hm thm 1 phn t vo stack) thm gi tr ca php tnh n%16 vo stack ,sau gn n=n/16; 5. In ra kt qu bng cch thc hin:trong khi stack cha rng th dng hm pop(hm ly 1 phn t trong stack) ly cc gi tr c trong stack ra.

Bi tp thc hnh CTDL & GT

Trang 44

Li gii mu using System; class Stack { public int top; public int[] s; public bool isEmpty() { return top == -1; } public bool isFull() { return top >= s.Length; } public void Init() { s = new int[20]; top = -1; } public void Push(int x) { if (!isFull()) s[++top] = x; else Console.Write("Stack tran"); } public int Pop() { if (isEmpty()) throw new Exception("Tack Empty"); else return s[top--]; } } class App {

Bi tp thc hnh CTDL & GT

Trang 45

static void Main() { Stack t = new Stack(); int n; Console.Write("Nhap vao so can doi:"); n = int.Parse(Console.ReadLine()); t.Init(); string st = "0123456789ABCDEF"; while (n != 0) { t.Push((int)st[n % 16]); n = n / 16; } Console.Write("Ket qua chuyen sang he thap luc phan:"); while (!t.isEmpty()) { Console.Write("{0}", (char)t.Pop()); } Console.ReadKey(); } } Bi 3: Xy dng chng trnh nhp vo mt biu thc bt k sau tnh gi tr ca chng Gi : u tin ta phi xy dng 1 lp stack gm cc hm kim tra rng. Kim tra y, thm 1 phn t, ly ra 1 phn t, khi to stack, khai bo mng s v bin top ton cc. -Sau l lp chng trnh, ta to 1 hm kim tra u tin ca ton t vi php cng v tr l 1, php nhn v chia l 2. -Xy dng 1 hm postfix thm hoc ly ra 1 phn t trong stack. +Trc ht, ta to 1 stack t mi, khi to 1 xu E1 rng, duyt t u cho n ht xu E (xu c nhp vo t bn phm) kim tra E[i] nu l s th thm vo bn phi xu E1, nu l ( th y vo stack,nu ) th s ly cc phn t trong stack thm vo bn phi E1 cho n khi gp ( th mi thi ly ra, nu gp ton t th gi hm kim tra u tin

Bi tp thc hnh CTDL & GT

Trang 46

so snh u tin gia ton t ang xt vi ton t trong stack, nu u tin ca ton t ang xt nh hn ton t nh stack th ly ton t u stack thm vo E1 ng thi y ton t ang xt vo stack. + Sau trong khi stack cha rng th ly ht cc phn t trong ra v thm vo E1. + Tip n l cng vic tnh ton:u tin to 1 satck mi, khai bo 2 bin lu tr 2 ton hng ly ra, 1 bin lu tr kt qu kiu s thc. Duyt t u cho ht E1 nu l s th y vo satck,ngc li th ly hai ton hng u satck ra ri thc hin php ton tng ng, c kt qu ta li y vo stack. Cui cng ta tr gi gi tr kt qu l phn t ly ra cui cng ca stack. Li gii mu: using System; using System.Collections.Generic; using System.Text; public class Stack { public int top; public object[] s; public bool isEmpty() { return top == -1; } public bool isFull() { return top >= s.Length; } public void Init() { s = new object[20]; top = -1; } public object Top() {

Bi tp thc hnh CTDL & GT

Trang 47

if (isEmpty()) throw new Exception("Tack Empty"); else return s[top]; } public void Push(object x) { if (!isFull()) s[++top] = x; else Console.Write("Stack tran"); } public object Pop() { if (isEmpty()) throw new Exception("Tack Empty"); else return s[top--]; } }

public class TBT { static int Pri(char k) { int kq = 0; switch (k) { case '+': kq = 1; break; case '-': kq = 1; break; case '*': kq = 2; break; case '/': kq = 2; break; } return kq; } static string PostFix(string E) { Stack t = new Stack(); t.Init();

Bi tp thc hnh CTDL & GT

Trang 48

string E1 = ""; for (int i = 0; i < E.Length; ++i) if (E[i] >= '0' && E[i] <= '9') E1 = E1 + E[i].ToString(); else if (E[i] == '(') t.Push('('); else if (E[i] == ')') { while ((char)t.Top() != '(') { E1 = E1 + t.Pop(); } t.Pop(); } else { while (!t.isEmpty() && Pri((char)t.Top()) > Pri(E[i])) {

E1 = E1 + t.Pop(); } t.Push(E[i]); } while (!t.isEmpty()) E1 = E1 + t.Pop(); return E1; } static double Calculator(string E) { double y, x, z; Stack t = new Stack(); t.Init(); for (int i = 0; i < E.Length; ++i) if (E[i] >= '0' && E[i] <= '9') t.Push((double)E[i] - 48); else switch (E[i]) {

Bi tp thc hnh CTDL & GT

Trang 49

case '+': y = (double)t.Pop(); x = (double)t.Pop(); z = x + y; t.Push((double)z); break; case '-': y = (double)t.Pop(); x = (double)t.Pop(); z = x + y; t.Push((double)z); break; case '*': y = (double)t.Pop(); x = (double)t.Pop(); z = x + y; t.Push((double)z); break; case '/': y = (double)t.Pop(); x = (double)t.Pop(); z = x + y; t.Push((double)z); break; } return (double)t.Pop(); } //Ham thuc hien cac chuc nang cua chuong trinh static void Main() { string E = "5+(5+3*2)+3+6/2"; string E1 = PostFix(E);

Bi tp thc hnh CTDL & GT

Trang 50

Console.WriteLine(Calculator(E1)); Console.ReadKey(); } } A. Bi t lm Bi 1: Ci t cc php ton trn Stack bng danh sch lin kt gm cc php ton: Kim tra Stack rng khng IsEmpty() Thm mt phn t vo Stack Push(x) Loi mt phn t khi Stack Pop() Khi to Stack Init()

Gi : Trc tin khai bo 1 lp node gm 1 trng info lu tr thng tin ca phn t,1 node link lu tr a ch k tip trong danh sch. Sau trong lp satck khai bo 1 node s ton cc. -Stack rng khi s==null(s l theo di phn t u tin ca danh sch),vy ta ch cn tr v gi tr ca s==null. -Khi to 1 node tg mi cha phn t cn thm vo stack,gn gi tr tg.info=x;tg.link=null(a ch k tip trong danh sch tg l null),kim tra xem danh sch c rng khng? Nu rng th gn s=tg;ngc li tg.link=s;s=tg. -Kim tra xem stack c rng khng? Nu rng khng c g ly c th in ra 1 thng bo stack rng,ngc li ta gn int kq=s.x;s=s.link sau tr ra gi tr kt qu. -Khi to stack bng cch to 1 danh sch rng s=null. Bi 2: Dng Stack chuyn mt s nguyn bt k sang h m thp lc phn, nh phn Gi : u tin ta phi xy dng 1 lp stack gm cc hm kim tra rng.kim tra y,thm 1 phn t,ly ra 1 phn t. -Ti hm Main ta thc hin cc cng vic sau: 1. 1.Khi tao 1 stack t mi. 2. Nhp s cn chuyn i n,nhp h cn i k. 3. Khai bo string st = "0123456789ABCDEF"; 4. Trong khi n!=0 ta dng hm push(hm thm 1 phn t vo stack) thm gi tr ca php tnh n% k vo stack ,sau gn n=n/k; 5. In ra kt qu bng cch thc hin:trong khi stack cha rng th dng hm pop(hm ly 1 phn t trong stack) ly cc gi tr c trong stack ra.

Bi tp thc hnh CTDL & GT

Trang 51

Bi 3: Dng Stack kim tra tnh hp l ca mt dy cc du ( v ) trong mt biu thc V d 1: (()()()()) l hp l V d 1: (())()()) l khng hp l Gi : u tin ta phi xy dng 1 lp stack gm cc hm kim tra rng.kim tra y,thm 1 phn t,ly ra 1 phn t,khi to stack. Khai bo mng s v bin top ton cc. -Gi hm khi to 1 stack t mi init(),duyt t 0 n s.length +kim tra nu s[i]=( th gi hm push(s[i])(ham thm 1 phn t vo stack),ngc li kim tra nu stack rng th gn false (kt 1 bin kim tra no v c khi to l true )v thot khi vng lp,ngc li gi hm thm 1 phn t vo pop(). +Kim tra,nu kt=false in ra khng hp l,ngc li kim tra nu stack rng th in ra man hnh hp l,ngc li l khng hp l. Bi 4: Tnh gi tr ca mt biu thc dng chui k t bao gm cc ch s v cc php ton +,-,*,/ , % v du ng m ngoc n. V d: (( 2 + 3 )*2) 4/2 = 12 Gi : u tin ta phi xy dng 1 lp stack gm cc hm kim tra rng.kim tra y,thm 1 phn t,ly ra 1 phn t,khi to stack,khai bo mng s v bin top ton cc. -Sau l lp chng trnh,ta to 1 hm kim tra u tin ca ton t vi php cng v tr l 1,php nhn v chia l 2. -Xy dng 1 hm postfix thm hoc ly ra 1 phn t trong stack. +Trc ht,ta to 1 stack t mi,khi to 1 xu E1 rng,duyt t u cho n ht xu E(xu c nhp vo t bn phm) kim tra E[i] nu l s th thm vo bn phi xu E1,nu l ( th y vo stack,nu ) th s ly cc phn t trong stack thm vo bn phi E1 cho n khi gp ( th mi thi ly ra,nu gp ton t th gi hm kim tra u tin so snh u tin gia ton t ang xt vi ton t trong stack,nu u tin ca ton t ang xt nh hn ton t nh stack th ly ton t u stack thm vo E1 ng thi y ton t ang xt vo stack. +Sau trong khi stack cha rng th ly ht cc phn t trong ra v thm vo E1. +Tip n l cng vic tnh ton:u tin to 1 satck mi,khai bo 2 bin,2 bin lu tr 2 ton hng ly ra,1 bin lu tr kt qu kiu s thc.Duyt t u cho ht E1 nu l s th y vo satck,ngc li th ly hai ton hng u satck ra ri thc hin php ton tng ng,c kt qu ta li y vo stack. Cui cng ta tr gi gi tr kt qu l phn t ly ra cui cng ca stack.

Bi tp thc hnh CTDL & GT

Trang 52

Bi 5: Hy cho bit ni dung ca Stack sau mi thao tc trong dy : V d cho dy: EAS*Y**QUE***ST***I*ON Vi mt ch ci tng trng cho thao tc thm ch ci tng ng vo stack, du * tng trng cho thao tc ly ni dung mt phn t trong stack in ln mn hnh. Hy cho bit sau khi hon tt chui thao tc, nhng g xut hin trn mn hnh ? Gi : u tin ta phi xy dng 1 lp stack gm cc hm kim tra rng.kim tra y,thm 1 phn t,ly ra 1 phn t,khi to stack,khai bo mng s v bin top ton cc. -Duyt ht dy c nhp vo, kim tra nu l ch ci th y vo stack, cn l du * th ly 1 ch ci u stack ra ri thm vo bn phi 1 xu mi. Kt qu l 1 dy ch ci(xu mi).

Bi tp thc hnh CTDL & GT

Trang 53

BI THC HNH 6.
* Mc tiu

HNG I - QUEUE

H thng li nhng kin thc lin quan n hng i Queue v cc php ton trn n
* Yu cu:

A. Bi tp mu Ci t cc php ton trn Queue bng danh sch gm cc php ton: EnQueue(O): thm mt i tng O - Object vo ui hng i; DeQueue(): ly ra mt i tng u hng i v tr v tr ca n, nu hng i rng s gp li; EmptyQueue(): kim tra xem hng i c rng hay khng; Front(): Tr v tr ca phn t u hng i m khng loi n khi hng i, nu hng i rng s gp li.
Gi : Khai bo con tr first tr vo phn t u tin ca Queue

- EmptyQueue(): Hng i rng khi con tr first bng null - EnQueue(O): Thm mt i tng O vo ui hng i, ta khi to mt nt tg c cha gi ca i tng O, cho tg cha thng tin ca con tr first v gn first bng tg - DeQueue():Thc hin kim tra hng i : +Nu hng i rng bo li +Ngc li,kim tra : *Nu hng i c 1 phn t (first.next =null) i tng ly ra c gi tr bng first v first bng null *Ngc li, dng mt con tr c duyt qua cc phn t ca Queue ( khi to c=first duyt n c.next.next=null) ,i tng ly ra c gi tr bng phn t duyt n sau cng ca Queue (c.next) v xa phn t ra khi Queue (c.next=null) -Front():Kim tra hng i +Nu hng i rng bo li +Ngc li , kim tra : *Nu hng i c 1 phn t (first.next =null) phn t u hng i c gi tr bng first

Bi tp thc hnh CTDL & GT

Trang 54

* Ngc li, dng mt con tr c duyt qua cc phn t ca Queue ( khi to c=first duyt n c.next.next=null) ,phn t u hn i c gi tr bng phn t duyt n sau cng ca Queue (c.next) Li gii mu using System; class Node { public int value; public Node next; } class Queue { public Node first; public bool EmptyQueue() { return first == null; } public void EnQueue(int x) { Node tg = new Node(); tg.value = x; tg.next = first; first = tg; } public int DeQueue() { int value; if (first == null) throw new Exception("Queue empty"); else { if (first.next == null) {

Bi tp thc hnh CTDL & GT

Trang 55

value = first.value; first = null; } else { Node c = first; while (c.next.next != null) c = c.next; value = c.next.value; c.next = null; } return value; } } public void Cleanup() { first = null; } public int Front() { int value; if (first == null) throw new Exception("Queue empty"); { if (first.next == null) { value = first.value; } else { Node c = first; while (c.next.next != null) c = c.next; value = c.next.value; }

Bi tp thc hnh CTDL & GT

Trang 56

return value; } } } class App { static void Main() { Queue t = new Queue(); int x; char kt; do { Console.Write("Nhap mot so nguyen:"); x = int.Parse(Console.ReadLine()); t.EnQueue(x); Console.Write("Ban co nhap tiep C/K"); kt = char.Parse(Console.ReadLine()); } while (char.ToUpper(kt) == 'C'); Console.WriteLine("Cac so nguyen da nhap"); while (!t.EmptyQueue()) Console.Write(t.DeQueue() + "\t"); Console.WriteLine(); Console.ReadKey(); } } B. Bi t lm Bi 1: Ci t cc php ton trn Queue bng mng gm cc php ton: EnQueue(O): thm mt i tng O vo ui hng i; DeQueue(): ly ra mt i tng u hng i v tr v tr ca n, nu hng i rng s gp li; EmptyQueue(): kim tra xem hng i c rng hay khng; Front(): Tr v tr ca phn t u hng i m khng loi n khi hng i, nu hng i rng s gp li.

Bi tp thc hnh CTDL & GT

Trang 57

Bi 2: Ci t cc php ton trn Queue bng danh sch lin kt gm cc php ton: EnQueue(O): thm mt i tng O vo ui hng i; DeQueue(): ly ra mt i tng u hng i v tr v tr ca n, nu hng i rng s gp li; EmptyQueue(): kim tra xem hng i c rng hay khng; Front(): Tr v tr ca phn t u hng i m khng loi n khi hng i, nu hng i rng s gp li.
Gi : Khai bo con tr first tr vo phn t u tin ca Queue

-EmptyQueue():Hng i rng khi con tr first bng null -EnQueue(O):Thm mt i tng O vo ui hng i, ta khi to mt nt tg c cha gi ca i tng O, cho tg nm thng tin ca con tr first v gn first bng tg -DeQueue():Thc hin kim tra hng i : +Nu hng i rng bo li +Ngc li,kim tra : *Nu hng i c 1 phn t (first.next =null) i tng ly ra c gi tr bng first v first bng null *Ngc li, dng mt con tr c duyt qua cc phn t ca Queue ( khi to c=first duyt n c.next.next=null) ,i tng ly ra c gi tr bng phn t duyt n sau cng ca Queue (c.next) v xa phn t ra khi Queue (c.next=null) -Front():Kim tra hng i +Nu hng i rng bo li +Ngc li , kim tra : *Nu hng i c 1 phn t (first.next =null) phn t u hng i c gi tr bng first * Ngc li, dng mt con tr c duyt qua cc phn t ca Queue ( khi to c=first duyt n c.next.next=null) ,phn t u hn i c gi tr bng phn t duyt n sau cng ca Queue (c.next) Bi 3: Sp xp danh sch s nguyn dng Queue
Gi : Khai bo mt Queue ton cc Q

Trc tin xy dng mt hm thm mt s bt k vo mt Queue sao cho th t sp xp trong Queue khng i v d l hm Them(int a,Queue P), Thc hin kim tra: +Nu P rng thm a vo P +Ngc li,kim tra phn t u Queue P

Bi tp thc hnh CTDL & GT

Trang 58

*Nu P.Front()>a thm a vo P *Ngc lai,s dng mt Queue TG ,chuyn ht cc phn t trong P sang TG n khi gp s ln hn a, ri a a vo P.Sau a ton b cc phn t TG sang P Ti hm Main() thc hin duyt qua danh sch cc s nhp, ti mi s ta gi hm Them ( s ,Q) .Kt thc hin ra Q ta c dy s gim dn Bi 4: Dng Queue m phng dng ch chy trn mn hnh Bi 5: Hy cho bit ni dung ca hng i sau mi thao tc trong dy : V d cho dy: EAS*Y**QUE***ST***I*ON Vi mt ch ci tng trng cho thao tc thm ch ci tng ng vo hng i, du * tng trng cho thao tc ly ni dung mt phn t trong hng i in ln mn hnh. Hy cho bit sau khi hon tt chui thao tc, nhng g xut hin trn mn hnh ?
Gi : Khi to mt Queue lu tr cc k t

Nhp vo xu s dy k t. Sau thc hin thm tng k t trong xu s vo Queue Thc hin duyt qua cc phn t ca Queue n khi Queue rng .Ti mi phn t ca Queue nu k t tr ra c m ASCII thuc vo khong m ASCII tng ng ca cc ch ci A->Z v a->z th hin k t ra mn hnh.

Bi tp thc hnh CTDL & GT

Trang 59

BI THC HNH 7.
* Mc tiu

DANH SCH LIN KT KP

H thng li nhng kin thc lin quan danh sch lin kt kp v cc php ton trn n
* Yu cu:

A. Bi tp mu Bi 1: Cho mt danh sch lin kt i, mi nt l mt s nguyn dng. a.m xem trong danh sch c bao nhiu s bng x ? b.Tm phn t dng nh nht trong danh sch. c. Xa phn t x xut hin u tin trong danh sch.
Gi : Khai bo 2 nt ton cc pHead, pTail ln lt cha a ch nt u v nt cui

danh sch a.Khi to bin d=0 m cc s =x. Duyt qua cc phn t trong danh sch bng mt nt tg (khi to tg=pHead), ti mi phn t so snh gi tr ca n vi x nu bng ta tng gi tr bin d=d+1. b. Khi to gi tr min bng ln v cng (MaxValue). Duyt qua cc phn t trong danh sch bng mt nt tg (khi to tg=pHead), ti mi phn t nu c gi tr nh hn min va ln hn 0 th gn min bng phn t . c. S dng mt nt p (Khi to p=pHead), duyt qua cc phn t ca danh sch n khi gp phn t c gi tr x +Nu p=null bo li khng c x trong danh sch +Ngc li, p s tr vo nt cn xa: *Nu p=pHead, gn pHead bng phn t ng sau pHead (pHead=pHead.next) *Nu p=pTail (hay p.next=null tc p tr vo phn t cui), ta cho p tr vo null *Ngc li, ta cho nt ng trc p cha a ch nt ng sau p v nt ng sau p cha a ch nt ng trc p. Khi , p khng cn lin kt trong danh sch. Li gii mu using System; class Node {

Bi tp thc hnh CTDL & GT

Trang 60

public int info; public Node pre, next;//cha a ch nt ng trc, ng sau } class DSLKK { static Node L, R;// cha a ch nt u tin, cui cng ca danh sch static void Nhap() { Console.WriteLine("Nhap vao day so nguyen"); int i = 1; Node tg; char kt; L =R = null; do { Console.WriteLine("Nhap so nguyen thu:" + i); tg = new Node(); Console.Write("Info="); tg.info = int.Parse(Console.ReadLine()); tg.pre = null; tg.next = null; if (L == null && R == null) L = R = tg; else { tg.pre = R; R.next = tg; R = tg; } Console.WriteLine("Ban nhap tiep C/K"); kt = char.Parse(Console.ReadLine()); } while (char.ToUpper(kt) == 'C'); } static void Hien() { Console.WriteLine("Cac phan tu co trong danh sach"); Node tg = L;

Bi tp thc hnh CTDL & GT

Trang 61

while (tg != null) { Console.Write(tg.info + "\t"); tg = tg.next; } Console.WriteLine(); } public static int Dem(int x) { int d = 0; Node tg = L; while (tg != null) { if (x == tg.info) d++; tg = tg.next; } return d; } static int MinDuong() { if (L == null && R == null) throw new Exception("Danh sach rong"); else { int m = int.MaxValue; Node tg = L; while (tg != null) { if (m > tg.info && tg.info >= 0) m = tg.info; tg = tg.next; } return m; }

Bi tp thc hnh CTDL & GT

Trang 62

} static void Xoa(int x) { Node p = L; while (p != null && p.info != x) p = p.next; if (p == null) Console.WriteLine("x khong ton tai trong danh sach"); else { if (p == L) L = L.next; else if (p.next == null) p.pre.next = null; else { p.pre.next = p.next; p.next.pre = p.pre; } } } //Ham thuc hien cac chuc nang cua chuong trinh static void Main() { Nhap(); Xoa(3); Hien(); Console.WriteLine("Min duong trong danh sach:" + MinDuong()); Console.ReadKey(); } } Bi 2: Hy vit phn khai bo cu trc d liu m t mt danh sch lin kt i m mi phn t cha mt s nguyn. Vit cc hm thc hin cc yu cu sau: a. a ra mn hnh cc phn t l s nguyn t c trong danh sch b. Sp xp cc phn t ca danh sch theo chiu gim dn.

Bi tp thc hnh CTDL & GT

Trang 63

c. Gi s danh sch c sp xp gim dn, hy thm mt phn t vo danh sch sao cho th t trong danh sch khng thay i
Gi : Khai bo 2 nt ton cc pHead, pTail cha a ch nt u v nt cui danh sch

a. Xy dng hm kim tra mt s bt k c phi s nguyn t hay khng, gi s l hm KTNT(int x). Thc hin duyt qua cc phn t c danh sch ti mi phn t gi hm KTNT nu tr gi tr True ta hin gi tr ca phn t ra mn hnh b. Duyt qua tng phn t ca danh sch, ti mi phn t thc hin so snh vi tng phn t pha sau n nu ln hn thc hin hon i v tr ca 2 phn t cho nhau, c. Khi to mt nt tg cha gi tr cn thm vo c a ch nt ng trc v ng sau l null, +Nu danh sch rng gn pHead=pTail=tg +Ngc li,s dng nt p =pHead duyt qua cc phn t ca danh sch n khi gp phn t nh hn gi tr thm *Nu p=null tc gi tr thm vo l nh nht ta thc hin thm vo bn phi danh sch *Nu p=pHead gi tr thm vo l nh nht ta thm vo u danh sch *Ngc li, ta thc hin thm tg vo v tr nt p ang tr n
Li gii mu:

using System; class Node { public int info; public Node pre, next;//cha a ch nt ng trc, ng sau } class DSLKK { static Node pHead, pTail; static void Nhap() { Console.WriteLine("Nhap vao day so nguyen"); int i = 1; Node tg; char kt; pHead = pTail = null;

Bi tp thc hnh CTDL & GT

Trang 64

do { Console.WriteLine("Nhap so nguyen thu:" + i); tg = new Node(); Console.Write("Info="); tg.info = int.Parse(Console.ReadLine()); tg.pre = null; tg.next = null; if (pHead == null && pTail == null) pHead = pTail = tg; else { tg.pre = pTail; pTail.next = tg; pTail = tg; } Console.WriteLine("Ban nhap tiep C/K"); kt = char.Parse(Console.ReadLine()); } while (char.ToUpper(kt) == 'C'); } static void Hien() { Node tg = pHead; while (tg != null) { Console.Write(tg.info + "\t"); tg = tg.next; } Console.WriteLine(); } //Hm kim tra n c phi l s nguyn t khng? static bool NguyenTo(int n) { bool ok = true; for (int i = 2; i <= n - 1; ++i)

Bi tp thc hnh CTDL & GT

Trang 65

if (n % i == 0) { ok = false; break; } return ok; } static void HienNT() { Console.WriteLine("Cac phan tu la so nguyen to co trong danh sach"); Node tg = pHead; while (tg != null) { if (NguyenTo(tg.info)) Console.Write(tg.info + "\t"); tg = tg.next; } Console.WriteLine(); } static void SapXep() { Node i = pHead; while (i.next != null) { Node j = i.next; while (j != null) { if (i.info < j.info) { int tg = i.info; i.info = j.info; j.info = tg; } j = j.next; } i = i.next;

Bi tp thc hnh CTDL & GT

Trang 66

} } static void Them(int x) { Node tg = new Node(); tg.info = x; tg.pre = tg.next = null; if (pHead == null && pTail == null) pHead = pTail = tg; else { Node p = pHead; while (p != null && p.info > tg.info) p = p.next; if (p == pHead)//Them u danh sch { tg.next = pHead; pHead.pre = tg; pHead = tg; } else if (p == null)//Them cui danh sch { tg.pre = pTail; pTail.next = tg; pTail = tg; } else//Them o giua { tg.next = p; tg.pre = p.pre; p.pre.next = tg; p.pre = tg; } }

Bi tp thc hnh CTDL & GT

Trang 67

} //Ham thuc hien cac chuc nang cua chuong trinh static void Main() { Nhap(); Console.WriteLine("Danh sach luc dau"); Hien(); Console.WriteLine("Danh sach sau khi sap xep"); SapXep(); Hien(); Console.WriteLine("Danh sach sau khi chen"); Them(5); Hien(); Console.WriteLine("Danh sach cac so nguyen to"); HienNT(); Console.ReadKey(); } } B. Bi tp t gii Bi 1: Dng danh sch lin kt kp vit chng trnh lu tr mt danh sch cc s nguyn, sp xp danh sch theo th t (tng hoc gim), trn 2 danh sch c th t c mt danh sch mi c th t. Yu cu chi tit: 1. Vit cc khai bo cn thit ci t mt danh sch cc s nguyn.
Gi : Khai bo nt mang thng tin l s nguyn v a ch nt trc, sau ca nt

Khai bo nt u v cui ca danh sch 2. Vit th tc khi to mt danh sch rng.


Gi : Danh sch rng khi nt u v cui ca danh sch l rng (null)

3. Vit hm kim tra danh sch rng.


Gi : Hm kim tra tr gi tr True khi nt u v cui cng rng (null)

4. Vit th tc nhp mt danh sch.

Bi tp thc hnh CTDL & GT Gi : Khai bo 2 nt u, cui ca danh sch pHead, pTail

Trang 68

Khi to danh sch rng v mt nt tg cha gi tr cn nhp vi a ch nt ng trc v sau ca tg l null. Thc hin thm tg vo danh sch +Nu danh sch rng gn pHead = pTail =tg +Ngc li, thm tg vo trc nt cui ca danh sch 5. Vit th tc hin th danh sch ra mn hnh.
Gi : Khi to nt tg=pHead duyt qua cc phn t bn phi tg ca danh sch ,ti mi

phn t hin ra gi tr ca n 6. Vit th tc sp xp danh sch theo th t (tng hoc gim).


Gi : Khi to nt tg=pHead duyt qua cc phn t bn phi tg ca danh sch,ti mi

phn t thc hin so snh vi tng phn t bn phi n nu ln hn thc hin hon i gi tr ca 2 phn t cho nhau, 7. Xen mt phn t mi x vo danh sch sau cho danh sch mi vn bo m th t.
Gi : (Gi s cho danh sch tng dn)

Khi to mt nt tg cha gi tr x vi a ch trc v sau ca tg l null +Nu danh sch l rng ta gn nt u v cui danh sch bng tg + Ngc li dng nt p=pHead duyt qua cc phn t ng sau tg ca danh sch n khi gp nt c gi tr ln hn x. Sau khi duyt p tr vo v tr cn thm *Nu p=pHead thc hin thm vo u danh sch (x l nh nht so vi danh sch) *Nu p=null thm vo phi danh sch (x l ln nht) *Ngc li, thm vo v tr nt p dang tr n 8. Xa mt phn t x ra khi danh sch sao cho danh sch mi vn bo m th t.
Gi : Khi xa mt phn t khng lm thay i th t danh sch.

Xa mt phn t nh sau: + Nu danh sch rng hoc khng c x trong danh sch: bo li + Ngc li : *Nu x=pHead, pHead=pHead.next *Nu x=pTail, pTail=pTail.pre *Ngc li, cho nt ng trc x nm thng tin nt ng sau x v nt ng sau x nm thng tin nt ng trc x. Khi , x khng cn lin kt trong danh sch. 9. Vit th tc trn 2 danh sch c th t thnh mt danh sch mi sao cho danh sch mi vn bo m th t.

Bi tp thc hnh CTDL & GT

Trang 69

Gi : Xy dng mt hm thm mt s bt k vo mt danh sch sao cho th t khng

i ( cch lm nh cu 7) Sau khai bo mt danh sch kq, ri duyt qua cc phn t ca 2 danh sch, ti mi phn t ta gi hm thm vo trn vi i s l phn t ang xt v danh sch kq Bi 2: Dng danh sch lin kt kp cng hai a thc bt k R(x) =P(x)+Q(x) Vi P(x)=a0xn+a1xn-1++an Q(x)=b0xm+b1xm-1++bm Sau tnh gi tr ca mt a thc R ti im x0
Gi : Khai bo danh sch gm 2 trng s m v h s lu tr tng phn t ca a

thc Khai bo 2 nt ton cc pHead, pTail cha a ch u v cui danh sch Khai bo cc danh sch ton cc P,Q,KQ Nhp vo danh sch P v Q Xy dng mt hm thm 1 nt tg vo danh sch P: +Nu P rng th pHead = pTail =tg; +Ngc li P!=null : Duyt qua cc phn t ca danh sch P bng mt nt p *Nu p.s m =tg.s m th cng h s ca p vi h s ca tg a kt qu vo p.h s *Nu trong ds P khng c s m = s m ca tg ta thc hin chn tg vo sau nt cui cng c s m nh hn tg ( c 3 th :chn trichn phi chn gia danh sch) Xy dng hm tnh tng nh sau: khai bo danh sch KQ rng Duyt qua cc nt ca danh sch cha a thc P v Q ti mi phn t ta gi hm thm nt vi tham s truyn vo l nt ang duyt v danh sch KQ

Bi tp thc hnh CTDL & GT

Trang 70

BI THC HNH 8.
* Mc tiu

DANH SCH LIN KT VNG

H thng li nhng kin thc lin quan danh sch lin kt vng v cc php ton trn n
* Yu cu:

A. Bi tp mu Bi 1: Hy vit phn khai bo cu trc d liu m t mt danh sch lin kt n vng m mi phn t cha mt s nguyn. Vit cc hm thc hin cc yu cu sau: a.Tch danh sch ban u thnh hai danh sch: l1 cha cc s chn, l2 cha cc s l b.Tnh tng cc phn t l s dng v chia ht cho 3 c trong danh sch Gi : Trc tin ta phi khi to v nhp gi tr cho danh sch l. a. Khi to 2 danh sch l1, l2 mi rng. Sau kim tra danh sch l nu rng th in ra 1 dng thng bo danh sch rng. Ngc li, khi to 1 node p=l, trong khi cha ht phn t trong p, kim tra nu p.info chia ht cho 2 (s chia ht cho 2 l s chn) th thm p.info vo l1, ngc li thm p.info vo l2. b. Khi to t=0(1 bin lu tr phn t l s dng v chia ht cho 3). Khai bo 1 node tg=l, trong khi cha duyt ht cc phn t trong tg ta kim tra nu phn t no l s dng (tg.info>0) v chia ht cho 3 (tg.info%3==0) th ta cng gi tr phn t vo bin t (t=t+tg.info).
Li gii mu:

using System; class Node { public int info; public Node link; } class DSLKDV { static Node l, l1, l2; static void Nhap() {

Bi tp thc hnh CTDL & GT

Trang 71

Console.WriteLine("Nhap vao day so nguyen"); int i = 1; l = null; Node tg; char kt; do { Console.WriteLine("Nhap so nguyen thu:" + i); tg = new Node(); Console.Write("Info="); tg.info = int.Parse(Console.ReadLine()); tg.link = null; ThemDau(ref l, tg);//Hoac ThemCuoi(ref l,tg); Console.WriteLine("Ban nhap tiep C/K"); kt = char.Parse(Console.ReadLine()); } while (char.ToUpper(kt) == 'C'); } static void ThemDau(ref Node l, Node tg) { Node c; if (l == null) { l = tg; c = tg; } else { c = l; //Tim dia chi phan tu cuoi while (l != null && c.link != l) c = c.link; tg.link = l; l = tg; } c.link = l; } static void ThemCuoi(ref Node l, Node tg) { if (l == null) l = tg; else { Node c = l;

Bi tp thc hnh CTDL & GT

Trang 72

//Tim dia chi phan tu cuoi while (l != null && c.link != l) c = c.link; c.link = tg; } tg.link = l; } static void Hien(Node l) { if (l == null) Console.WriteLine("Danh sach rong"); else { Node tg = l; do { Console.Write(tg.info + "\t"); tg = tg.link; } while (tg != l); Console.WriteLine(); } } static void Tong() { int t = 0; if (l == null) Console.WriteLine("Danh sach rong"); else { Node tg = l; do { if (tg.info > 0 && tg.info % 3 == 0)

Bi tp thc hnh CTDL & GT

Trang 73

t = t + tg.info; tg = tg.link; } while (tg != l); Console.WriteLine("Ket qua la:" + t); } }

static void Tach() { l1 = l2 = null; //l1 chua cac so chan, l2 chua cac so le if (l == null) Console.WriteLine("Danh sach rong"); else { Node p = l, tg; do { tg = new Node(); tg.info = p.info; tg.link = null; if (p.info % 2 == 0) ThemDau(ref l1, tg); else ThemDau(ref l2, tg); p = p.link; } while (p != l); Console.WriteLine(); } } //Ham thuc hien cac chuc nang cua chuong trinh static void Main() { Nhap();

Bi tp thc hnh CTDL & GT

Trang 74

Console.WriteLine("Danh sach luc dau"); Hien(l); Tach(); Console.WriteLine("Danh sach so chan"); Hien(l1); Console.WriteLine("Danh sach so e"); Hien(l2); Tong(); Console.ReadKey(); } } Bi 2: Cho mt danh sch lin kt i, mi nt cha mt s nguyn. a.Rut gn danh sch v ch gi li mt gi tr trong s cc gi tr ging nhau. b.Kim tra xem danh sch c c sp xp tng dn hay khng? Gi : Trc tin ta phi khi to v nhp gi tr cho danh sch PHead, pTail. To 1 lp node gm 1 trng lu tr thng tin info kiu int, v 2 trng lu tr a ch pre,next (pHead.pre lu tr thng tin nt ng trc ca pHead cn next lu tr thng tin nt ng sau ca pTail). Khai bo danh sch pHead, pTail ton cc. a. u tin kim tra xem danh sch nu rng (pHead=null v pTail=null) th in ra thng bo danh sch rng. Ngc li khi to node i=pHead,j, ta s dng 2 vng lp. Thc hin cc cng vic sau cho n khi j=pHead:gn j=i.right,trong khi j!=pHeadth kim tra nu i.info=j.info th xa j i. b. Kim tra xem danh sch nu rng (pHead=null v pTail=null) th in ra thng bo danh sch rng. Ngc li khai bo node tg=pHead, kim tra xem phn t ng trc ca tg khng bng pHead (tg.next!=pHead ngha l cha duyt ht vng) v gi tr ca tg ln hn gi tr ca phn t tip theo(tg.next.info) th gn ok=false(ok l bin theo di tnh ng hay sai) ri thot khi vng lp. Nu ok=true th dy tng dn ngc li l dy k tng dn.
Li gii mu:

using System; class Node {

Bi tp thc hnh CTDL & GT

Trang 75

public int info; public Node pre, next; } class DSLKKV { static Node pHead, pTail; static void Nhap() { Console.WriteLine("Nhap vao day so nguyen"); int i = 1; Node tg; char kt; pHead = pTail = null; do { Console.WriteLine("Nhap so nguyen thu:" + (i++)); tg = new Node(); Console.Write("Info="); tg.info = int.Parse(Console.ReadLine()); tg.pre = null; tg.next = null; ThemDauTrai(tg); Console.WriteLine("Ban nhap tiep C/K"); kt = char.Parse(Console.ReadLine()); } while (char.ToUpper(kt) == 'C'); } static void ThemDauTrai(Node tg) { if (pHead == null && pTail == null) { pHead = pTail = tg; tg.next = pHead; tg.pre = pTail; } else {

Bi tp thc hnh CTDL & GT

Trang 76

tg.next = pHead; tg.pre = pTail; pHead.pre = tg; pTail.next = tg; pHead = tg; } } static void Rutgon() { if (pHead == null && pTail == null) Console.WriteLine("Danh sach rong"); else { Node i = pHead, j; do { j = i.next; do { if (i.info == j.info) Xoa(j); j = j.next; } while (j != pHead); i = i.next; } while (i != pHead); Console.WriteLine(); } } static void Xoa(Node p) { if (pHead == null && pTail == null) return; else {

Bi tp thc hnh CTDL & GT

Trang 77

if (p == pHead && p == pTail) pHead = pTail = null; else if (p == pHead) { pTail.next = pHead.next; pHead.next.pre = pTail; pHead = pHead.next; } else if (p == pTail) { pHead.pre = pTail.pre; pTail.pre.next = pHead; pTail = pTail.pre; } else { p.pre.next = p.next; p.next.pre = p.pre; } } } static void KiemTra() { bool ok = true; if (pHead == null && pTail == null) Console.WriteLine("Danh sach rong"); else { Node tg = pHead; do { if (tg.next != pHead && tg.info > tg.next.info) { ok = false; break; } tg = tg.next;

Bi tp thc hnh CTDL & GT

Trang 78

} while (tg != pHead); Console.WriteLine(); } if (ok) Console.WriteLine("Day da cho la day tang dan"); else Console.WriteLine("Day da cho khong la day tang dan"); } static void Hien() { if (pHead == null && pTail == null) Console.WriteLine("Danh sach rong"); else { Node tg = pHead; do { Console.Write(tg.info + "\t"); tg = tg.next; } while (tg != pHead); Console.WriteLine(); } } //Ham thuc hien cac chuc nang cua chuong trinh static void Main() { Nhap(); Console.WriteLine("Day ban dau"); Hien(); Rutgon(); Console.WriteLine("Day sau khi rut gon"); Hien(); KiemTra(); Console.ReadKey();

Bi tp thc hnh CTDL & GT

Trang 79

} } B.Bi tp t gii Dng danh sch lin kt vng vit chng trnh lu tr mt danh sch cc s nguyn, sp xp danh sch theo th t (tng hoc gim), trn 2 danh sch c th t c mt danh sch mi c th t. Yu cu chi tit: 1. Vit cc khai bo cn thit ci t mt danh sch cc s nguyn. 2. Vit th tc khi to mt danh sch rng. 3. Vit hm kim tra danh sch rng. 4. Vit th tc nhp mt danh sch. 5. Vit th tc hin th danh sch ra mn hnh. 6. Vit th tc sp xp danh sch theo th t (tng hoc gim). 7. Xen mt phn t mi x vo danh sch sau cho danh sch mi vn bo m th t. 8. Xa mt phn t x ra khi danh sch sao cho danh sch mi vn bo m th t. 9. Vit th tc trn 2 danh sch c th t thnh mt danh sch mi sao cho danh sch mi vn bo m th t. Gi : 1. Khai bo lp node gm thnh phn lu tr thng tin info kiu d liu int,thnh phn lu tr a ch phn t k tip next. 2. Danh sch rng phn t u bng phn t cui v bng null. 3. Tr v gi tr phn t u bng phn t cui v bng null. 4. Ni n (thm vo u): nu danh sch rng pHead=null th gn pHead=tg; c=tg, ngc li tg.next=pHead, pHead=tg.(c.next=pHead). Ni kp (thm vo u):danh sach rng pHead=null v pTail=null th gn pHead = pTail=tg, ngc li tg.next=pHead;pHead.pre=tg; pTail.pre=pTail. 5. Duyt cc phn t trong danh sch trong khi cha i gip vng ta in ra gi tr phn t tng ng. 6. Khai bo node i, j, gn i=pHead, ta s dng 2 vng lp while. Trong khi i.next!=null ta gn j=i.next, ri duyt j cho n khi j=null. Kim tra gi tr ca pHead=tg. Sau gn pTail.next=pHead;

Bi tp thc hnh CTDL & GT

Trang 80

phn t i.info nu ln hn(nh hn) j.info th ta hon i gi tr ca hai phn t ny qua mt bin trung gian no . Kt thc cng vic ta c 1 danh sch gim dn(tng dn) i vi danh sch ni n, danh sch ni kp tng t. 7. Khai bo 2 node mi p=l, t=l. Trong khi p.info<phn t mi nhp vo v p cha rng th gn t=p. Khi to 1 node tg mi gn tg.info=phn t mi nhp vo. Kim tra nu l rng gn l=tg lun, nu p=l th thm vo u gn phn t tip theo ca tg:tg.next=l;l=tg., nu p rng th thm vo sau gn t.next=tg, ngc li tt c iu trn ta thm vo gia. (y l cch m bo th t theo chiu tng dn ca danh sch ni n, i vi danh sch ni kp hoc theo chiu gim dn tng t). 8. Xa mt phn t x ra khi danh sch sao cho danh sch mi vn bo m th t. Khi xa mt phn t khng lm thay i th t danh sch. Xa mt phn t nh sau: + Nu danh sch rng hoc khng c x trong danh sch: bo li + Ngc li, cho nt bn tri x nm thng tin nt bn phi x v nt bn phi x nm thng tin nt bn tri x 9. Xy dng mt hm thm mt s bt k vo mt danh sch sao cho th t khng i (cch lm nh cu 7) Sau khai bo mt danh sch kq, ri duyt qua cc phn t ca 2 danh sch, ti mi phn t ta gi hm thm vo trn vi i s l phn t ang xt v danh sch kq

Bi tp thc hnh CTDL & GT

Trang 81

BI THC HNH 9.
* Mc tiu

CY NH PHN

H thng li kin thc v kiu d liu cy nh phn nh: Cch khai bo, cc php duyt trn cy nh phn

Ci t c cc php duyt v mt s thao tc trn cy nh phn.

* Yu cu:

A. Bi tp mu Bi 1: To cy nh phn, sau hin th cc nt trn cy theo php duyt th t gia Li gii mu using System; class Node { public int Data; public Node Left, Right; } class Trees { static void InSert(ref Node root, int newdata) { if (root == null) { root = new Node(); root.Data = newdata; root.Left = null; root.Next = null; } else if (newdata < root.Data) InSert(ref root.Left, newdata); else if (newdata > root.Data) InSert(ref root.Right, newdata); else Console.WriteLine("Error: Trung lap du lieu"); } static void Duyet(Node nut) {

Bi tp thc hnh CTDL & GT

Trang 82

Console.Write(nut.Data + "->"); } static void Pinorder(Node nut) { if (nut != null) { Pinorder(nut.Left); Duyet(nut); Pinorder(nut.Right); } } //Ham thuc hien cac chuc nang cua chuong trinh static void Main() { Node root = null; int newdata; do { Console.Write("Ket thuc nhap nhan Enter"); newdata = int.Parse("0" + Console.ReadLine()); if (newdata != 0) InSert(ref root, newdata); } while (newdata != 0); Console.WriteLine("Duyet thu tu giua_LNR su dung de quy:"); Pinorder(root); Console.ReadKey(); } } Cu 2: Thc hin nhng thao tc sau vi cy nh phn tm kim a) To cy nh phn tm kim vi cc kha cho trc b) Khim tra xem mt kha bt k c trong cy khng? c) Hin th kt qu khi duyt cy theo th t gia d) m s node trong cy e) m s nt c mt con

Bi tp thc hnh CTDL & GT

Trang 83

f) m s nt c hai con g) m s l ca cy h) Chiu cao ca cy


Li gii mu

using System; class Node { public int value; public Node left, right; } class Tree { static Node Root = null;//Goc cua cay nhi phan //Phuong thuc them mot nut co khoa la X vao cay nhi phan p static void Insert(ref Node Root, int X) { if (Root == null) { Root = new Node(); Root.value = X; Root.left = null; Root.right = null; } else { if (Root.value < X) Insert(ref Root.right, X); else if (Root.value > X) Insert(ref Root.left, X); } } static void Search(Node Root, int x, ref Node p) { //Nu tm thy th p ch ti nt c trng kho bng x, ngc li p = null} p = Root; if (p != null) if (x < p.value) Search(Root.left, x, ref p); else if (x > p.value) Search(Root.right, x, ref p); else Console.WriteLine("Da tim thay nut co gia tri"+x); else Console.WriteLine("Khong tim thay nut co gia tri" + x); } //Phuong thuc duyet cay nhi phan tho thu tu giua static void LNR(Node Root) { if (Root != null)

Bi tp thc hnh CTDL & GT

Trang 84

{ LNR(Root.left); Console.Write("{0} -> ", Root.value); LNR(Root.right); } } //Dem so nut cua cay nhi phan, luu trong bien dem static void CountNode(Node Root,ref int dem) { if (Root != null) { dem++; CountNode(Root.left, ref dem); CountNode(Root.right, ref dem); } } static int Count1Node(Node Root) { if (Root == null) return 0; else if ((Root.left == null) && (Root.right == null)) return 0; else if (Root.left == null) return 1 + Count1Node(Root.right); else if (Root.right == null) return 1 + Count1Node(Root.left); else return Count1Node(Root.left) + Count1Node(Root.right); } static int Count2Node(Node Root) { if (Root == null) return 0; else if ((Root.left == null) && (Root.right == null)) return 0; else if (Root.left == null) return Count2Node(Root.right); else if (Root.right == null) return Count2Node(Root.left); else return 1 + Count2Node(Root.left) + Count2Node(Root.right); } static int CountLeaf(Node Root) { if (Root == null) return 0; else if ((Root.left == null) && (Root.right == null)) return 1;

Bi tp thc hnh CTDL & GT

Trang 85

else return CountLeaf(Root.left) + CountLeaf(Root.right); } static int max(int a, int b) { int max; if (a > b) max = a; else max = b; return max; } static int high_tree(Node Root) { if (Root == null) return 0; else return 1 + max(high_tree(Root.left), high_tree(Root.right)); } static void Main() { int[] A = new int[] { 6, 13, 25, 14, 51, 42, 12, 31, 56, 67, 34 }; //Lan luot them cac phan tu cua mang A vao cay nhi phan thoa man dieu kien la cay nhi phan tim kiem for (int i = 0; i < A.Length; i++) Insert(ref Root, A[i]); //In ra cay nhi phan bang cach duyet theo thu tu giua LNR(Root); Console.WriteLine(); Node p = null; Search(Root, 56, ref p); //Dem so luong nut tren cay nhi phan int dem = 0; CountNode(Root, ref dem); Console.Write("\nSo nut tren cay nhi phan {0}", dem); Console.Write("\nSo node co mot con: {0}", Count1Node(Root)); Console.Write("\nSo node co hai con: {0}", Count2Node(Root)); Console.Write("\nSo la: {0}", CountLeaf(Root)); Console.Write("\nChieu cao: {0}", high_tree(Root)); Console.ReadKey(); } } Cu 3: Vit chng trnh ci t cy biu thc vi cc yu cu sau: a) To cy biu thc b) Tnh gi tr ca cy biu thc c) Hin th gi tr cc node theo th t sau Gi

Bi tp thc hnh CTDL & GT

Trang 86

Thut ton ny yu cu s dng 2 stack: - OperatorStack: Cha cc ton t - NodeStack: Cha cc node to nn cu trc cy (node gc ca cc cy con c xy dng t di ln) Cc bc tin hnh thut ton To mt phng thc ph CreateSubTree() c nhim v to mt cy biu thc gm 3 node. Node gc l ton t Pop ra t OperatorStack, hai node l l ton hng Pop t NodeStack. Cui cng a node gc vo li NodeStack. Lp qua tng token trong biu thc infix - Nu l ton hng: Push vo NodeStack - Nu l du m ngoc (: Push vo OperatorStack - Nu l du ng ngoc ): + Lp cho n khi ly c du m ngoc ( trong OperatorStack, mi ln lp gi phng thc CreateSubTree(). + Pop du m ngoc ra khi OperatorStack. - Nu l ton t: + Lp cho n khi OperatorStack rng hoc u tin ca ton t nh OperatorStack nh hn u tin ca ton t hin ti. Mi ln lp gi phng thc CreateSubTree() + Push ton t vo OperatorStack. Khi ht vng lp, nu OperatorStack cn phn t, gi phng thc CreateSubTree() cho n khi OperatorStack rng. Node cui cng nm trong NodeStack l node gc ca cy. V d chuyn biu thc infix sau thnh cy biu thc: (a+b)*c-d/e Token ( a + b ) OperatorStack ( ( (+ (+ {Empty} NodeStack {Empty} a a ab + Description Push ( vo OperatorStack Push a vo NodeStack Push + vo OperatorStack Push b vo NodeStack Cho a, b ra thnh node con ca + Push + vo NodeStack Push * vo OperatorStack Push c vo NodeStack Cho +, c thnh node con ca * Push * vo node Stack Push - vo OperatorStack Push d vo NodeStack

* c -

* * -

+ +c *

*d

Bi tp thc hnh CTDL & GT

Trang 87

/ e

-/ -/ -/ -

*d *de *de */

Push / vo OperatorStack Push e vo NodeStack Kt thc vng lp Cho d v e thnh node con ca / Push / vo NodeStack Cho * v / thnh node con ca - Push - vo NodeStack

{Empty}

Li gii mu

using System; using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; class BinaryTreeNode { public BinaryTreeNode LeftChild; public BinaryTreeNode RightChild; public string Value; public bool IsLeaf { get { return this.LeftChild == null && this.RightChild == null; } } public BinaryTreeNode(string value) { Value = value; } } class Expression { static string Infix2Prefix(string infix) { List<string> prefix = new List<string>(); Stack<string> stack = new Stack<string>(); for(int i=0;i<infix.Length;++i) { if (IsOperator(infix[i])) prefix.Add(infix[i].ToString()); else if (infix[i] == ')')

Bi tp thc hnh CTDL & GT

Trang 88

stack.Push(infix[i].ToString()); else if (infix[i] == '(') { string x = stack.Pop(); while (x != ")") { prefix.Add(x); x = stack.Pop(); } } else { while (stack.Count > 0 && Priority(infix[i].ToString()) < Priority(stack.Peek())) prefix.Add(stack.Pop()); stack.Push(infix[i].ToString()); } } while (stack.Count > 0) prefix.Add(stack.Pop()); StringBuilder str = new StringBuilder(); for (int i = prefix.Count - 1; i >= 0; i--) { str.Append(prefix[i]); } return str.ToString(); } static double EvaluateExpressionTree(BinaryTreeNode node) { double t = 0; if (node.IsLeaf) t = double.Parse(node.Value); else { double x = EvaluateExpressionTree(node.LeftChild); double y = EvaluateExpressionTree(node.RightChild); switch (node.Value) { case "+": t = x + y; break; case "-": t = x - y; break; case "*": t = x * y; break; case "/": t = x / y; break; case "%": t = x % y; break;

Bi tp thc hnh CTDL & GT

Trang 89

} } return t; } static void CreateSubTree(Stack<BinaryTreeNode> opStack, Stack<BinaryTreeNode> nodeStack) { BinaryTreeNode node = opStack.Pop(); node.RightChild = nodeStack.Pop(); node.LeftChild = nodeStack.Pop(); nodeStack.Push(node); } static BinaryTreeNode Infix2ExpressionTree(string infixExpression) { List<string> prefix = new List<string>(); Stack<BinaryTreeNode> operatorStack = new Stack<BinaryTreeNode>(); Stack<BinaryTreeNode> nodeStack = new Stack<BinaryTreeNode>(); for (int i = 0; i < infixExpression.Length; ++i) { if (IsOperator(infixExpression[i])) { while (operatorStack.Count > 0 && Priority(operatorStack.Peek().Value) >= Priority(infixExpression[i].ToString())) CreateSubTree(operatorStack, nodeStack); operatorStack.Push(new BinaryTreeNode(infixExpression[i].ToString())); } else if (infixExpression[i] == '(') operatorStack.Push(new BinaryTreeNode(infixExpression[i].ToString())); else if (infixExpression[i] == ')') { while (operatorStack.Peek().Value != "(") CreateSubTree(operatorStack, nodeStack); operatorStack.Pop(); } else nodeStack.Push(new BinaryTreeNode(infixExpression[i].ToString())); } while (operatorStack.Count > 0) CreateSubTree(operatorStack, nodeStack); return nodeStack.Peek(); } static bool IsOperator(char str) { return str == '+' || str == '-' || str == '*' || str == '/';

Bi tp thc hnh CTDL & GT

Trang 90

} static bool IsOperand(char str) { return str >= '0' && str <= '9'; } public static int Priority(string op) { if (op == "*" || op == "/") return 2; if (op == "+" || op == "-") return 1; return 0; } static void LRN(BinaryTreeNode p) //phuong thuc duyet cay nhi phan { if (p != null) { LRN (p.LeftChild); LRN (p.RightChild); Console.Write("{0} -> ", p.Value); } } static void Main() { string x = "(5-3)*(3+1)/2"; BinaryTreeNode s = Expression.Infix2ExpressionTree(x); Console.WriteLine(Expression.EvaluateExpressionTree(s)); Expression. LRN (s); Console.ReadKey(); } }

Bi tp t gii Bi 1: Vit chng trnh ci t mt cy biu thc, tnh tr ca cy biu thc ny. Yu cu chi tit: 1. Vit phn khai bo ci t mt cy biu thc. 2. Vit th tc khi to cy rng. 3. Vit hm kim tra cy rng.

Bi tp thc hnh CTDL & GT

Trang 91

4. Thit k hm to cy t cy con tri L, cy con phi R v nhn ca nt n, bng cch xem y l c nt gc l n v 2 cy con tng ng l L (con tri) v R (con phi). 5. Vit cc th tc duyt cy: Duyt tin t, trung t, hu t . Duyt theo mc. 6. Vit hm xc nh s nt trong cy. 7. Thit k hm xc nh chiu cao ca cy. 8. Vit hm tnh gi tr ca cy biu thc. 9. Vit hm xc nh mc ca mt nt trong cy. Gi : 1.Trc tin ta khai bo 1 lp node gm 1 thnh phn lu tr thng tin, 2 thnh phn cha a ch bn tri v bn phi v khai bo 1 node root(gc)mi. class node { public int x; public node left, right; } 2. Cy rng khi khng c gc ngha l root=null. Cy con tri rng root.left=null, cy con phi rng root.next=null. 3.Tr v gi tr root=null. 4.-i vi php ton hai ngi(chng hn +.-,*,/) c biu din gc cha ton t, cy con tri biu din ton hng bn tri, cy con phi biu din ton hng bn phi. -i vi php ton 1 ngi nh ph nh hoc ly gi tr tuyt i,hoc cc hm chun nh exp() hoc cos()th cy con tri rng. -Cn vi cc php ton 1 ton hng nh php ly o hm () hoc hm giai tha ()! Th cy con phi rng. 5. -Duyt tin t: thm gc->duyt cy con tri theo th t trc->duyt cy con phi theo th t trc. -Duyt trung t: duyt cy con tri theo th t gia->thm gc->duyt cy con phi theo th t gia

Bi tp thc hnh CTDL & GT

Trang 92

-Duyt hu t: duyt cy con tri theo th t sau->duyt cy con phi theo th t sau->thm gc. -Duyt theo mc: ta s dng kiu hng i queue duyt. Nu cy khng rng th thc hin a cy con vo queue, trong khi queue cha rng th in ra gi tr trong queue, nu cy con tri khng rng th duyt mc cy bn tri,ngc li duyt mc cy bn phi. 6. Duyt cho n khi cy rng s nt trong cy=gc+cy con bn tri+cy con bn phi. 7.Chiu cao ca cy c xc nh bng cng thc h=[log2(n+1)], trong n l s nt trn cy . 8.u tin ta phi duyt cy theo th t trc chuyn biu thc v dng tin t hoc duyt theo th t sau chuyn biu thc v dng hu t. Sau ta thc hin tnh ton gi tr biu thc ging nh bi tnh ton biu thc phn stack. Bi 2: Vit chng trnh ci t mt cy tm kim nh phn (nhn ca mi nt c nhp t bn phm) . Yu cu chi tit: 1. Vit phn khai bo ci t mt cy tm kim nh phn. 2. Vit th tc khi to cy rng. 3. Vit hm kim tra cy rng. 4. Vit th tc xen mt nt vo cy tm kim nh phn. 5. Vit th tc xa mt nt trong cy tm kim nh phn. 6. Vit th tc nhp mt cy tm kim nh phn vi nhn ca cc nt ca cy c nhp vo t bn phm. 7. Vit cc th tc duyt cy: Duyt tin t, trung t, hu t . Duyt theo mc. 8. Vit hm xc nh s nt trong cy. 9. Thit k hm xc nh chiu cao ca cy. 10. Vit hm xc nh mc ca mt nt trong cy. Gi :

Bi tp thc hnh CTDL & GT

Trang 93

1.Trc tin ta khai bo 1 lp node gm 1 thnh phn lu tr thng tin ,2 thnh phn cha a ch bn tri v bn phi v khai bo 1 node root (gc)mi. class node { public int info; public node left, right; } 2.Cy rng khi khng c gc ngha l root=null.cy con tri rng root.left=null, cy con phi rng root.next=null. 3.Tr v gi tr root=null. 4.Ta c th xen mt nt vo cy nh phn vo nhiu ch khc nhau nhng thm vo mt nt l l thun tin nht. Trc tin ta to 1 node p mi v gn p.info=x(x l gi tr ca nt mun thm vo). Sau kim tra nu gc rng th gn lun nt mi l gc, cy con tri,phi ca gc bng null, ngc li nu x m ln hn gi tr ca gc th ta them vo cy con bn phi, nh hn them vo cy con bn tri. 5.Xa nt trn cy c th xy ra 3 trng hp: -x l nt l -x l nt na l(ch c mt con tri hoc con phi) -x c hai con(trng hp tng qut) Nu nt mun xa khng c cy con tri v cy con phi th ta ch cn xa nt l xong, ngc li nu c 1 cy con tri hoc cy con phi th th cho cy con tri hoc cy con phi mc ni vi cy cha ca nt . Nu nt mun xa c c 2 cy con phi v cy con tri th ta so snh cy con phi v cy con tri ca nt vi cy cha nu cy con tri nh hn cy cha ca nt cn xa th cho chng mc ni vi nhau, ngc li ta cho cy con phi mc ni vi cy cha ca nt cn xa. 6.Nu cy rng th gn lun gi tr nhp vo bng gc, ngc li so snh vi gc nu nh hn th gn bng cy con tri ca gc, ngc li gn bng cy con phi ca gc,c nh vy khi no kt thc vic nhp vo th thi. 7. Duyt tin t: thm gc->duyt cy con tri theo th t trc->duyt cy con phi theo th t trc.

Bi tp thc hnh CTDL & GT

Trang 94

-Duyt trung t: duyt cy con tri theo th t gia->thm gc->duyt cy con phi theo th t gia -Duyt hu t: duyt cy con tri theo th t sau->duyt cy con phi theo th t sau->thm gc. -Duyt theo mc: ta s dng kiu hng i queue duyt. Nu cy khng rng th thc hin a cy vo queue,trong khi queue cha rng th in ra gi tr trong queue,nu cy con tri khng rng th duyt mc cy bn tri,ngc li duyt mc cy bn phi. 8. Duyt cho n khi cy rng s nt trong cy=gc+cy con bn tri+cy con bn phi. 9. Chiu cao ca cy c xc nh bng cng thc h=[log2(n+1)],trong n l s nt trn cy . Bi 3: Vit chng trnh ci t mt cy tng qut ( dng mng hay con tr ). Yu cu chi tit: 1. Vit phn khai bo ci t mt cy. 2. Vit th tc khi to cy rng. 3. Vit hm kim tra cy rng. 4. Vit th tc nhp mt cy vi nhn ca cc nt ca cy c nhp t bn phm. 5. Vit cc th tc duyt cy: Duyt tin t. Duyt trung t. Duyt hu t. Duyt theo mc. 6. Vit hm xc nh s nt trong cy. 7. Thit k hm xc nh chiu cao ca cy. 8. Vit hm xc nh mc ca mt nt trong cy (nt u tin c nhn cn xc nh). 9. Thit lp mt hm kim tra s hin hu ca mt nt no trong cy. 10. Thit lp hm xc nh nhn ca nt con tri nht ca mt nt vi nhn ca nt c nhp t bn phm. 11. Thit lp hm xc nh nhn ca nt anh rut phi ca mt nt vi nhn ca nt c nhp t bn phm.

Bi tp thc hnh CTDL & GT

Trang 95

12. Thit lp hm xc nh nhn ca nt cha ca mt nt vi nhn ca nt vi nhn ca nt c nhp t bn phm. Gi : 1.Khai bo mt lp node gm thnh phn lu tr kiu gi tr ca tng nt,1 trng lu tr a ch ca cc nt con. Class node { Public int x; Public node con1; Public node con2; . } 2.Cy khai bo rng khi nt gc c khai bo rng 3.Hm kim tra cy rng tr gi tr True khi nt gc l rng (root=null) 4.S dng quy .Thc hin kim tra cy + Nu rng (root=null) gn gc c gi tr va nhp v cc nt con tr vo null +Ngc li,Kim tra cy con th nht (root.con1) nu rng gn cho gi tr va nhp v cc nt con ca n tr vo null,nu khng rng thc hin kim tra cc nt k tip vic gn thc hin tng t 5.Xy dng mt hm duyt hin th gi tr ca mt nt. Trong cc thut ton duyt cy ta s dng hm quy *Duyt tin t : gi hm duyt hin th nt gc ,ri duyt quy ln lt cc nt con ca n *Duyt trung t : *Duyt hu t: gi hm duyt quy tng nt con ca nt gc v gi hm duyt hin th nt gc *Duyt mc:khi to mt QUEUE ,duyt qua tng nt ca cy,ti mi nt thc hin a tt c cc nt con ca n vo Queue v hin ra cc phn t trong Queue.Tip n thc hin gi hm quy Duyt mc ca cc cy con tip theo 6.Duyt qua cc nt trong cy ,qua mi nt ta thc hin tng gi tr ca mt bin m nt vi khi to bng 0 7.hm xc nh chiu cao ca cy tr gi tr loga c s 2 ca( s nt +1) 8.

Bi tp thc hnh CTDL & GT

Trang 96

BI THC HNH 10.


* Yu cu:

Kim tra thc hnh

- Ci t c cc thut ton trn cc kiu d liu - C kh nng p dng cc thut ton lp trnh gii cc bi ton theo yu cu

You might also like