Cấu trúc dữ liệu 1 nút typedef struct tagDnode { Data Info; struct tagDnode *pPre; struct tagDnode *pNext; }DNode; Cấu trúc List kép Typedef struct tagDList { DNode *pHead; DNode *pTail; }DList; void CreateDList(DList &l) { l.DHead=NULL; l.DTail=NULL; } Tạo 1 Nút Có Thành Phần Dữ Liệu = X DNode *CreateDNode(int x) { DNode *tam; tam=new DNode; if(tam==NULL) { printf("khong con du bo nho"); exit(1); } else { tam->Info=x; tam->pNext=NULL; tam->pPre=NULL; return tam; } } Cài Đặt Thêm 1 Nút Vào Đầu Danh Sách void AddFirst(DList &l, DNode *tam) { if(l.pHead==NULL)//xau rong { l.pHead=tam; l.pTail=l.pHead; } else { tam->pNext=l.pHead; l.pHead->pPre=tam; l.pHead=tam; } } Cài Đặt Thêm 1 Nút Vào Cuối Danh Sách void AddEnd(DList &l,DNode *tam) { if(l.pHead==NULL) { l.pHead=tam; l.pTail=l.pHead; } else { tam->pPre=l.pTail; l.pTail->pNext=tam; tam=l.pTail; } } Cài Đặt Thêm 1 Nút Vào Sau Nút Q void AddLastQ(DList &l,DNode *tam, DNode *q) { DNode *p; p=q->pNext; if(q!=NULL)//them vao duoc { tam->pNext=p; tam->pPre=q; q->pNext=tam; if(p!=NULL) p->pPre=tam; if(q==l.pTail) //them vao sau danh sach lien ket. l.pTail=tam; } else AddFirst(l,tam); } Cài Đặt Thêm 1 Nút Vào Trước Nút Q void AddBeforeQ(DList &l,DNode *tam,DNode *q) { DNode *p; p=q->pPre; if(q!=NULL) { tam->pNext=q; q->pPre=tam; tam->pPre=p; if(p!=NULL) p->pNext=tam; if(q==l.pHead) l.pHead = tam; } else AddEnd(l,tam); } Xoá Phần Tử Đầu Danh Sách void DeleteFirst(DList &l) { DNode *p; if(l.pHead!=NULL) { p=l.pHead; l.pHead=l.pHead->pNext; l.pHead->pPre=NULL; delete p; if(l.pHead==NULL) l.pTail=NULL; } } Xoá 1 Phần Tử Cuối Danh Sách void DeleteEnd(DList &l ) { DNode *p; if(l.pHead!=NULL) //tuc xau co hon mot phan tu { p=l.pTail; l.pTail=l.pTail->Pre; l.pTail->pNext=NULL; delete p; if(l.pTail==NULL) l.pHead=NULL; } } Hủy 1 Nút Sau Nút Q void DeleteLastQ(DList &l,DNode *q) { DNode *p;//luu node dung sau node q if(q!=NULL) { p=q->pNext; if(p!=NULL) { q->pNext=p->pNext; if(p==l.pTail)//xoa dung nu't cuoi l.pTail=q; else //Nut xoa khong phai nut cuoi p->pNext->pPre=q; delete p; } } else DeleteFirst(l); } Huỷ 1 Nút Đứng Trước Nút Q void DeleteBeforeQ(DList &l,DNode *q) { DNode *p; if(q!=NULL) //tuc ton tai node q { p=q->pPre; if(p!=NULL) { q->pPre=p->pPre; if(p==l.pHead)//p la Node dau cua danh sach l.pHead=q; else //p khong phai la node dau p->pPre->pNext=q; delete p; } } else DeleteEnd(l); } Xoá 1 Phần Tử Có Khoá = X int DeleteX(DList &l,int x) { DNode *p; DNode *q; q=NULL; p=l.pHead; while(p!=NULL) { if(p->Info==x) break; q=p;//q la Node co truong Info = x p=p->pNext; } if(q==NULL) return 0;//khong tim thay Node nao co truong Info =x if(q!=NULL) DeleteLastQ(l,q); else DeleteFirst(l); return 1; } Sắp Xếp void DoiChoTrucTiep(DList &l) { DNode *p,*q; p=l.pHead; while(p!=l.pTail) { q=p->pNext; while(q!=NULL) { if(p->Info>q->Info) HV(p,q); q=q->pNext; } p=p->pNext; }}
Thursday, April 30, 2015
danh sách liên kết kép
Cấu Trúc Dữ Liệu
Related Posts:
con trỏ và cấu trúc dữ liệu động vấn đề về con trỏ và cấu trúc dữ liệu động trong lập trình c/c++. biến tĩnh, biến động, khai báo vùng nhớ,.. Biến Tĩnh Được khai báo tường minh, có tên gọi Tồn tại trong phạm vi khai báo Được cấp phát trong stack Kích th… Read More
hàm xóa node trong cây nhị phân tìm kiếmhàm xóa node trong cây nhị phân tìm kiếm void thaythe(tree &t,node *p) { if(t->left) thaythe(t->left,p); //nếu nhánh bên trái còn tức là khác NULL thì tiếp tực nhảy đến nhánh bến trái //cho đến khi nào n… Read More
thuật toán sắp xếp shaker sort/*thuật toán sắp xếp shaker sort Trong mỗi lần sắp xếp, duyệt mảng theo 2 lượt từ 2 phía khác nhau: Lượt đi: đẩy phần tử nhỏ về đầu mảng. Lượt về: đẩy phần tử lớn về cuối mảng. Ghi nhận lại những đoạn đã sắp xếp nhằm tiết kiệ… Read More
đề thi và đáp án môn cấu trúc dữ liệu và giải thuậtđề thi và đáp án môn CTDL & GT cấu trúc dữ liệu và giải thuật , lập trình c/c++ 1. tạo 2 danh sách liên kết đơn l1,l2 với giá trị của các node trong danh sách là số nguyên.việc nhập mỗi danh sách kêt thúc khi nhập vào số … Read More
thuật toán bubble sort/*thuật toán bubble sort Ý tưởng: Xuất phát từ cuối dãy, đổi chỗ các cặp phần tử kế cận để đưa phần tử nhỏ hơn trong cặp phần tử đó về vị trí đúng đầu dãy hiện hành, sau đó sẽ không xét đến nó ở bước tiếp theo, do vậy ở lần x… Read More