chuong 4 danh sach lien ket

4
Chương 4: DANH SÁCH LIÊN KT 4.1 Danh sách liên kết đơn Khai báo struct Node { int key; Node *next; }; typedef Node *pNode; struct LinkList { pNode head,tail; }; Kim tra danh sách rng int isEmpty(LinkList l) { return (l.head==NULL) } Khi to danh sách void Initial(LinkList &l) { l.head = l.tail = NULL; } Thêm 1 nút vào đầu danh sách void InsertHead(LinkList &l, int k) { pNode p = new Node; if (p==NULL) return; p -> key = k; p -> next = NULL; p -> next = l.head; l.head = p; if (l.tail == NULL) l.tail = p; } Thêm 1 nút vào cui danh sách void InsertTail(LinkList &l,int k) { pNode p=new Node; if (!p) return; p->key=k; p->next=NULL; if (l.tail==NULL) l.tail=p; else { l.tail->next=p; l.tail=p; } if (l.head==NULL) l.head=p; } In danh sách ra màn hình void Print(LinkList l) { if (isEmpty(l)) { cout<<"The list is empty"<<endl; return; } pNode p=l.head; while(p) { cout<<p->key<<"->"; p=p->next; } cout<<"NULL"<<endl; } Xóa 1 nút đầu danh sách void DeleteHead(LinkList &l) { if(isEmpty(l)) return; pNode p=l.head; if(l.head==l.tail) { delete p; l.head=l.tail=NULL; return; } l.head=l.head->next; p->next=NULL; delete p; } Xóa 1 nút cui danh sách void DeleteTail(LinkList &l) { if(isEmpty(l)) return; pNode p=l.head,q=l.tail; if(l.head==l.tail) { delete p; l.head=l.tail=NULL; return; } while(p->next!=l.tail) p=p->next; p->next=NULL; l.tail=p; delete q; } Hy toàn bdanh sách void Delete(LinkList &l) { if(l.head) delete l.head; l.head=l.tail=NULL; }

Upload: hoang-duc

Post on 15-Jan-2015

181 views

Category:

Business


2 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Chuong 4   danh sach lien ket

Chương 4: DANH SÁCH LIÊN KẾT 4.1 Danh sách liên kết đơn

Khai báo struct Node { int key; Node *next; }; typedef Node *pNode; struct LinkList { pNode head,tail; }; Kiểm tra danh sách rỗng int isEmpty(LinkList l) { return (l.head==NULL) } Khởi tạo danh sách void Initial(LinkList &l) { l.head = l.tail = NULL; } Thêm 1 nút vào đầu danh sách void InsertHead(LinkList &l, int k) { pNode p = new Node; if (p==NULL) return; p -> key = k; p -> next = NULL; p -> next = l.head; l.head = p; if (l.tail == NULL) l.tail = p; } Thêm 1 nút vào cuối danh sách void InsertTail(LinkList &l,int k) { pNode p=new Node; if (!p) return;

p->key=k; p->next=NULL; if (l.tail==NULL) l.tail=p; else { l.tail->next=p; l.tail=p; } if (l.head==NULL) l.head=p; }

In danh sách ra màn hình void Print(LinkList l) { if (isEmpty(l)) { cout<<"The list is empty"<<endl; return; } pNode p=l.head; while(p) { cout<<p->key<<"->"; p=p->next; } cout<<"NULL"<<endl; } Xóa 1 nút ở đầu danh sách void DeleteHead(LinkList &l) { if(isEmpty(l)) return; pNode p=l.head; if(l.head==l.tail) { delete p; l.head=l.tail=NULL; return; } l.head=l.head->next; p->next=NULL; delete p; } Xóa 1 nút ở cuối danh sách void DeleteTail(LinkList &l) { if(isEmpty(l)) return; pNode p=l.head,q=l.tail; if(l.head==l.tail) { delete p; l.head=l.tail=NULL; return; } while(p->next!=l.tail) p=p->next; p->next=NULL; l.tail=p; delete q; } Hủy toàn bộ danh sách void Delete(LinkList &l) { if(l.head) delete l.head; l.head=l.tail=NULL; }

Page 2: Chuong 4   danh sach lien ket

Tìm kiếm tuần tự int LinearSearch(LinkList l,int k) { pNode p=l.head; if (isEmpty(l)) return 0; while (p) { if (p->key==k) return k; p=p->next; } return 0; } Xóa 1 nút có khóa k void DeleteK(LinkList &l, int k) { pNode p=l.head,q=NULL; while((p!=NULL)&&(p->key!=k)) { q=p; p=p->next; } if(p==NULL) return; if(q!=NULL) { if(p==l.tail) { l.tail=q; l.tail->next=NULL; } q->next=p->next; delete p; } else DeleteHead(l); } Thêm một phần tử khóa k vào sau một phần tử cho trước void InsertAfter(LinkList &l,pNode q,int k) { if(isEmpty(l)) { InsertHead(l,k); return; } if(q==NULL) return; if(q==l.tail) { InsertTail(l,k); return; } pNode p=new Node; if (!p) return; p->next=q->next; p->key=k; q->next=p; }

Sắp xếp chọn trực tiếp (Selection Sort) (hoán vị nội dung phần dữ liệu – key) void SelectionSort(LinkList &l) { pNode min; for (pNode p=l.head; p->next!=NULL; p=p->next) { min = p; for(pNode q = p->next; q; q=q->next) if (q->key < min->key) min = q; if (min != p) swap(min->key,p->key); } } (thay đổi mối liên kết) void ListSelectionSort(LinkList &l) { pNode i,j,min,minpre=NULL; LinkList lresult; Initial(lresult); while(l.head!=NULL) { min=l.head; minpre=NULL; for(j=min, i=min->next; i!=NULL; j=i, i=i->next) if(i->key < min->key) { min=i; minpre=j; } if(minpre==NULL) { l.head=l.head->next; if(min==l.tail) l.tail=NULL; } else { if(min==l.tail) l.tail=minpre; minpre->next=min->next; } min->next=NULL; InsertTail(lresult,min->key); } l=lresult; } Sắp xếp chèn trực tiếp (InsertionSort) void InsertionSort(LinkList &l) { pNode pos; pNode x = new Node; for(pNode p=l.head->next;p;p=p->next) { x->key = p->key; pos=p; while(pos!=l.head) { pNode q=l.head;

Page 3: Chuong 4   danh sach lien ket

while (q->next!=pos) q=q->next; if (q->key > x->key) { pos->key = q->key; pNode r=l.head; while(r->next!=pos) r=r->next; pos=r; } else break; } pos->key = x->key; } } Sắp xếp nổi bọt (Bubble Sort) void BubbleSort(LinkList &l) { pNode p,q; for (p = l.head ; p->next!=NULL ; p=p->next) for (q=p->next; q->next!=NULL ; q=q->next) if(q->key > q->next->key) swap(q->key, q->next->key);

Page 4: Chuong 4   danh sach lien ket