Từ 1 tới 10 trên tổng số 10 kết quả

Đề tài: [ Solved ]Danh sách liên kết

  1. #1
    Ngày gia nhập
    10 2007
    Bài viết
    1

    Thumbs down [ Solved ]Danh sách liên kết

    Bác nào chỉ em cách khai báo lớp dành cho một nút, và các thao tác chèn, xoá, sửa,xắp xếp một nút trong danh sách liên kết của lập trình hướng đối tượng với c++?
    Cảm ơn các bác trước!

  2. #2
    Ngày gia nhập
    01 2007
    Nơi ở
    Somewhere I belong
    Bài viết
    168

    DSLK đơn hay kép hay vòng hay vòng + kép hở em.
    In code we trust

  3. #3
    Ngày gia nhập
    10 2007
    Nơi ở
    Gameloft studio
    Bài viết
    175

    Sao bạn không thử đọc tài liệu của tác giả Lê Minh Hoàng, tiếng việt đó, hoặc mua sách cấu trúc dữ liệu của trường khoa học tự nhiên, nhà sách bán rất nhiều đó.
    Không biết ghi gì luôn ...

  4. #4
    Ngày gia nhập
    10 2007
    Bài viết
    1

    Danh sách liên kết đơn thôi anh iamvtn à. Nếu là thao tác trên danh sách liên kết đơn thuần trong c++ tổ chức kiểu dữ liệu cấu trúc thi khỏi phải nói. Cái chính là em gặp rắc rối trong xử lý với nó khi lập trình với class.

  5. #5
    Ngày gia nhập
    10 2007
    Nơi ở
    Gameloft studio
    Bài viết
    175

    Mình post bài này cho bạn tham khảo ha.
    ht viết theo 2 file, một file .h, một file .cpp
    file .h:
    C++ Code:
    1. #include <conio.h>
    2. #include <iostream.h>
    3. typedef int KieuDL;
    4. // kieu du lieu
    5. typedef struct Nut{
    6.         struct Nut(KieuDL dulieu){
    7.             this->dulieu=dulieu;
    8.             this->tiep=NULL;
    9.             }
    10.     KieuDL dulieu;
    11.     struct Nut *tiep;
    12.     } NUT;
    13. class DSLKD{
    14. private:
    15.         NUT *dau;
    16.         NUT *cuoi;
    17.     public:
    18.         DSLKD();
    19.         ~DSLKD();
    20.         int DSLKRong();
    21.         void themNutODau(KieuDL dulieu);
    22.         void themNutOCuoi(KieuDL dulieu);
    23.         void duyetDSLKD();
    24.         void huyDSLKD();
    25.         NUT* timNut(KieuDL dulieu);
    26.         NUT* timNutNN();
    27.         int demNut();
    28.         void themNutPSauQ(NUT *p,NUT *q);
    29.         void xoaNutP(NUT *p);
    30.         void layNutP(NUT *p);
    31.         void sapXepCTTND();
    32.         void sapXepCTTDC();
    33.         void themNutPOCuoi(NUT *p);
    34.         void sapXepQS();
    35.         void sapXepMS();
    36. };

    file .cpp
    C++ Code:
    1. #include "DSLKD.h"
    2.  
    3. DSLKD::DSLKD(){
    4.     dau=cuoi=NULL;
    5.     };
    6. int DSLKD::DSLKRong(){
    7.     return dau==NULL?1:0;
    8.     };
    9. void DSLKD::themNutODau( KieuDL duLieu){
    10.     NUT *n=new NUT(duLieu);
    11.     if (DSLKRong()==1) dau=cuoi=n;
    12.     else {
    13.         n->tiep=dau;
    14.         dau=n;
    15.         };
    16.     };
    17. void DSLKD::themNutOCuoi(KieuDL duLieu){
    18.     NUT *n=new NUT(duLieu);
    19.     if (DSLKRong()==1) dau=cuoi=n;
    20.     else {
    21.         cuoi->tiep=n;
    22.         cuoi=n;
    23.         };
    24.     };
    25. void DSLKD::duyetDSLKD(){
    26.     NUT *p=dau;
    27.     while(p!=NULL){
    28.         cout<<"\nDu lieu:"<<p->dulieu<<" tro toi"<<p->tiep<<endl;
    29.         p=p->tiep;
    30.         };
    31.     };
    32. void DSLKD::huyDSLKD(){
    33.     NUT *p;
    34.     while (dau!=NULL){
    35.         p=dau;
    36.         dau=dau->tiep;
    37.         delete p;
    38.         };
    39.     dau=cuoi=NULL;
    40.     };
    41. DSLKD::~DSLKD(){
    42.     huyDSLKD();
    43.     };
    44. NUT* DSLKD::timNut(KieuDL duLieu){
    45.     NUT *p=dau;
    46.     while(p!=NULL){
    47.         if (p->dulieu==duLieu) return p;
    48.         else p=p->tiep;
    49.         };
    50.     return NULL;
    51.     };
    52. NUT* DSLKD::timNutNN(){
    53.     NUT *nN=dau;
    54.     for(NUT *p=dau->tiep;p!=NULL;p=p->tiep)
    55.         if (nN->dulieu>p->dulieu)
    56.             nN=p;
    57.     return nN;
    58.     };
    59. int DSLKD::demNut(){
    60.     NUT *p=dau;
    61.     int dem;
    62.     while(p!=NULL){
    63.         dem++;
    64.         p=p->tiep;
    65.         };
    66.     return dem;
    67.     };
    68. void DSLKD::themNutPSauQ(NUT *p, NUT *q){
    69.     if (q==cuoi){
    70.         cuoi->tiep=p;
    71.         cuoi=p;
    72.         }
    73.     else {
    74.         p->tiep=q->tiep;
    75.         q->tiep=p;
    76.     };
    77.     };
    78. void DSLKD::xoaNutP(NUT *p){
    79.     if(p==dau) dau=dau->tiep;
    80.     else {
    81.         NUT *truocP=dau;
    82.         while(truocP->tiep!=p) truocP=truocP->tiep;
    83.         if (p==cuoi){
    84.             cuoi=truocP;
    85.             cuoi->tiep=NULL;
    86.             }
    87.         else
    88.             truocP->tiep=p->tiep;
    89.         };
    90.         delete p;
    91.     };
    92. void DSLKD::layNutP(NUT *p){
    93.     if (p==dau)
    94.         dau=dau->tiep;
    95.     else{
    96.         NUT *truocP=dau;
    97.         while(truocP->tiep!=p) truocP=truocP->tiep;
    98.         if (p==cuoi){
    99.             cuoi=truocP;
    100.             cuoi->tiep=NULL;
    101.             }
    102.         else truocP->tiep=p->tiep;
    103.         };
    104.         p->tiep=NULL;
    105.     };
    106. void DSLKD::themNutPOCuoi(NUT *p){
    107.     if (DSLKRong()==1) dau=cuoi=p;
    108.     else{
    109.         cuoi->tiep=p;
    110.         cuoi=p;
    111.         };
    112.     };
    113. void DSLKD::sapXepCTTND(){
    114.     NUT *posMin;
    115.     KieuDL temp;
    116.     for(NUT *p=dau;p!=cuoi;p=p->tiep){
    117.         posMin=p;
    118.         for (NUT *q=p->tiep;q!=NULL;q=q->tiep)
    119.             if (q->dulieu<posMin->dulieu) posMin=q;
    120.         temp=p->dulieu;
    121.         p->dulieu=posMin->dulieu;
    122.         posMin->dulieu=temp;
    123.         };
    124.     };
    125. void DSLKD::sapXepCTTDC(){
    126.     DSLKD *dsMoi=new DSLKD();
    127.     while (dau!=NULL){
    128.         NUT *pMin=this->timNutNN();
    129.         this->layNutP(pMin);
    130.         dsMoi->themNutPOCuoi(pMin);
    131.         };
    132.     this->dau=dsMoi->dau;
    133.     this->cuoi=dsMoi->cuoi;
    134.     };
    135. void DSLKD::sapXepQS(){
    136.     DSLKD *l1,*l2;
    137.     NUT *x;
    138.     NUT *p;
    139.     if (this->dau==this->cuoi) return;
    140.     x=this->dau=this->dau->tiep;
    141.     while(this->dau!=NULL){
    142.         p=this->dau;
    143.         this->dau=this->dau->tiep;
    144.         p->tiep=NULL;
    145.         if (p->dulieu<=x->dulieu)
    146.             l1->themNutPOCuoi(p);
    147.         else
    148.             l2->themNutPOCuoi(p);
    149.         }
    150.     l1->sapXepQS();
    151.     l2->sapXepQS();
    152.     if (l1->dau!=NULL){
    153.         this->dau=l1->dau;
    154.         l1->cuoi->tiep=x;
    155.         }
    156.     else
    157.         {
    158.         this->dau=x;
    159.         x->tiep=l2->dau;
    160.         };
    161.     if (l2->dau!=NULL)
    162.         this->cuoi=l2->cuoi;
    163.     else
    164.         this->cuoi=x;
    165.     };
    Bạn xem và chỉnh sửa lại theo ý bạn
    Không biết ghi gì luôn ...

  6. #6
    Ngày gia nhập
    01 2007
    Nơi ở
    Somewhere I belong
    Bài viết
    168

    Mặc định [ Solved ]Danh sách liên kết

    C++ Code:
    1. #include <iostream>
    2. #define kdl int    // tao mot kieu du lieu kieu integer
    3. class List;
    4. class Node   // Mot class Node gom co mot con tro next va du lieu la data
    5. {
    6.   private:
    7.     Node *next;
    8.        kdl data;
    9.    public:
    10.       Node()
    11.       {
    12.          next = NULL;
    13.          data = 0;
    14.       }
    15.       Node(kdl d)
    16.       {
    17.          next = NULL;
    18.          data = d;
    19.       }
    20.    friend class List;
    21. };
    22.  
    23. class List // Mot list cac node
    24. {
    25.     private:
    26.     Node *head;
    27.    public:
    28.       List()
    29.       {
    30.         head = NULL;
    31.       }
    32.       bool Isempty();        // kiem tra rong
    33.       void InsertFirt(kdl d);//chen dau
    34.       void InsertLast(kdl d);//chen cuoi
    35.       void DeleteFirt();     // xoa dau
    36.       void DeleteLast();     // xoa cuoi
    37.       bool Find(kdl d);      // tim phan tu d co trong danh sach hay ko
    38.       void Sorting();
    39.       void Display();
    40. };
    41. void List::Display()
    42. {
    43.    if(Isempty())
    44.     cout<<"Danh sach rong";
    45.    else
    46.    {
    47.     Node *p = head;
    48.         while(p)
    49.        {
    50.           cout<<p->data<<" ";
    51.           p = p->next;
    52.        }
    53.    }
    54.  
    55. }
    56. bool List::Isempty()
    57. {
    58.     if(head == NULL)
    59.         return true;
    60.     else
    61.         return false;
    62. };
    63. void List::InsertFirt(kdl d)
    64. {
    65.    Node *p = new Node(d);
    66.    if(Isempty())
    67.     head = p;
    68.    else
    69.    {
    70.     p->next = head;
    71.         head = p;
    72.    }
    73. };
    74. void List::InsertLast(kdl d)
    75. {
    76.    Node *p = new Node(d);
    77.    if(Isempty())
    78.     head = p;
    79.    else
    80.    {
    81.      Node *q = head;
    82.      while(q->next)
    83.          q = q->next;
    84.          q->next = p;
    85.    }
    86. };
    87.  
    88. void List::DeleteFirt()
    89. {
    90.    if(Isempty())
    91.     cout<<"Danh sach rong: ";
    92.    else
    93.    {
    94.     Node *p = head;
    95.         head = head->next;
    96.        delete p;
    97.        p->next = NULL;
    98.    }
    99. };
    100.  
    101. void List::DeleteLast()
    102. {
    103.    if(Isempty())
    104.     cout<<"Danh sach rong: ";
    105.    else
    106.    {
    107.     Node *p,*q;
    108.       q = head;
    109.       p = p->next;
    110.       while(q->next)
    111.       {
    112.         p = q;
    113.         q= q->next;
    114.       }
    115.       delete q;
    116.       p->next = NULL;
    117.    }
    118. };
    119.  
    120. bool List::Find(kdl d)
    121. {
    122.    if(Isempty())
    123.     cout<<"Danh sach rong: ";
    124.    else
    125.    {
    126.     Node * p = head;
    127.     while(p)
    128.        {
    129.            if(p->data == d)
    130.             return true;
    131.            p = p->next;
    132.        }
    133.       return false;
    134.    }
    135. };
    136. void List::Sorting()
    137. {
    138.     if(head || head->next)
    139.     {
    140.     Node *r = head->next;
    141.     head->next = NULL;
    142.     while(r)
    143.     {
    144.         Node *p = r;
    145.         r = r->next;
    146.         p->next = NULL;
    147.         if(head->data > p->data)
    148.         {
    149.             p->next = head;
    150.             head = p;
    151.         }
    152.         else
    153.         {
    154.             Node *q = head;
    155.             while(q->next && (q->next->data < p->data) )
    156.                 q = q->next;
    157.             p->next = q->next;
    158.             q->next = p;
    159.         }
    160.     }
    161.    }
    162. }

    Đã được chỉnh sửa lần cuối bởi iamvtn : 04-04-2008 lúc 09:32 PM.
    In code we trust

  7. #7
    Ngày gia nhập
    10 2007
    Bài viết
    1

    Cảm ơn hai bác nhiều nhiều nha!. Khi em có một lớp
    C++ Code:
    1.     class SinhVien{
    2.             private:
    3.                  char MSSV[9];
    4.                  char HoSV[20];
    5.                  char TenSV[8];
    6.                  char GioiTinh;
    7.                  char NgaySinh[11];
    8.             public:
    9.                  void Nhap();
    10.              char TonTai();
    11.              void LuuFile();
    12.                  void In();
    13.                };
    Em đã viết được hàm nhập và lưu các đối tượng thuộc lớp SinhVien ra file, sau đó em muốn đọc lại file trên (đọc mỗi đối tượng từ file, tùy vào tên sinh viên để chèn trước hoặc chèn sau vào dslk theo thứ tự từ a->z của tên), và xuất ra màn hình danh sách sinh viên được xắp xếp theo tên. Các bác chỉ giùm em!?

    ----------
    Lần sau đặt code vào cặp thẻ tag
    Đã được chỉnh sửa lần cuối bởi Forlorn_hope : 06-04-2008 lúc 07:37 AM.

  8. #8
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Em đã viết được hàm nhập và lưu các đối tượng thuộc lớp SinhVien ra file, sau đó em muốn đọc lại file trên (đọc mỗi đối tượng từ file, tùy vào tên sinh viên để chèn trước hoặc chèn sau vào dslk theo thứ tự từ a->z của tên), và xuất ra màn hình danh sách sinh viên được xắp xếp theo tên. Các bác chỉ giùm em!?
    post bài làm còn dở dang lên đi cậu ?

  9. #9
    Ngày gia nhập
    04 2008
    Bài viết
    25

    ai chỉ dùm em struct với em gà quá ...mấy anh chỉ dùm em nha cho ví dụ và phân tích nữa thì càng tốt Thankss

  10. #10
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    ai chỉ dùm em struct với em gà quá ...mấy anh chỉ dùm em nha cho ví dụ và phân tích nữa thì càng tốt Thanks
    Lấy ví dụ trong sách ra mà đọc, rùi chỗ nào không hiểu post lên sẽ có người giúp cậu.

Các đề tài tương tự

  1. [ Solved ]Hỏi về danh sách liên kết
    Gửi bởi zaizai152 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 27-11-2008, 07:18 PM
  2. [ Solved ]Coi giùm em cái danh sách liên kết này với!!!
    Gửi bởi Kan trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 7
    Bài viết cuối: 25-10-2008, 10:13 PM
  3. [ Solved ]Xin ví dụ về danh sách liên kết
    Gửi bởi Nemo_wf trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 21-09-2008, 11:50 PM
  4. [ Solved ] sử dụng danh sách liên kết đơn lưu trữ, thưc hiên một vài phép toán!
    Gửi bởi quangminh_vp trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 20-09-2008, 11:14 PM
  5. [ Solved ]Đảo ngược danh sách liên kết
    Gửi bởi atuan1989 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 11
    Bài viết cuối: 07-04-2008, 07:43 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn