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

Đề tài: Tìm hợp của 2 danh sách liên kết trong lập trình C++?

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

    Angry Tìm hợp của 2 danh sách liên kết trong lập trình C++?

    Cho mình hỏi làm thế nào để tìm hợp của 2 tập hợp sử dụng dslk ?

    Có ai đó ko vậy ? ...................
    Trả Lời giúp mình với

    Lần sau mà post 2 bài liên tiếp trong khoảng 2 phút kiểu này tui cho vào sọt rác đó.
    zkday
    Đã được chỉnh sửa lần cuối bởi zkday2686 : 30-03-2009 lúc 07:28 PM.

  2. #2
    Ngày gia nhập
    11 2008
    Bài viết
    203

    Có ngay một bài hoàn chỉnh, cả giao, hợp, hiệu, phần bù: Sử dụng danh sách liên kết đơn.
    Mình dùng trình biên dịch DevC++, bạn có thể lên google để down trình biên dịch này về.

    C++ Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. #include<malloc.h>
    4.  
    5. typedef           int   ElementType;
    6. typedef           struct  Node
    7. {
    8.                   ElementType       Element;
    9.                   Node*             Next;
    10. };
    11. typedef           Node*             Position;
    12. typedef           Position          List;
    13.  
    14. Position          TAONUT()
    15. {
    16.                   return (Node*)malloc(sizeof(Node));        
    17. }            
    18. void              MAKENULL_LIST(List &L)
    19. {
    20.                   L=TAONUT();
    21.                   L->Next=NULL;    
    22.              
    23. }
    24. int               EMPTY_LIST(List L)
    25. {
    26.                   return L->Next==NULL;                
    27. }
    28. void              INSERT_LIST(ElementType X, Position P, List &L)
    29. {
    30.                   Position Temp;
    31.                   //Temp=(Node*)malloc(sizeof(Node));
    32.                   Temp=TAONUT();
    33.                   Temp->Element=X;
    34.                   Temp->Next=P->Next;
    35.                   P->Next=Temp;  
    36.                                
    37. }
    38. void              DELETE_LIST(Position P, List &L)
    39. {
    40.                   Position Temp;
    41.                   Temp=P->Next;
    42.                   P->Next=P->Next->Next;
    43.                   free(Temp);  
    44. }
    45. void              READ_LIST(List &L)
    46. {          
    47.                   int i=0;          
    48.                   ElementType X;
    49.                   do{
    50.                       printf("Nhap vao phan tu thu %d:",i+1);scanf("%d",&X);
    51.                         if(X!=-1)
    52.                       INSERT_LIST(X,L,L);
    53.                       i++;
    54.                   }while(X!=-1);
    55.                  
    56. }
    57. void              PRINT_LIST(List L)
    58. {
    59.          if(EMPTY_LIST(L))
    60.             printf("\nDanh sach rong, khong co phan tu de in");        
    61.          else
    62.          {        Position P=L;
    63.                   while(P->Next!=NULL)
    64.                     {
    65.                        printf("%d ",P->Next->Element);
    66.                        P=P->Next;
    67.                     };  
    68.          }              
    69.          printf("\n");        
    70. }
    71. Position    LOCATE(ElementType X, List L)
    72. {                                
    73.          if(!EMPTY_LIST(L))
    74.          {  Position P=L;
    75.             while((P->Next!=NULL)&&(P->Next->Element!=X))
    76.             {
    77.                P=P->Next;
    78.             };
    79.             if(P->Next==NULL)
    80.                return P->Next;
    81.             else
    82.                return P;
    83.          }
    84.          else return NULL;              
    85.  
    86. }
    87. void XOAMOTNUT(List &L)
    88. {
    89.          ElementType X;
    90.          printf("\nNhap vao gia tri muon xoa: ");scanf("%d",&X);
    91.          Position P=LOCATE(X,L);
    92.          if(EMPTY_LIST(L))
    93.                  printf("\nDanh sach rong! Khong co phan tu nao de xoa");
    94.          else if(P->Next==NULL)
    95.                   printf("\nKhong ton tai phan tu vua nhap!");
    96.               else
    97.              {
    98.                  DELETE_LIST(P,L);
    99.                  printf("\n");
    100.              }
    101. }
    102. void     XOA_CAC_NUT_CUNG_GIA_TRI(ElementType X,List &L)
    103. {
    104.          printf("\nNhap vao gia tri muon xoa:");scanf("%d",&X);
    105.          Position P=L;
    106.          int i=0;//BIEN NAY DE KIEM TRA XEM CO XOA KHONG
    107.          while(P->Next!=NULL)
    108.          {
    109.             if(P->Next->Element==X)
    110.             {
    111.                DELETE_LIST(P,L);
    112.                i++;        
    113.             }  
    114.             else
    115.                 P=P->Next;
    116.            
    117.          }
    118.          if(i==0) printf("\nKhong ton tai gia tri can xoa!\n");
    119. }
    120. Position    XACDINHVITRICUOI(List L)
    121. {
    122.    Position P;
    123.    if(EMPTY_LIST(L))
    124.       return NULL;
    125.    else
    126.    {
    127.      
    128.       P=L;
    129.       while(P->Next!=NULL)
    130.       {
    131.          P=P->Next;  
    132.       }    
    133.      
    134.    }
    135.    return P;
    136. }  
    137. void     NOICUOI( List &L)
    138. {
    139.          ElementType X;
    140.          printf("\nNhap vao gia tri can them vao cuoi: ");  
    141.          scanf("%d",&X);
    142.          Position P=XACDINHVITRICUOI(L);
    143.          INSERT_LIST(X,P,L);
    144. }  
    145. int      MOTPHANTU(List L)
    146. {
    147.          return L->Next->Next==NULL;  
    148. }
    149. int     IS_TANGDAN(List L)
    150. {    
    151.       if(!EMPTY_LIST(L))
    152.           if(MOTPHANTU(L))
    153.              return -1;
    154.           else
    155.           {
    156.              int i=0;
    157.              Position P;
    158.              P=L;  
    159.              while(P->Next->Next!=NULL)
    160.              {
    161.            
    162.                if(P->Next->Element<P->Next->Next->Element)
    163.                   P=P->Next;
    164.                else return 0;      
    165.              };
    166.            return 1;
    167.           }
    168.       else
    169.           return -1;
    170.      
    171. }
    172. int     IS_GIAMDAN(List L)//Kiem tra xem danh sach co phai la giam dan khong
    173. {    
    174.       if(!EMPTY_LIST(L))
    175.           if(MOTPHANTU(L))
    176.              return -1;
    177.           else
    178.           {
    179.              int i=0;
    180.              Position P;
    181.              P=L;  
    182.              while(P->Next->Next!=NULL)
    183.              {
    184.            
    185.                if(P->Next->Element>P->Next->Next->Element)
    186.                   P=P->Next;
    187.                else return 0;      
    188.              };
    189.            return 1;
    190.           }
    191.       else
    192.           return -1;
    193.      
    194. }
    195. void     DANH_SACH_CO_TANG_KHONG(List L)
    196. {
    197.       if(IS_TANGDAN(L)==1)
    198.          printf("\nDanh sach da cho la tang dan!");
    199.       else   if(IS_TANGDAN(L)==0)
    200.                  printf("\nDanh sach khong tang!");
    201.              else
    202.                  printf("\nKhong xac dinh!");
    203.    
    204. }  
    205. void     NHAPXUOI(List &L)
    206. {
    207.          MAKENULL_LIST(L);
    208.          Position P=L;
    209.          int i=0;
    210.          ElementType X;
    211.          do
    212.          {
    213.             printf("Nhap vao phan tu thu %d:",i+1);
    214.             scanf("%d",&X);  
    215.             if(X!=-1)
    216.                INSERT_LIST(X,P,L);
    217.             P=P->Next;
    218.             i++;            
    219.          }while(X!=-1);  
    220. }
    221.  
    222. void     SWAP(ElementType &A, ElementType &B)
    223. {
    224.          ElementType Temp;
    225.          Temp=A;
    226.          A=B;
    227.          B=Temp;
    228. }
    229. void     SORT(List &L)
    230. {
    231.          
    232.           if(!EMPTY_LIST(L))
    233.           {
    234.                Position P=L;
    235.                while(P->Next!=NULL)
    236.                {
    237.                   Position Q=P->Next;
    238.                   while(Q->Next!=NULL)
    239.                   {
    240.                      if(P->Next->Element>Q->Next->Element)
    241.                      SWAP(P->Next->Element,Q->Next->Element);
    242.                      Q=Q->Next;                    
    243.                   }
    244.                 P=P->Next;  
    245.                }    
    246.                
    247.           }
    248.    
    249. }
    250. List     SAPXEPTANG(List& L)//GIONG HET HAM SORT NHUNG KHAC NHAU TRI TRA VE
    251. {
    252.          
    253.           if(!EMPTY_LIST(L))
    254.           {
    255.                Position P=L;
    256.                while(P->Next!=NULL)
    257.                {
    258.                   Position Q=P->Next;
    259.                   while(Q->Next!=NULL)
    260.                   {
    261.                      if(P->Next->Element>Q->Next->Element)
    262.                      SWAP(P->Next->Element,Q->Next->Element);
    263.                      Q=Q->Next;                    
    264.                   }
    265.                 P=P->Next;  
    266.                }    
    267.  
    268.           }
    269.    
    270. }              
    271. List     HOP(List &L1,List L2)//HOP CUA 2 DANH SACH L1, L2
    272. {                             //TRA RA DANH SACH DUOC SAP THU TU
    273.            
    274.             List L3;
    275.             SAPXEPTANG(L1);
    276.             L3=L1;
    277.             if(EMPTY_LIST(L2))
    278.                return L3;
    279.             else
    280.             {
    281.                Position P,Q;
    282.                P=L2,Q=L3;
    283.               while(P->Next!=NULL)
    284.               {
    285.                   if(LOCATE(P->Next->Element,L3)==NULL)
    286.                   {
    287.                      INSERT_LIST(P->Next->Element,L3,L3);
    288.                      SAPXEPTANG(L3);
    289.                   }
    290.                   else
    291.                       P=P->Next;
    292.               }
    293.               return L3;
    294.            }
    295.      
    296. }
    297. List      GIAO(List L1,List L2)//GIAO 2 DANH SACH CHUA SAP THU TU
    298. {                            
    299.          List L3;
    300.          MAKENULL_LIST(L3);
    301.          Position P=L1, R=L3;
    302.          if(!EMPTY_LIST(L1)&&!EMPTY_LIST(L2))  
    303.          {
    304.             while(P->Next!=NULL)
    305.             {
    306.                Position Q=L2;
    307.                while(Q->Next!=NULL)
    308.                {
    309.                   if(P->Next->Element!=Q->Next->Element)
    310.                      Q=Q->Next;
    311.                   else
    312.                   {
    313.                      if(LOCATE(P->Next->Element,L3)==NULL)//KIEM TRA XEM P->N->E CO THUOC L3 CHUA
    314.                      {    INSERT_LIST(P->Next->Element,R,L3);
    315.                           R=R->Next;
    316.                      }
    317.                      else
    318.                           Q=Q->Next;
    319.                   }
    320.                }
    321.             P=P->Next;
    322.             }
    323.             return L3;
    324.          }
    325.          else  return L3;//NEU MOT TRONG HAI DANH SACH RONG THI KQ LA L3-TUC LA EMPTY
    326. }
    327. List     HIEU(List L1, List L2)//HIEU CUA 2 DANH SACH
    328. {
    329.          if(EMPTY_LIST(L1))//CHO NAY TOI KHONG NHO DAY NHE:
    330.          {             //HIEU CUA TAP RONG VA TAP A KHAC RONG: 0/A=?
    331.             List L3;
    332.             L3=L2;
    333.             SORT(L3);  
    334.             return L3;
    335.          }
    336.          else if(EMPTY_LIST(L2))
    337.               {
    338.                   List L3;
    339.                   L3=L1;
    340.                   SORT(L3);  
    341.                   return L3;
    342.               }
    343.               else
    344.               {
    345.                   Position P;
    346.                   P=L1;
    347.                   List L3;
    348.                   MAKENULL_LIST(L3);
    349.                   while(P->Next!=NULL)
    350.                   {
    351.                      if(LOCATE(P->Next->Element,L2)==NULL)
    352.                      {
    353.                         INSERT_LIST(P->Next->Element,L3,L3);
    354.                         P=P->Next;
    355.                      }
    356.                      
    357.                      else
    358.                         P=P->Next;
    359.                   }
    360.                   SORT(L3);
    361.                   return L3;                  
    362.                }
    363.                
    364.    
    365. }
    366. int            ISCON(List L1, List L2)
    367. {
    368.                if(EMPTY_LIST(L1))
    369.                   return 1;
    370.                else if(EMPTY_LIST(L2))
    371.                        return 0;
    372.                     else
    373.                     {
    374.                         Position P=L1;
    375.                         while(P->Next!=NULL)
    376.                         {
    377.                            if(LOCATE(P->Next->Element,L2)==NULL)
    378.                               return 0;
    379.                            else
    380.                               P=P->Next;  
    381.                            
    382.                         }
    383.                                                
    384.                      }
    385.                   return 1;
    386. }
    387. List        PHANBU(List L1,List L2)//NHAC LAI: NEU A LA CON B THI B/A DUOC GOI LA PHAN BU CUA A TRONG B
    388. {                             //NHU VAY, TRUOC TIEN PHAI XET XEM A CO LA CON B KHONG?  
    389.             List L3;
    390.             MAKENULL_LIST(L3);
    391.             if(ISCON(L1,L2))
    392.             {
    393.                L3=HIEU(L2,L1);
    394.                return L3;
    395.             }
    396.             else
    397.                return L3;
    398.    
    399. }
    400.  
    401. int main()
    402. {
    403.     List L, L1,L2,L3;
    404.     int X;
    405.  
    406.    
    407.    
    408.     MAKENULL_LIST(L1);
    409.     READ_LIST(L1);
    410.     PRINT_LIST(L1);
    411.     printf("\nNhap danh sach L2:\n");
    412.     MAKENULL_LIST(L2);
    413.     READ_LIST(L2);
    414.     PRINT_LIST(L2);
    415.     L3=PHANBU(L1,L2);
    416.     PRINT_LIST(L3);
    417.    
    418.        
    419.     /*TIM HIEU CUA 2 TAP HOP
    420.     MAKENULL_LIST(L1);
    421.     READ_LIST(L1);
    422.     PRINT_LIST(L1);
    423.     printf("\nNhap danh sach L2:\n");
    424.     MAKENULL_LIST(L2);
    425.     READ_LIST(L2);
    426.     PRINT_LIST(L2);
    427.     L3=HIEU(L1,L2);
    428.     PRINT_LIST(L3);*/
    429.        
    430.     /*MAKENULL_LIST(L1);
    431.     READ_LIST(L1);
    432.     PRINT_LIST(L1);
    433.     printf("\nNhap danh sach L2:\n");
    434.     MAKENULL_LIST(L2);
    435.     READ_LIST(L2);
    436.     PRINT_LIST(L2);
    437.     L3=HOP(L1,L2);
    438.     PRINT_LIST(L3);*/
    439.    
    440.     /*MAKENULL_LIST(L1);
    441.     READ_LIST(L1);
    442.     PRINT_LIST(L1);
    443.     MAKENULL_LIST(L2);
    444.     READ_LIST(L2);
    445.     PRINT_LIST(L2);
    446.     L=GIAO(L1,L2);
    447.     PRINT_LIST(L);*/
    448.     getch();
    449.    
    450. }
    Có một số hàm không cần thiết, nếu bạn không thích thì có thể bỏ đi, nó không ảnh hưởng đến chương trình.
    Khi muốn kết thúc dãy, ta nhập vào giá trị -1.
    Tôi tin rằng: giải thuật thì có thể tìm trong hàng trăm GB ebook, hoặc Google nhưng code chạy thì chưa chắc! Hãy post code để chứng tỏ giải thuật của bạn là đúng!
    Giải thuật là bản thiết kế của ngôi nhà, code là phần xây dựng. Nếu chỉ xây nhà trên giấy thì ta sống chả khác nào người nguyên thủy.

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

    Minh muốn biết nếu 2 danh sách chưa được sắp xếp thì như thế nào ?
    Ý tưởng của mình là gộp tất cả các phần tử của 2 danh sách lại rồi loại bỏ những phần tử giống nhau nhưng chua có cách giải quyêt.

  4. #4
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Nếu sử dụng cách xóa thì bạn có thể làm như sau hay hơn.
    Duyệt danh sách 2 nếu có phần tử nào có trong ds 1 thì xóa phần tử đó.
    Cuối cùng nối 2 ds lại với nhau.

    Thuật toán thì vậy thôi, bạn cần hiện thực hóa nó mới hiểu và nhớ lâu đc.

    Demo, nên đọc hiểu (có thế sai lắm đấy ):
    C Code:
    1. void NoiDS(NODEPTR p1, NODEPTR p2)
    2. {
    3.      NODEPTR q1, q2 = p2;
    4.      while (q2->next != NULL)
    5.      {
    6.           q1 = p1;
    7.           while (q1 != NULL)
    8.           {
    9.                 if (q2->next->data == q1->data)
    10.                 {
    11.                      NODEPTR qq = q2->next;
    12.                      q2->next = qq->next;
    13.                      delete(qq);
    14.                 }
    15.                 else q1 = q1->next;
    16.           }
    17.           q2 = q2->next;
    18.      }
    19.      q2->next = p1; //gio p2 la dau ds moi.
    20. }

  5. #5
    Ngày gia nhập
    11 2008
    Bài viết
    203

    Minh muốn biết nếu 2 danh sách chưa được sắp xếp thì như thế nào ?
    Ý tưởng của mình là gộp tất cả các phần tử của 2 danh sách lại rồi loại bỏ những phần tử giống nhau nhưng chua có cách giải quyêt.
    Chưa sắp xếp thì mình sắp xếp, ai cấm nào? Sắp xếp xong rồi mình mới thực hiện việc tìm, giao, hợp.....
    Mình có viết hàm sắp xếp mà.
    Tôi tin rằng: giải thuật thì có thể tìm trong hàng trăm GB ebook, hoặc Google nhưng code chạy thì chưa chắc! Hãy post code để chứng tỏ giải thuật của bạn là đúng!
    Giải thuật là bản thiết kế của ngôi nhà, code là phần xây dựng. Nếu chỉ xây nhà trên giấy thì ta sống chả khác nào người nguyên thủy.

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

    Mặc định Tìm hợp của 2 danh sách liên kết trong lập trình C++?

    Mình làm hoài mà không thể sửa được lôi của chương trình này các bạn Giúp minh Sửa với ...........
    Mình Dung visual c++

    C++ Code:
    1. // File Header
    2. #ifndef LINKLIST_H
    3. #define LINKLIST_H
    4. #include <iostream>
    5. using namespace std;
    6. typedef struct Node
    7. {
    8.     int data;
    9.     Node *next;
    10. }Node;
    11. //  Dinh nghia class LinkList
    12. class LinkList
    13. {
    14.         private :
    15.             Node *m_pHead,*m_pTail;
    16.         public:
    17.             LinkList();  // constructor
    18.             LinkList(LinkList&);// copy constructor
    19.             ~LinkList();
    20.             Node* getNode(int); // tao ra mot Node
    21.                         int  removeKey(int ); // loai mot nut co khoa k;
    22.             void createLinkList();// tao mot danh sach
    23.             void processLinkList();// duyet danh sach
    24.             void deleteLinkList(); // huy mot danh sach
    25.             LinkList operator =(LinkList );//toan tu "="
    26.             LinkList operator +(LinkList);// toan tu "+"
    27.             LinkList unionLinkList(LinkList);// hop cua 2 danh sach
    28.                        
    29. };
    30. #endif
    31. // Code Cua file header
    32. ////////////////////////////////////////
    33. #include "LinkList.h"
    34. //  cai dat class LinkList
    35. ////////////////////////////////////////////////////////
    36. /// phuong thuc khoi tao
    37. LinkList::LinkList()
    38. {
    39.     m_pHead=NULL;
    40.     m_pTail=NULL;
    41. }
    42. ///////////////////////////////////////////////
    43. // phuong thuc copy constructor
    44. LinkList::LinkList(const LinkList &A)
    45. {
    46.     m_pHead=NULL;
    47.     Node *p;
    48.     p=A.m_pHead;
    49.     while(p!=NULL)
    50.     {
    51.         addTail(p);
    52.         p=p->next;
    53.     }
    54.  
    55. }
    56. // phuong thuc huy
    57. LinkList::~LinkList()
    58. {
    59.     deleteLinkList();
    60. }
    61. ////////////////////////////////////////////////////////////////////////
    62. // phuong thuc tao ra mot nut
    63. Node* LinkList::getNode(int x)
    64. {
    65.     Node *p;
    66.     p=new Node;
    67.     if(p==NULL)
    68.     {
    69.         cout<<" Khong du bo nho de tao ra Node\n";
    70.         exit(1);
    71.     }
    72.     p->data=x;
    73.     p->next=NULL;
    74.     return p;
    75. }
    76. //////////////////////////////////////////////////////////////////////
    77. // Phuong thuc tao ra mot danh sach
    78. void LinkList::createLinkList()
    79. {
    80.     int x;
    81.     cout<<" Ket thuc bang gia tri 0\n";
    82.     cout<<" Nhap : ";
    83.     cin>>x;
    84.     while(x)
    85.     {
    86.         Node *p;
    87.         p=getNode(x);
    88.         addTail(p);
    89.         cout<<" Nhap : ";
    90.         cin>>x;
    91.     }
    92. }
    93. ////////////////////////////////////////////////////////////////////
    94. // phuong thuc duyet danh sach
    95. void LinkList::processLinkList()
    96. {
    97.     Node *p;
    98.     p=m_pHead;
    99.     if(p==NULL)
    100.     {
    101.         cout<<" Danh Sach Rong \n";
    102.         return;
    103.     }
    104.     cout<<" Danh sach ";
    105.     while(p!=NULL)
    106.     {
    107.         cout<<p->data<<"   ";
    108.         p=p->next;
    109.     }
    110.     cout<<endl;
    111. }
    112. ////////////////////////////////////////////////////////////////////////
    113. // Cai dat phuong thuc xoa danh sach
    114. void LinkList::deleteLinkList()
    115. {
    116.     Node *p;
    117.     p=m_pHead;
    118.     while(p!=NULL)
    119.     {
    120.         m_pHead=m_pHead->next;
    121.         delete p;
    122.         p=m_pHead;
    123.     }
    124. }
    125. //////////////////////////////////////////////////////////////////////
    126. // cai dat phuong thuc xoa mot nut co khoa k.
    127. int LinkList::removeKey(int x)
    128. {
    129.     Node *p,*q;
    130.     q=NULL;
    131.     p=m_pHead;
    132.     while(p!=NULL)
    133.     {
    134.         if(p->data==x)
    135.             break;
    136.         q=p;
    137.         p=p->next;
    138.     }
    139.     if(p==NULL)  // Khong thay x trong danh sach
    140.         return 0;
    141.     if(q!=NULL)  // tim thay trong danh sach
    142.     {
    143.         if(p==m_pTail)
    144.           m_pTail=q;
    145.         q->next=p->next;
    146.         delete p;
    147.     }
    148.     if(q==NULL)
    149.     {  
    150.          m_pHead=m_pHead->next;
    151.          if(m_pHead==NULL)
    152.              m_pTail=NULL;
    153.     }
    154.     return 1;
    155. }
    156. /////////////////////////////////////////////////////////////////////////
    157. // cai dat phuong thuc Hop 2 LinkList
    158. LinkList LinkList::unionLinkList(LinkList B)
    159. {
    160.     LinkList C;
    161.     C.m_pHead=NULL;
    162.     C.m_pTail=NULL;
    163.     Node *p,*q;
    164.     p=this->m_pHead;
    165.     while(p!=NULL)
    166.     {
    167.         q=B.m_pHead;
    168.         if(q==NULL)
    169.             return *this;
    170.         else
    171.          while(q->next!=NULL)
    172.          {
    173.             if(q->data==p->data)
    174.             {
    175.                 Node *r;
    176.                 r=q;
    177.                 B.removeKey(r->data);
    178.             }
    179.             if(q->next==NULL)
    180.                   break;
    181.             q=q->next;
    182.          }
    183.          p=p->next;
    184.     }
    185.     C=*this+B;
    186.     return C;
    187. }
    188. ////////////////////////////////////////////////////////////////////////////
    189. // Cai dat toan tu gan 2 LinkList
    190. LinkList LinkList::operator =(LinkList A)
    191. {
    192.     Node *p;
    193.     p=A.m_pHead;
    194.     while(p!=NULL)
    195.     {
    196.         this->addTail(p);
    197.         p=p->next;
    198.     }
    199.  return *this;
    200. }
    201. /////////////////////////////////////////////////////////////////////////////
    202. // Dua tat ca cac phan tu cua 2 danh sach vao 1 danh sach
    203. LinkList LinkList::operator +(LinkList B)
    204. {
    205.     LinkList C;
    206.     Node *p;
    207.     p=this->m_pHead;
    208.     while(p!=NULL)
    209.     {
    210.         C.addTail(p);
    211.         p=p->next;
    212.     }
    213.     p=B.m_pHead;
    214.     while(p!=NULL)
    215.     {
    216.         C.addTail(p);
    217.         p=p->next;
    218.     }
    219.     C.processLinkList();
    220.     return C;
    221. }
    222.  
    223. /////////////////////////  Main  /////////////////
    224. #include "LinkList.h"
    225. int main()
    226. {
    227.     LinkList A,B,C;
    228.     cout<<" Tao danh sach A \n";
    229.     A.createLinkList();
    230.     A.processLinkList();
    231.     cout<<" Tao danh sach B \n";
    232.     B.createLinkList();
    233.     B.processLinkList();
    234.     C=A.unionLinkList(B);
    235.         cout<<" Duyet Danh Sach C hop cua A Va B\n";
    236.         C.processLinkList();
    237.    
    238.        system("pause");
    239.        return  0;

  7. #7
    Ngày gia nhập
    02 2008
    Nơi ở
    Việt Nam
    Bài viết
    577

    Bạn show báo lỗi lên đây được không, cả phải include các file head khác vào nữa chứ, có mỗi linklist.h sao đủ đc.

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

    thiếu const và tham chiếu nhiều quá (giống mình hồi xưa ) ... mình thấy bạn còn có method addTail() mà trong class thì lại ko khai báo ?
    code ra gió bão

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

    Lỗi của mình là ơ phan unionLinkList
    Nó báo Lỗi q trỏ tới một vùng nhớ nào đó mà không thể sử dụng được !

    C++ Code:
    1. #include <iostream>
    2. using namespace std;
    3. typedef struct Node
    4. {
    5.     int data;
    6.     Node *next;
    7. }Node;
    8. //////////////////////////////////////////////////////////////////////
    9. //  Dinh nghia class LinkList
    10. class LinkList
    11. {
    12.         private :
    13.             Node *m_pHead,*m_pTail;
    14.         public:
    15.                         LinkList();  // constructor
    16.             LinkList(const LinkList&);// copy constructor
    17.             ~LinkList();
    18.             Node* getNode(int); // tao ra mot Node
    19.                         int  removeKey(int ); // loai mot nut  co khoa k;
    20.             void addTail(Node*);// them cuoi
    21.                         void createLinkList();// tao mot danh sach
    22.             void processLinkList();// duyet danh sach
    23.             void deleteLinkList(); // huy mot danh sach
    24.             LinkList operator =(LinkList );//toan tu "="
    25.             LinkList operator +(LinkList);// toan tu "+"
    26.             LinkList unionLinkList(LinkList);// hop cua 2 danh sach
    27.                        
    28. };
    29. ///////////////////////////////////////////////
    30. /// phuong thuc khoi tao
    31. LinkList::LinkList()
    32. {
    33.     m_pHead=NULL;
    34.     m_pTail=NULL;
    35. }
    36. ///////////////////////////////////////////////
    37. // phuong thuc copy constructor
    38. LinkList::LinkList(const LinkList &A)
    39. {
    40.     m_pHead=NULL;
    41.     Node *p;
    42.     p=A.m_pHead;
    43.     while(p!=NULL)
    44.     {
    45.         addTail(p);
    46.         p=p->next;
    47.     }
    48.  
    49. }
    50. // phuong thuc huy
    51. LinkList::~LinkList()
    52. {
    53.     deleteLinkList();
    54. }
    55. ////////////////////////////////////////////////////////////////////////
    56. // phuong thuc tao ra mot nut
    57. Node* LinkList::getNode(int x)
    58. {
    59.     Node *p;
    60.     p=new Node;
    61.     if(p==NULL)
    62.     {
    63.         cout<<" Khong du bo nho de tao ra Node\n";
    64.         exit(1);
    65.     }
    66.     p->data=x;
    67.     p->next=NULL;
    68.     return p;
    69. }
    70. //////////////////////////////////////////////////////////////////////
    71. // Phuong thuc tao ra mot danh sach
    72. void LinkList::createLinkList()
    73. {
    74.     int x;
    75.     cout<<" Ket thuc bang gia tri 0\n";
    76.     cout<<" Nhap : ";
    77.     cin>>x;
    78.     while(x)
    79.     {
    80.         Node *p;
    81.         p=getNode(x);
    82.         addTail(p);
    83.         cout<<" Nhap : ";
    84.         cin>>x;
    85.     }
    86. }
    87. ////////////////////////////////////////////////////////////////////
    88. // phuong thuc duyet danh sach
    89. void LinkList::processLinkList()
    90. {
    91.     Node *p;
    92.     p=m_pHead;
    93.     if(p==NULL)
    94.     {
    95.         cout<<" Danh Sach Rong \n";
    96.         return;
    97.     }
    98.     cout<<" Danh sach ";
    99.     while(p!=NULL)
    100.     {
    101.         cout<<p->data<<"   ";
    102.         p=p->next;
    103.     }
    104.     cout<<endl;
    105. }
    106. ////////////////////////////////////////////////////////////////////////
    107. // Cai dat phuong thuc xoa danh sach
    108. void LinkList::deleteLinkList()
    109. {
    110.     Node *p;
    111.     p=m_pHead;
    112.     while(p!=NULL)
    113.     {
    114.         m_pHead=m_pHead->next;
    115.         delete p;
    116.         p=m_pHead;
    117.     }
    118. }
    119. //////////////////////////////////////////////////////////////////////
    120. // cai dat phuong thuc xoa mot nut co khoa k.
    121. int LinkList::removeKey(int x)
    122. {
    123.     Node *p,*q;
    124.     q=NULL;
    125.     p=m_pHead;
    126.     while(p!=NULL)
    127.     {
    128.         if(p->data==x)
    129.             break;
    130.         q=p;
    131.         p=p->next;
    132.     }
    133.     if(p==NULL)  // Khong thay x trong danh sach
    134.         return 0;
    135.     if(q!=NULL)  // tim thay trong danh sach
    136.     {
    137.         if(p==m_pTail)
    138.           m_pTail=q;
    139.         q->next=p->next;
    140.         delete p;
    141.     }
    142.     if(q==NULL)
    143.     {  
    144.          m_pHead=m_pHead->next;
    145.          if(m_pHead==NULL)
    146.              m_pTail=NULL;
    147.     }
    148.     return 1;
    149. }
    150. /////////////////////////////////////////////////////////////////////////
    151. // cai dat phuong thuc Hop 2 LinkList
    152. LinkList LinkList::unionLinkList(LinkList B)
    153. {
    154.     LinkList C;
    155.     C.m_pHead=NULL;
    156.     C.m_pTail=NULL;
    157.     Node *p,*q;
    158.     p=this->m_pHead;
    159.     while(p!=NULL)
    160.     {
    161.         q=B.m_pHead;
    162.         if(q==NULL)
    163.             return *this;
    164.         else
    165.          while(q->next!=NULL)
    166.          {
    167.             if(q->data==p->data)
    168.             {
    169.                 Node *r;
    170.                 r=q;
    171.                 B.removeKey(r->data);
    172.             }
    173.             if(q->next==NULL)
    174.                   break;
    175.             q=q->next;
    176.          }
    177.          p=p->next;
    178.     }
    179.     C=*this+B;
    180.     return C;
    181. }
    182. ////////////////////////////////////////////////////////////////////////////
    183. // Cai dat toan tu gan 2 LinkList
    184. LinkList LinkList::operator =(LinkList A)
    185. {
    186.     Node *p;
    187.     p=A.m_pHead;
    188.     while(p!=NULL)
    189.     {
    190.         this->addTail(p);
    191.         p=p->next;
    192.     }
    193.  return *this;
    194. }
    195. /////////////////////////////////////////////////////////////////////////////
    196. // Dua tat ca cac phan tu cua 2 danh sach vao 1 danh sach
    197. LinkList LinkList::operator +(LinkList B)
    198. {
    199.     LinkList C;
    200.     Node *p;
    201.     p=this->m_pHead;
    202.     while(p!=NULL)
    203.     {
    204.         C.addTail(p);
    205.         p=p->next;
    206.     }
    207.     p=B.m_pHead;
    208.     while(p!=NULL)
    209.     {
    210.         C.addTail(p);
    211.         p=p->next;
    212.     }
    213.     C.processLinkList();
    214.     return C;
    215. }
    216. //////////////////////////////////////////////////////
    217. // phuong thuc addtail  
    218. void LinkList::addTail(Node *x)
    219. {
    220.     Node *p;
    221.     p=getNode(x->data);
    222.     if(m_pHead==NULL)  // Danh Sach Rong
    223.     {
    224.         m_pHead=p;
    225.         m_pTail=m_pHead;
    226.     }
    227.     else
    228.     {
    229.         m_pTail->next=p;
    230.         m_pTail=p;
    231.     }
    232. }
    233.  
    234. /////////////////////////  Main  /////////////////
    235.  
    236. int main()
    237. {
    238.     LinkList A,B,C;
    239.     cout<<" Tao danh sach A \n";
    240.     A.createLinkList();
    241.     A.processLinkList();
    242.     cout<<" Tao danh sach B \n";
    243.     B.createLinkList();
    244.     B.processLinkList();
    245.     C=A.unionLinkList(B);
    246.         cout<<" Duyet Danh Sach C hop cua A Va B\n";
    247.         C.processLinkList();
    248.    
    249.        system("pause");
    250.        return  0;

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

    C++ Code:
    1. while(q->next!=NULL)
    2.          {
    3.             if(q->data==p->data)
    4.             {
    5.                 Node *r;
    6.                 r=q;
    7.                 B.removeKey(r->data);
    8.             }
    9.             if(q->next==NULL)
    10.                   break;
    11.             q=q->next;
    12.          }
    lỗi do cậu delete r->data lúc này nó sẽ delete luôn cả q -> câu lệnh q=q->next sẽ bị lỗi.
    code ra gió bão

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

  1. Lập trình C Các bác giải dùm em bài trộn 2 danh sách có thứ tự thành 1 danh sách có thứ tự trong DS liên kết đơn
    Gửi bởi letranhoangtai trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 05-09-2012, 02:03 AM
  2. Bài tập C++ Tách chẵn lẽ thành 2 danh sách trong danh sách liên kết đơn?
    Gửi bởi leo009394 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 8
    Bài viết cuối: 01-01-2012, 04:52 PM
  3. đảo ngược vùng liên kết trong danh sách liên kết đơn
    Gửi bởi khongcochi trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 07-07-2011, 10:18 PM
  4. Nhập và xuất danh sách liên kết lồng danh sách liên kết?
    Gửi bởi nvluong_it trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 22-04-2011, 11:30 AM
  5. Lập trình C Danh sách liên kết - Xử lý danh sách liên kết trong lập trình C
    Gửi bởi phucduan trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 08-11-2010, 10:25 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