66
Chương 3.1. Danh sách liên kết đơn Trần Minh Thái Email: [email protected] Website: www.minhthai.edu.vn Cập nhật: ngày 20 tháng 10 năm 2

Ch3 - Danh Sach Lien Ket Don - P1

Embed Size (px)

DESCRIPTION

Danh sách liên kết đơn

Citation preview

PowerPoint Presentation

Chng 3.1. Danh sch lin kt nTrn Minh ThiEmail: [email protected]: www.minhthai.edu.vn Cp nht: ngy 20 thng 10 nm 20121Mc tiuNm vng khi nim v kiu d liu tnh v ngNm vng cch t chc d liu ng bng danh sch lin kt v minh ha c cc thao tc x l trn danh sch lin kt nCi t minh ha c cc thao tc ca danh sch n bng ngn ng C/ C++

2Vn kiu d liu tnh3123456781057392151? Lm sao chn thm s 6 vo v tr 5 ca mng63Vn kiu d liu tnh412345678910573921516B sung thm Gi s cn thm tip 1 phn t?4Bi tpHy ci t hm (bng ngn ng C/C++) chn mt phn t c gi tr x vo v tr vt trong mng s nguyn a, kch thc n, theo mu hm nh sau:void ChenX(int a[], int &n, int x, int vt); 5Vn kiu d liu tnh? Lm sao xa phn t 961234567810573921516Vn kiu d liu tnh71234567810573921517Bi tpHy ci t hm (bng ngn ng C/C++) xa phn t c gi tr x (nu c) trong mng s nguyn a, kch thc n (gi s gi tr cc phn t trong mng khng trng nhau), theo mu hm nh sau:void XoaX (int a[], int &n, int x); 8Vn kiu d liu tnh9 phc tp ca chn/ xa trn mng 1 chiu l O(n)i9Vn kiu d liu tnhGii quyt vn phc tp khi chn/ xa?Gii quyt vn gii hn kch thc vng nh ti a?Gii quyt vn vng nh khng lin tc?Gii quyt vn gii phng vng nh khi khng cn dng n?

10DNG CU TRC D LIU NG10Bin tnh v bin ng trong C++Bin tnh tn bin; Vd: int a; float y; char s[20];Tn ti trong phm vi khai boc cp pht vng nh trong vng d liuKch thc c nh11Bin tnh v bin ng trong C++Bin ng *tn bin; Vd: int *a; float *y;Cha a ch ca mt i tng d liuc cp pht hoc gii phng b nh ty thuc vo ngi lp trnhKch thc c th thay i12Bin tnh v bin ng trong C++Bin ngCp pht b nh: new int [kch thc]Gii phng b nh: delete vng nhV d: int *a;a=new int [10]; // Cp pht //Cc thao tc trn adelete a; // Gii phng13Danh sch lin kt (DSLK)1417263108594Cc phn t kt dnh vi nhau bng si dy lin kt1517263108594 n gin hn trong vic minh ha15c im DSLKMt dy tun t cc nt (Node)Gia hai nt c con tr lin ktCc nt khng cn phi lu tr lin tip nhau trong b nhC th m rng tu (ch gii hn bi dung lng b nh)16c im DSLKThao tc Chn/Xa khng cn phi dch chuyn phn t m ch cn thay i mi lin ktQun l phn t u tin bng con tr pHeadC th truy xut n cc phn t khc thng qua con tr lin kt17NodeCu to ca DSLK18pHeadpTailListCu to ca DSLKQun l ton b danh sch lin kt thng qua con tr u pHeadpHead khng phi l 1 nt, n ch l con tr ch n nt m thiTa cng c th qun l danh sch bng cch s dng thm con tr cui (pTail)pTail khng phi l 1 nt, n ch l con tr ch n nt m thi19Cu to ca ntTo lp bng cch cp pht b nh ngMi nt c 2 thng tin:D liu (data)Con tr lin kt n phn t k tip trong danh sch (Next pointer link)Nu khng tr n phn t no th con tr Next = NULL20Thao tc chn thm node vo DSLKKt ni li si dy lin kt theo trnh t21pHeadpTailListThao tc xa node khi DSLK22Cn xapHeadpTailListCc loi hnh DSLKDSLK n: Cc phn t kt ni vi nhau theo hng chiu i ti23Cc loi hnh DSLKDSLK i: Cc phn t kt ni vi nhau theo hng chiu i ti v v i lui24Cc loi hnh DSLKDanh sch lin kt vng: Cc phn t kt ni vi nhau theo hng chiu i ti v phn t cui cng c ng i vng tr li ti phn t u danh sch25So snh Mng v DSLKMngDanh sch lin ktKch thc c nhS phn t thay i ty Cc phn t lu tr tun t (a ch tng dn) trong b nhCc phn t lin kt vi nhau bng con trPhi dch chuyn cc phn t khi Thm/XaCh cn thay i con tr lin kt khi Thm/XaTruy xut ngu nhinTruy xut tun t26DSLK n27Cu trc 1 nodeDatapNextData : D liu ca nodepNext : Con tr n node k tippHead: Con tr n node upTail: Con tr n node cuipHeadpTailListKhai bo cu trc node28struct tNODE{ Data;struct tNODE *pNext;};typedef struct tNODE NODE;DatapNextKhai bo cu trc node lu s nguyn29struct tNODE{int Data;struct tNODE *pNext;};typedef struct tNODE NODE;20pNextKhai bo cu trc node lu thng tin SV30struct tNODE{SINHVIEN Data;struct tNODE *pNext;};typedef struct tNODE NODE;struct tSinhVien{char ID[10], hoten[30];float dtb;};typedef struct tSinhVien SINHVIEN;ID, hoten, dtbpNextKhai bo cu trc DSLK n31struct tList{NODE *pHead, *pTail;};typedef struct tList LIST;pHeadpTailListKhai bo cu trc DSLK n32struct tList{ NODE *pHead, *pTail;};typedef struct tList LIST;struct tNODE{ Data; struct tNODE *pNext;};typedef struct tNODE NODE;pHeadpTaillistCc thao tc trn DSLK nTo lp danh sch rngKim tra danh sch rngThm 1 nt vo danh schDuyt danh schXa 1 ntTm 1 phn tSp xp danh sch33Cu trc tng qut chng trnh34Khai bo th vin hm1Khai bo cu trc danh sch lin kt2Khai bo cc nguyn mu hm3 void main() {To lp danh sch rngNhp d liu vo danh schCc thao tc x l trn danh schHy danh sch }4Ci t cc hm con5To lp danh sch rngvoid CreateEmptyList(LIST &list){list.pHead = list.pTail = NULL;}35Sau khi to lp?pHead?pTailListTrc khi to lppHeadpTailListpHead v pTail cha xc nhpHead v pTail tr vo NULL (rng)35Kim tra danh sch rngbool IsEmptyList(LIST list){return ((list.pHead==NULL) && (list.pTail==NULL));}36Danh sch rngpHeadpTailListThm mt nt vo danh schTH danh sch rng37pHeadpTaillist30pNewlist.pHead = pNewlist.pTail = pNewif(IsEmptyList(list)){list.pHead = list.pTail = pNew;}37Thm mt nt vo danh schTH danh sch c phn t38pHeadpTaillist3025pNewC 2 trng hp thm pNewThm pNew vo u (AddHead)Thm pNew vo cui (AddTail)TH Thm mt nt vo u danh sch39pHeadpTaillist3025pNew12TH Thm mt nt vo u danh sch40pHeadpTaillist3025pHeadpTaillist2530V liTH Thm mt nt vo u danh sch41pHeadpTaillist253042pNew Hy v li ng kt ni theo th t thch hp khi thm pNew vo u danh sch?TH Thm mt nt vo u danh sch42pNew->pNext = list.pHeadlist.pHead = pNew12TH Thm mt nt vo u danh sch43 Hy vit hm thm phn t pNew vo u danh sch (bng ngn ng C/C++), theo mu sau: void AddHead(LIST &list, NODE *pNew)?43TH Thm mt nt vo cui danh sch44pHeadpTaillist3025pNewlist.pTail->pNext = pNewlist.pTail = pNew1122TH Thm mt nt vo cui danh sch45pHeadpTaillist3025 Hy v li ng kt ni theo th t thch hp khi thm pNew vo cui danh sch?42pNewTH Thm mt nt vo cui danh sch46 Hy vit hm thm phn t pNew vo cui danh sch (bng ngn ng C/C++), theo mu sau: void AddTail (LIST &list, NODE *pNew)?Nhp d liu vo danh sch47Nhp d liu cho nodeTo con tr nodeThm node vo danh schNhp d liu vo danh sch to node mi t d liu x c sna d liu c gi tr x vo phn DataCon tr pNext tr n NULL48DatapNewxpNew->Data = xpNew->pNext = NULLNhp d liu vo danh schVD hm to v tr v con tr node c cha gi tr nguyn x bng ngn ng C++

49NODE *CreateNode (int x){NODE *p;p = new NODE;if(p == NULL){cout