BÀI TẬP LỚN Cấu Trúc Dữ Liệu Và Giải Thuật

20 432 0
BÀI TẬP LỚN Cấu Trúc Dữ Liệu Và Giải Thuật

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

DANH SÁCH LIÊN KẾT VÒNG Danhsáchliênkếtvònglàcấutrúcdữliệugồm 1 tậpcácphầntử , trongđómỗiphầntửlà 1 phầncӫa 1 nútcóchӭamộtliênkếttớinútkếtiếp. Nói “mỗiphầntửlà 1 phầncӫa 1 nút” bởivìmỗinútngoàiviệcchӭathông tin vềphầntửcònchӭathông tin vềliênkếttớinúttiếptheotrongdanhsách. Trongdanhsáchliênkếtđơn, nútcuốicùngcӫadanhsáchsẽliênkếttrỏđếnmộtgiátrị NULL chobiếtdanhsáchđãkếtthúc. Nhưngở danhsáchliênkếtvòngnàykhôngtrỏđến NULL màtrỏvềnútđầutiên. Ưuđiểmcủadanhsáchliênkếtvònglàbấtkỳnútnàocũngcóthểcoilàđầucӫadanhsách.Cónghĩalàtừmộtnútbấtkỳ, ta cóthểtiếnhànhduyệt qua toànbộcácphầntửcӫadanhsáchmàkhôngcầntrởvềnútđầutiênnhưtrongdanhsáchliênkếtthôngthường.Tuynhiên, nhѭợcđiểmcӫadanhsáchnàylàcóthểkhôngbiếtkhinàothìđãduyệt qua toànbộphầntửcủadanhsách.Điềunàydẫnđếnmộtquátrìnhduyệtvôhạn, khôngcóđiểmdừng.Đểkhắcphụcnhượcđiểmnày, trongquátrìnhduyệtluônphảikiểmtraxemđãtrởvềnút ban đầu hay chưa.Việckiểmtranàycóthểdựatrêngiátrịphầntửhoặcbằngcáchthêmvàomộtnútđặcbiệt.Quyước: Dùng con trỏ Last quảnlýdanhsáchliênkếtvòng, con trỏnàychỉtớiphầntửcuốicùngtrongdanhsách. Nếudanhsáchrỗng: Last = NULL Nếudanhsáchcó 1 phầntử: Last = Last>Next Khaibáo: Struct node { Int Item; Struct node Next; }; Sauđây, chúng ta sẽxétviệcsửdụngdanhsáchliênkếtvòngđểgiảiquyếtbàitoánnhưsau: Cho mộtdanhsáchlưutrữcácsốnguyên.Viếtchươngtrìnhtạomột Menu thựchiệncáccôngviệcsau (Sửdụngdanhsáchliênkếtvòng): 1. Khởitạodanhsách, quátrìnhnhậpsẽdừnglạikhinhậpdấu “” 2. Kiểmtraxemtạivịtríthứ 5 cóphảilàsốnguyêntố hay không? Nếuđúnghãyxóabỏphầntửnày. 3. Tínhtíchcácsốchẵn, dương, chia hếtcho 5 (khôngkểsố 0). 4. Sắpxếpdanhsáchtheothứtựtăngdần. 5. Xóabỏnhữngphầntửtrùngnhautrongdanhsách (chỉgiữlạimộtphầntử). 6. Đếmsốlượngcácsốhoànhảotrongdanhsách. Cácsốhoànhảonằm ở nhữngvịtrínào? 7. Xóatấtcảcácsố 0 trongdanhsách. 8. Nhậpvàomộtsố k, đếmcácsố = k, sốlượngđếmđượclàsốchẵn hay lẻ?

