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

Đề tài: [ Solved ]Lỗi với danh sách liên kết ! Cần giúp đỡ

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

    Wink [ Solved ]Lỗi với danh sách liên kết ! Cần giúp đỡ

    Em mới học giải thuâạ về dslk.Em có cài đặt cái danh sách liên kết đơn+heap+vòng(mới có mấy hàm thôi) nhưng mà sao khi in ra thì nó lại chạy hoải không dừng.Các anh chị pro vào giúp em cái, em xin chân thành cảm ơn!!
    Code:
    #include "iostream.h"
    #include "conio.h"
    
    
    
    
    
    
    
    //cai dat danh sach kep+heap+vong
    
    
    typedef int datatype;
    
    struct node
    {
    	datatype data;
    	node *left,*right;
     };
    
    typedef node* nodeptr ;
    
    class DanhSachKep
    {
    	private:
    	nodeptr list;
    	public:
    	DanhSachKep();
    	int Empty();// ham nay chua dung toi
    	nodeptr MakeNode(datatype);
    	nodeptr InsertLastList(datatype );
    	nodeptr InsertAfterList(nodeptr &,datatype );
    
    	void Xuat_danh_sach();
    };
    DanhSachKep::DanhSachKep()
    {
    	list=new node;
            list->left=list->right=list;
    
    }
    
    nodeptr  DanhSachKep::MakeNode(datatype x)
    {
    	nodeptr p;
    	p->data=x;
    	p->left=p->right=NULL;
    	return p;
    
      }
    
    int DanhSachKep::Empty()
    {
    	return (list->left==list);
      }
    
    nodeptr DanhSachKep::InsertLastList(datatype x) // chen vao cuoi danh sach
    {
    	nodeptr p= MakeNode(x);
    	p->right=list;
    	p->left=list->left;
    	p->left->right=p;
    	list->left=p;
    	return p;
     }
    
    nodeptr DanhSachKep::InsertAfterList(nodeptr &q,datatype x) // chen vao mot nut khac cuoi
    {
    	nodeptr p=MakeNode(x);    // tao nut p co data=x
    	p->right=q->right;
            p->right->left=p;
    	p->left=q;
    	q->right=p;
    
    	return p;
      }
    
    
    
    
    
    void DanhSachKep::Xuat_danh_sach()
    {       cout<<"Danh Sach Da Nhap Vao La:"<<endl;
    	nodeptr p=list->right;
    	while(p!=list)
    	{
    	  cout<<p->data<<" ";
    	  p=p->right;
    	 }
      }
    
    
    
    void main()
      {
      	
    	DanhSachKep S;
            int n;
    	cout<<"Nhap vao so cac phan tu cua danh sach:"<<endl;
    	cin>>n;
    	cout<<"Nhap vao cac phan tu cua danh sach:"<<endl;
    	for(int i=1;i<n;i++)
    	 {
               nodeptr p;
    	   datatype temp;
    	   cin>>temp;
    	   if(i==n)
    	    p=S.InsertLastList(temp);
    
    	   else
    	    p=S.InsertAfterList(p,temp);
    
    	  }
    
    	 S.Xuat_danh_sach();
    	 getch();
    
     }
    HTML Code:
    [HTML][HTML]
    [/HTML][/HTML]

  2. #2
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Đang buồn ngủ nên code hơi vội, hy vọng đúng :

    C Code:
    1. #include "iostream.h"
    2. #include "conio.h"
    3.  
    4. typedef int datatype;
    5.  
    6. struct node
    7. {
    8.     datatype data;
    9.     node *left,*right;
    10. };
    11.  
    12. typedef node* nodeptr ;
    13.  
    14. class DanhSachKep
    15. {
    16.     private:
    17.         nodeptr list;
    18.  
    19.     public:
    20.         DanhSachKep();
    21.         int Empty();
    22.         nodeptr MakeNode(datatype);
    23.         nodeptr InsertLastList(datatype );
    24.         nodeptr InsertAfterList(nodeptr &,datatype );
    25.         void Xuat_danh_sach();
    26. };
    27.  
    28. DanhSachKep::DanhSachKep()
    29. {
    30.     list = new node;
    31.     list->left = list->right = list;
    32. }
    33.  
    34. nodeptr DanhSachKep::MakeNode(datatype x)
    35. {
    36.     nodeptr p = new node;
    37.     p->data = x;
    38.     p->left = p->right = NULL;
    39.     return p;
    40. }
    41.  
    42. int DanhSachKep::Empty()
    43. {
    44.     return (list->right == list);
    45. }
    46.  
    47. nodeptr DanhSachKep::InsertLastList(datatype x)
    48. {
    49.     nodeptr p = list->right, pp = p;
    50.    
    51.     while (p != list)
    52.     {
    53.         pp = p;
    54.         p = p->right;
    55.     }
    56.        
    57.     p = new node;
    58.     p->data = x;
    59.     p->right = list;
    60.     p->left = pp;
    61.     pp->right = p;
    62.  
    63.     return p;
    64.  }
    65.  
    66. nodeptr DanhSachKep::InsertAfterList(nodeptr &q,datatype x) // ko hiểu hàm này làm gì nên ko sửa được
    67. {
    68.    //????
    69.    return NULL;
    70. }
    71.  
    72. void DanhSachKep::Xuat_danh_sach()
    73. {  
    74.     cout<<"Danh Sach Da Nhap Vao La:"<<endl;
    75.     nodeptr p = list->right;
    76.  
    77.     while(p != list)
    78.     {
    79.         cout<<(p->data)<<" ";
    80.         p = p->right;
    81.     }
    82. }
    83.  
    84. void main()
    85. {
    86.     DanhSachKep S;
    87.     int n;
    88.    
    89.     cout<<"Nhap vao so cac phan tu cua danh sach : ";
    90.     cin>>n;
    91.     cout<<"Nhap vao cac phan tu cua danh sach :"<<endl;
    92.    
    93.     for(int i=1;i<=n;i++)
    94.     {
    95.         nodeptr p;
    96.         datatype temp;
    97.         cin>>temp;
    98.        
    99.         S.InsertLastList(temp);
    100.  
    101.         /*
    102.         if(i == n)
    103.             p = S.InsertLastList(temp);
    104.  
    105.         else
    106.             p = S.InsertAfterList(p,temp);
    107.         */
    108.  
    109.     }
    110.  
    111.     S.Xuat_danh_sach();
    112.     cout<<endl;
    113.     getch();
    114.  }
    Đã được chỉnh sửa lần cuối bởi meoconlongvang : 29-10-2008 lúc 01:28 AM.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

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

    nodeptr DanhSachKep::InsertAfterList(nodeptr &q,datatype x) // ko hiểu hàm này làm gì nên ko sửa được
    {
    //????
    return NULL;
    }
    Hàm này r2 nghĩ hắn muốn insert 1 item vào 1 node cụ thể nào đó.

    Cậu kia biết dùng debugger không ? Nếu không thì tui khuyên cậu học cách sử dụng nó trước rồi hẵn viết danh sách liên kết vì nó sẽ dễ dàng hơn cho cậu. Debugger dùng rất dễ, Visual C++ 2008 Express có 1 debugger tuyệt vời, cậu dùng nó cậu sẽ biết chính xác cậu sai chỗ nào và tại sao sai !
    Hơn nữa, code có con trỏ cấp phát với new thì phải có "DESTRUCTOR".
    Tui cho cậu 1 ví dụ đơn giản :
    C++ Code:
    1. #include <iostream>
    2.  
    3. using namespace std;
    4.  
    5. typedef int T;
    6.  
    7. struct Node
    8. {
    9.     T     data;
    10.     Node* left;
    11.     Node* right;
    12. };
    13.  
    14. typedef Node* Tptr;
    15.  
    16. class DoubleLinkedList
    17. {
    18. private :
    19.     Tptr list;
    20.     int  size;
    21. public :
    22.     DoubleLinkedList();
    23.     ~DoubleLinkedList();
    24. public :
    25.     bool isEmpty() const;
    26.     int  getSize() const;
    27.     Tptr makeNode( const T& ) const;
    28.     void insertLast( const T& );
    29.     void showList( ostream&, const char* ) const;
    30. };
    31.  
    32. DoubleLinkedList::DoubleLinkedList()
    33.     :list( NULL ), size( 0 )
    34. {   }
    35.  
    36. DoubleLinkedList::~DoubleLinkedList()
    37. {
    38.     Tptr o = list;
    39.     cout << "\n\n [ ~DoubleLinkedList called ]";
    40.     while( o != NULL ) {
    41.         Tptr temp = o;
    42.         cout << "\n...deleting " << temp->data;
    43.         o = o->right;
    44.         delete temp;
    45.         temp = NULL;
    46.     }
    47. }
    48.  
    49. Tptr DoubleLinkedList::makeNode( const T& x ) const
    50. {
    51.     Tptr p  = new Node;
    52.     p->data = x;
    53.     p->left = p->right = NULL;
    54.     return p;
    55. }
    56.  
    57. bool DoubleLinkedList::isEmpty() const
    58. {
    59.     return size == 0;
    60. }
    61.  
    62. int DoubleLinkedList::getSize() const
    63. {
    64.     return size;
    65. }
    66.  
    67. void DoubleLinkedList::insertLast( const T& x )
    68. {
    69.     Tptr p = makeNode( x );
    70.     if( isEmpty() )
    71.         list = p;
    72.     else {
    73.         // move to last node
    74.         Tptr prev_last = list;
    75.         while( prev_last->right != NULL )
    76.         {
    77.             prev_last = prev_last->right;
    78.         }
    79.         prev_last->right = p;
    80.                 p->left  = prev_last;
    81.     }
    82.     size++;
    83. }
    84.  
    85. void DoubleLinkedList::showList( ostream& o, const char* sep ) const
    86. {
    87.     for( Tptr i = list; i != NULL; i = i->right ) {
    88.         o << i->data << sep;
    89.     }
    90. }
    91.  
    92. int main()
    93. {
    94.     DoubleLinkedList l;
    95.  
    96.     l.insertLast( 1 );
    97.     l.insertLast( 2 );
    98.     l.insertLast( 3 );
    99.  
    100.     l.showList( cout, "->" );
    101.  
    102.     return 0;
    103. }

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 ]Danh sách liên kết
    Gửi bởi pa_ven trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 9
    Bài viết cuối: 12-05-2008, 04:04 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