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

Đề tài: [C++] danh sách liên kết đơn sau khi xóa phần tử không xuất ra được

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

    Mặc định [C++] danh sách liên kết đơn sau khi xóa phần tử không xuất ra được

    mình mới nhập môn ctdl, đây là bài mình viết để nhập vào danh sách liên kết 1 dãy số nguyên sau đó xóa phần tử đầu tiên và phần tử cuối cùng rồi xuất ra nhưng ko đc, các bạn xem giúp mình
    Code:
    #include <iostream>
    #include <conio.h>
    
    using namespace std;
    
    typedef struct tagNode
    {
    	int data;
    	tagNode* next;
    }Node;
    
    typedef struct tagList
    {
    	Node* pHead;
    	Node* pTail;
    }List;
    
    Node* createNode(int x);
    void nhap(List &l);
    void xuat(List l);
    void themdau(List &l, Node *p);
    void themcuoi(List &l, Node *p);
    void themsau(List &l, Node *q, Node* p);
    void xoadau(List &l);
    void xoacuoi(List &l);
    int xoa(List &l, int x);
    
    int main()
    {
    	List l;
    	int x;
    	l.pHead = l.pTail = NULL;
    	nhap(l);
    	xuat(l);
    	cout<<"\ndanh sach sau khi xoa phan tu dau: "<<endl;
    	xoadau(l);
    	xuat(l);
    	cout<<"\ndanh sach sau khi xoa phan tu cuoi: "<<endl;
    	xoacuoi(l);
    	xuat(l);
    	cout<<endl;
    	//xoa(l,6);
    	//xuat(l);
    	getch();
    	return 0;
    }
    
    Node* createNode(int x)
    {
    	Node* p = new Node;
    	p->data = x;
    	p->next = NULL;
    	return p;
    }
    
    void nhap(List &l)
    {
    	Node *p;
    	int x;
    	cout<<"moi ban nhap gia tri cho danh sach(nhap 01 de dung): ";
    	do
    	{
    		cin>>x;
    		if(x == 01) break;
    		p = createNode(x);
    		themdau(l,p);
    	}
    	while(1);
    }
    
    void xuat(List l)
    {
    	Node* p = l.pHead;
    	if(p == NULL) return;
    	else 
    	{
    		while(p)
    		{
    			cout<<p->data<<" ";
    			p = p->next;
    		}
    	}
    }
    
    void themdau(List &l, Node *p)
    {
    	int x;
    	cout<<"nhap gia tri can them vao dau danh sach: ";
    	cin>>x;
    	p = createNode(x);
    	if(l.pHead==NULL)
    		l.pHead = l.pTail = p;
    	else
    	{
    		p->next = l.pHead;
    		l.pHead = p;
    	}
    }
    void themcuoi(List &l, Node* p)
    {
    	int x;
    	cout<<"nhap gia tri can them vao cuoi danh sach: ";
    	cin>>x;
    	p = createNode(x);
    	if(l.pHead = NULL)
    		l.pHead = l.pTail = p;
    	else
    	{
    		l.pTail->next = p;
    		l.pTail = p;
    	}
    }
    void themsau(List &l, Node* q, Node *p)
    {
    	int x;
    	cout<<"nhap gia tri can them vao danh sach: ";
    	cin>>x;
    	p = createNode(x);
    	if(p==NULL) return;
    	if(q!=NULL)
    	{
    		p->next = q->next;
    		q->next = p;
    		if(q==l.pTail) l.pTail = p;
    	}
    	else themdau(l,p);
    }
    void xoadau(List &l)
    {
    	Node *p = l.pHead;
    	if(l.pHead==NULL) return;
    	else
    	{
    		p = p->next;
    		free(p);
    	}
    }
    void xoacuoi(List &l)
    {
    	Node *p = l.pHead;
    	if(l.pTail==NULL)
    		return;
    	else
    	{
    		while(p->next!=l.pTail)
    			p = p->next;
    		p->next = NULL;
    		l.pTail = p;
    	}
    }
    int xoa(List &l, int x)
    {
    	Node* p = l.pHead;
    	Node* q = NULL;
    	cout<<"nhap gia tri can xoa trong danh sach: ";
    	cin>>x;
    	while(p != NULL)
    	{
    		if(p->data==x) break;
    		q = p;
    		p = p->next;
    	}
    	if(p==NULL) return 0;
    	if(q!=NULL)
    	{
    		if(p == l.pTail)
    		l.pTail = q;
    		q ->next = p->next;
    		delete p;
    	}
    	else
    	{
    		l.pHead = p->next;
    		if(l.pHead==NULL) l.pTail =NULL;
    	}
    	return 1;
    }

  2. #2
    Ngày gia nhập
    08 2011
    Bài viết
    117

    Đã xoá mấy hàm bạn không dùng đến đi cho gọn code. nên tập thói quen giải phóng bộ nhớ khi không sử dụng ngay từ khi tập code. chúc bạn học tốt.

    C Code:
    1. #include <iostream>
    2.  
    3. using namespace std;
    4.  
    5. typedef struct tagNode
    6. {
    7.     int data;
    8.     tagNode* next;
    9. }Node;
    10.  
    11. typedef struct tagList
    12. {
    13.     Node* pHead;
    14.     Node* pTail;
    15. }List;
    16.  
    17. Node* createNode(int x);
    18. void nhap(List &l);
    19. void xuat(List l);
    20. void themdau(List &l, Node *p);
    21. void xoadau(List &l);
    22. void xoacuoi(List &l);
    23.  
    24. int main()
    25. {
    26.     List l;
    27.     int x;
    28.     l.pHead = l.pTail = NULL;
    29.     nhap(l);
    30.     xuat(l);
    31.     cout<<"\ndanh sach sau khi xoa phan tu dau: "<<endl;
    32.     xoadau(l);
    33.     xuat(l);
    34.     cout<<"\ndanh sach sau khi xoa phan tu cuoi: "<<endl;
    35.     xoacuoi(l);
    36.     xuat(l);
    37.     cout<<endl;
    38.     return 0;
    39. }
    40.  
    41. Node* createNode(int x)
    42. {
    43.     Node* p = new Node;
    44.     p->data = x;
    45.     p->next = NULL;
    46.     return p;
    47. }
    48.  
    49. void nhap(List &l)
    50. {
    51.     Node *p;
    52.     int x;
    53.     cout<<"moi ban nhap gia tri cho danh sach(nhap 01 de dung): ";
    54.     do
    55.     {
    56.         cin>>x;
    57.         if(x == 01) break;
    58.         p = createNode(x);
    59.         themdau(l,p);
    60.     }
    61.     while(1);
    62. }
    63.  
    64. void xuat(List l)
    65. {
    66.     Node* p = l.pHead;
    67.     if(p == NULL) return;
    68.     else
    69.     {
    70.         while(p)
    71.         {
    72.             cout<<p->data<<" ";
    73.             p = p->next;
    74.         }
    75.     }
    76. }
    77.  
    78. void themdau(List &l, Node *p)
    79. {
    80.     if(l.pHead==NULL)
    81.         l.pHead = l.pTail = p;
    82.     else
    83.     {
    84.         p->next = l.pHead;
    85.         l.pHead = p;
    86.     }
    87. }
    88. void xoadau(List &l)
    89. {
    90.     Node *p = l.pHead;
    91.     if(l.pHead==NULL) return;
    92.     else
    93.     {
    94.         l.pHead = p->next;
    95.         free(p);
    96.     }
    97. }
    98. void xoacuoi(List &l)
    99. {
    100.     Node *p = l.pHead;
    101.     if(l.pTail==NULL)
    102.         return;
    103.     else
    104.     {
    105.         while(p->next!=l.pTail)
    106.             p = p->next;
    107.         p->next = NULL;
    108.         free(l.pTail);
    109.         l.pTail = p;
    110.     }
    111. }

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

    cám ơn bạn đã góp ý, bài của mình sao ko xuất ra đc vậy bạn

  4. #4
    Ngày gia nhập
    08 2011
    Bài viết
    117

    Trích dẫn Nguyên bản được gửi bởi thanh_vien_moi Xem bài viết
    cám ơn bạn đã góp ý, bài của mình sao ko xuất ra đc vậy bạn
    Bài của bạn xuất ra bình thường mình không hiểu ý bạn lắm. bạn chạy code mình post lên sau đó nhập các số khi nào không muốn nhập nữa bạn nhập số 1 nó sẽ dừng việc nhập và xuất ra. mình tưởng code do bạn viết thì bạn phải biết chứ

  5. #5
    Ngày gia nhập
    02 2013
    Bài viết
    10

    cám ơn bạn mình sửa đc rồi

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

  1. Trả lời: 5
    Bài viết cuối: 13-12-2012, 02:54 PM
  2. xóa 1 phần tử có giá trị x trong danh sách liên kết
    Gửi bởi stingblue trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 13-07-2011, 12:54 PM
  3. Bài tập C++ danh sách liên kết đơn: xóa phần tử đứng sau 1 số nào đó
    Gửi bởi amidamaru trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 10
    Bài viết cuối: 19-07-2010, 02:35 PM
  4. Bài tập C Xóa một phần tử trong danh sách liên kết
    Gửi bởi without_you trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 10
    Bài viết cuối: 26-04-2010, 10:48 PM
  5. xóa phần tử cuối của danh sách liên kết đơn
    Gửi bởi giaicuu_505_1412 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: 20-10-2009, 04:04 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