BỘ GIÁO DỤC ĐÀO TẠO TRƯỜNG ĐẠI HỌC TÀI NGUYÊN MÔI TRƯỜNG HÀ NỘI KHOA: CÔNG NGHỆTHÔNG TIN BÀI TẬP LỚN Cấu Trúc Dữ Liệu Giải Thuật Giáo Viên Hướng Dẫn: CôPhíThịHảiYến Nhóm Sinh Viên Thực Hiện: Nhóm 2 LêĐìnhThành NguyễnThịYến Chu ThịThắm LưuThịNhậtLệ PhạmThịTrang NguyễnThịThùy ĐàoĐứcTrung DANH SÁCH LIÊN KẾT VÒNG Danhsáchliênkếtvònglàcấutrúcdữliệugồm tậpcácphầntử , trongđómỗiphầntửlà phầncӫa nútcóchӭamộtliênkếttớinútkếtiếp Nói “mỗiphầntửlà phầncӫa nút” bởivìmỗinútngoàiviệcchӭathông tin vềphầntửcònchӭathông tin vềliênkếttớinúttiếptheotrongdanhsách Trongdanhsáchliênkếtđơn, nútcuốicùngcӫadanhsáchsẽliênkếttrỏđếnmộtgiátrị NULL chobiếtdanhsáchđãkếtthúc Nhưngở danhsáchliênkếtvòngnàykhôngtrỏđến NULL màtrỏvềnútđầutiên Ưuđiểmcủadanhsáchliênkếtvònglàbấtkỳnútnàocũngcóthểcoilàđầucӫadan hsách.Cónghĩalàtừmộtnútbấtkỳ, ta cóthểtiếnhànhduyệt qua toànbộcácphầntửcӫadanhsáchmàkhôngcầntrởvềnútđầutiênnhưtrongdanh sáchliênkếtthôngthường.Tuynhiên, nhѭợcđiểmcӫadanhsáchnàylàcóthểkhôngbiếtkhinàothìđãduyệt qua toànbộphầntửcủadanhsách.Điềunàydẫnđếnmộtquátrìnhduyệtvôhạn, khôngcóđiểmdừng.Đểkhắcphụcnhượcđiểmnày, trongquátrìnhduyệtluônphảikiểmtraxemđãtrởvềnút ban đầu hay chưa.Việckiểmtranàycóthểdựatrêngiátrịphầntửhoặcbằngcáchthêmvàomộ tnútđặcbiệt.Quyước: Dùng trỏ Last quảnlýdanhsáchliênkếtvòng, trỏnàychỉtớiphầntửcuốicùngtrongdanhsách Nếudanhsáchrỗng: Last = NULL Nếudanhsáchcó phầntử: Last = Last->Next Khaibáo: Struct node { Int Item; Struct node *Next; }; Sauđây, sẽxétviệcsửdụngdanhsáchliênkếtvòngđểgiảiquyếtbàitoánnhưsau: Cho mộtdanhsáchlưutrữcácsốnguyên.Viếtchươngtrìnhtạomột Menu thựchiệncáccôngviệcsau (Sửdụngdanhsáchliênkếtvòng): Khởitạodanhsách, quátrìnhnhậpsẽdừnglạikhinhậpdấu “#” Kiểmtraxemtạivịtríthứ cóphảilàsốnguyêntố hay không? Nếuđúnghãyxóabỏphầntửnày Tínhtíchcácsốchẵn, dương, chia hếtcho (khôngkểsố 0) Sắpxếpdanhsáchtheothứtựtăngdần Xóabỏnhữngphầntửtrùngnhautrongdanhsách (chỉgiữlạimộtphầntử) Đếmsốlượngcácsốhoànhảotrongdanhsách Cácsốhoànhảonằm nhữngvịtrínào? Xóatấtcảcácsố trongdanhsách Nhậpvàomộtsố k, đếmcácsố = k, sốlượngđếmđượclàsốchẵn hay lẻ? Tínhtrungbìnhcộngcácsốlẻdѭơngtrongdanhsách ChươngTrình #include #include using namespace std; struct Node{ int data; Node *next; }; struct List{ Node *head; Node *tail; }; voidInit(List &l){ // khoitao l.head = l.tail = NULL; } Node *creatNode(int x ){ Node *p = new Node; p->next = NULL; p->data = x; return p; } boolisEmpty(List l ){ if(l.head == NULL ) return true; return false; } intlen(List l){ int count=0; Node *p=l.head; do{ count+=1; p=p->next; }while(p!=l.head); return count; } voidaddHead(List &l, int x ){ Node *p = creatNode(x); if(isEmpty(l)) l.head = l.tail = p; else{ p->next = l.head; // tro next cua p trotoidia chi cua node head(ban dau) l.head = p; // cap nhat node head(lucsau ) } l.tail->next = l.head; // khepvong don } voidaddTail(List &l, int x ){ Node *p = creatNode(x); if(isEmpty(l)) addHead(l,x); else{ l.tail->next = p; l.tail = p; } l.tail->next = l.head; // khepvong don } Node *search(List l, int k ){ Node *p = l.head; { if( p->data == k ) return p; else p = p->next; } while( p != l.head ); return NULL; } voidaddMid(List &l, int x, int k ){ // chen node co data = x vaosau node co data = k; Node *p = search(l,k); if(p!=NULL){ Node *q= creatNode(x); Node *r = p->next; p->next = q; q->next = r; } elsecoutnext = l.head; } elsel.head = NULL; } else return; } voiddelTail(List &l ){ if(!isEmpty(l)){ if(l.head != l.tail ){ Node *p = l.head; Node *q = new Node; while(p->next != l.tail ) p = p->next; // tim node ngaytruoc tail q = p; // gan node cho node q p = p->next; // p chinh la node tail can xoa l.tail = q; // cap nhatl.tail l.tail->next = l.head; delete p; } else l.head = NULL; } else return; } voiddelAtK(List &l, int index ){ if(index == 1) delHead(l); else if( index == len(l) ) delTail(l); else{ if(!isEmpty(l)){ Node *p = l.head; Node *q = new Node; for(int i=1;inext; } q->next = p->next; // cho node next cua node k-1 trotoi node k+1; delete p; } } } // xuat thong tin man hinh voidxuat(List l ){ if(l.head){ cout

Ngày đăng: 16/07/2017, 22:41

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan