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

Đề tài: Cách xóa một Node bất kỳ trong danh sách liên kết đơn?

  1. #1
    Ngày gia nhập
    04 2008
    Nơi ở
    Số 22 Ngõ 125 Thanh Xuân Hà Nội
    Bài viết
    10

    Mặc định Cách xóa một Node bất kỳ trong danh sách liên kết đơn?

    Giờ mình làm một danh sách liên kết đơn như sau
    File LinkedList.h
    Code:
    #ifndef _LINKEDLIST_H
    #define _LINKEDLIST_H
    #define MAX 1000
    #include <iostream>
    class LinkedList
    {
    private:
    	struct NodeType{
    		int info;
    		NodeType *next;
    	};
    	NodeType *head;
    	NodeType *tail;
    	int dodai;
    public:
    	//cau tu khong tham so
    	LinkedList()
    	{
    		head = 0;
    		tail = 0;
    		dodai = 0;
    	}
    	//kiem tra rong cho linkedlist
    	bool isEmpty()const
    	{
    		return (head==0);
    	}
    	//Them mot phan tu vao linkedlist
    	void ChenPhanTuDauTien(int a)
    	{
    		
    		NodeType *newNode = new NodeType;
    		newNode->info = a;
    		if(isEmpty())
    		{
    			newNode->next = NULL;
    			head = newNode;
    			tail = newNode;
    		}
    		else
    		{
    			newNode->next = head;
    			head = newNode;
    		}
    
    	}
    	//kiem tra danh sach day
    	bool isFull()const;
    	//chen phan tu vao cuoi
    	void insertEnd(int );
    	//
    	void DeleteNode(int value);
    	int GetInfoHead()
    	{
    		return head->info;
    	}	
    	//Tim kiem phan tu trong danh sach
    	void Search(int );
    	void DuyetLinkedList();
    	void DeleteFromHead();
    	void DeleteFromTail();
    };
    #endif
    file LinkedList.cpp ( Định nghĩa các phương thức của LinkedList)
    Code:
    #include "LinkedList.h"
    #include <iostream>
    using namespace std;
    void LinkedList::DuyetLinkedList()
    {
    	NodeType *p = head;
    	while(p!=NULL)
    	{
    		cout<<p->info<<"; ";
    		p = p->next;
    	}
    }
    //chen vao cuoi danh sach
    void LinkedList::insertEnd(int val)
    {
    	NodeType *newNode = new NodeType;
    	newNode->info = val;
    	if(head == NULL)
    	{
    		tail = newNode;
    		newNode->next = NULL;
    	}
    	else
    	{
    		tail->next = newNode;
    		tail = newNode;
    		newNode->next = NULL;
    	}
    }
    void LinkedList::Search(int value)
    {
    	NodeType *p = head;
    	int dem = 1;
    	while(p!= NULL)
    	{
    		if(p->info == value)
    		{
    			cout<<dem;
    			break;
    		}
    		dem++;
    		p= p->next;
    	}
    	
    }
    void LinkedList::DeleteFromHead()
    {
    	NodeType *p = head;
    	head = head->next;
    	delete p;	
    }
    void LinkedList::DeleteFromTail()
    {
    	NodeType *p = head;
    	while(p->next != tail)
    	{
    		p = p->next;
    	}
    	delete tail;
    	tail = p;
    	tail->next = NULL;
    }
    void LinkedList::DeleteNode(int _val)
    {
    	NodeType *p = head;
    	while(p->info != _val)
    	{
    		p = p->next;
    	}
    	NodeType *curr = p;
    	delete p;
    	curr = p;
    	curr->next = p;
    }
    Khi nhập một danh sách 4,5,6,7 và sử dụng phương thức DeleteNode(6) thì báo lỗi mong các bạn sửa chữa giúp mình với ạ. Mình mới học "Cấu trúc dữ liệu" nên nhiều cái còn không biết mong các bạn chỉ giáo ạ. Mình cảm ơn

  2. #2
    Ngày gia nhập
    02 2010
    Bài viết
    113

    Trích dẫn Nguyên bản được gửi bởi A10932 Xem bài viết
    Giờ mình làm một danh sách liên kết đơn như sau
    File LinkedList.h
    Code:
    #ifndef _LINKEDLIST_H
    #define _LINKEDLIST_H
    #define MAX 1000
    #include <iostream>
    class LinkedList
    {
    private:
    	struct NodeType{
    		int info;
    		NodeType *next;
    	};
    	NodeType *head;
    	NodeType *tail;
    	int dodai;
    public:
    	//cau tu khong tham so
    	LinkedList()
    	{
    		head = 0;
    		tail = 0;
    		dodai = 0;
    	}
    	//kiem tra rong cho linkedlist
    	bool isEmpty()const
    	{
    		return (head==0);
    	}
    	//Them mot phan tu vao linkedlist
    	void ChenPhanTuDauTien(int a)
    	{
    		
    		NodeType *newNode = new NodeType;
    		newNode->info = a;
    		if(isEmpty())
    		{
    			newNode->next = NULL;
    			head = newNode;
    			tail = newNode;
    		}
    		else
    		{
    			newNode->next = head;
    			head = newNode;
    		}
    
    	}
    	//kiem tra danh sach day
    	bool isFull()const;
    	//chen phan tu vao cuoi
    	void insertEnd(int );
    	//
    	void DeleteNode(int value);
    	int GetInfoHead()
    	{
    		return head->info;
    	}	
    	//Tim kiem phan tu trong danh sach
    	void Search(int );
    	void DuyetLinkedList();
    	void DeleteFromHead();
    	void DeleteFromTail();
    };
    #endif
    file LinkedList.cpp ( Định nghĩa các phương thức của LinkedList)
    Code:
    #include "LinkedList.h"
    #include <iostream>
    using namespace std;
    void LinkedList::DuyetLinkedList()
    {
    	NodeType *p = head;
    	while(p!=NULL)
    	{
    		cout<<p->info<<"; ";
    		p = p->next;
    	}
    }
    //chen vao cuoi danh sach
    void LinkedList::insertEnd(int val)
    {
    	NodeType *newNode = new NodeType;
    	newNode->info = val;
    	if(head == NULL)
    	{
    		tail = newNode;
    		newNode->next = NULL;
    	}
    	else
    	{
    		tail->next = newNode;
    		tail = newNode;
    		newNode->next = NULL;
    	}
    }
    void LinkedList::Search(int value)
    {
    	NodeType *p = head;
    	int dem = 1;
    	while(p!= NULL)
    	{
    		if(p->info == value)
    		{
    			cout<<dem;
    			break;
    		}
    		dem++;
    		p= p->next;
    	}
    	
    }
    void LinkedList::DeleteFromHead()
    {
    	NodeType *p = head;
    	head = head->next;
    	delete p;	
    }
    void LinkedList::DeleteFromTail()
    {
    	NodeType *p = head;
    	while(p->next != tail)
    	{
    		p = p->next;
    	}
    	delete tail;
    	tail = p;
    	tail->next = NULL;
    }
    void LinkedList::DeleteNode(int _val)
    {
    	NodeType *p = head;
    	while(p->info != _val)
    	{
    		p = p->next;
    	}
    	NodeType *curr = p;
    	delete p;
    	curr = p;
    	curr->next = p;
    }
    Khi nhập một danh sách 4,5,6,7 và sử dụng phương thức DeleteNode(6) thì báo lỗi mong các bạn sửa chữa giúp mình với ạ. Mình mới học "Cấu trúc dữ liệu" nên nhiều cái còn không biết mong các bạn chỉ giáo ạ. Mình cảm ơn
    Khi xóa 1 node cần chú ý, node cần xóa đó là NODE nào(ko xét danh sách rỗng):
    C Code:
    1. 1. NODE đó là Head
    2. 2. NODE đó là Tail
    3. 3. Nếu NODE đó nằm giữa danh sách thì bạn phải tìm ra NODE nằm trước
    4. NODE cần xóa để sau khi xóa NODE mà bạn muốn xóa thì ta dựa vào NODE nằm trước
    5. NODE cần xóa để nối lại danh sách...

  3. #3
    Ngày gia nhập
    04 2008
    Nơi ở
    Số 22 Ngõ 125 Thanh Xuân Hà Nội
    Bài viết
    10

    Trích dẫn Nguyên bản được gửi bởi utkunglt Xem bài viết
    Khi xóa 1 node cần chú ý, node cần xóa đó là NODE nào(ko xét danh sách rỗng):
    C Code:
    1. 1. NODE đó là Head
    2. 2. NODE đó là Tail
    3. 3. Nếu NODE đó nằm giữa danh sách thì bạn phải tìm ra NODE nằm trước
    4. NODE cần xóa để sau khi xóa NODE mà bạn muốn xóa thì ta dựa vào NODE nằm trước
    5. NODE cần xóa để nối lại danh sách...
    Cảm ơn bạn đã giúp đỡ . Hix giờ mình lại có một thắc mắc về áp dụng DSLK vào đề làm bài toán quản lý sinh viên code của mình gồm những file sau
    file SinhVien.h
    C++ Code:
    1. #ifndef SinhVien_H
    2. #define SinhVien_H
    3. #include <iostream>
    4. #include <cstring>
    5. using namespace std;
    6. template <class T>
    7. class SinhVien
    8. {
    9. private:
    10.     char *masv;
    11.     char *tensv;
    12.     T diem;
    13. public:
    14.     SinhVien();
    15.     ~SinhVien();
    16.     SinhVien(const char *masv,const char *tensv, T diem);
    17.     void PrinteSinhVien();
    18. };
    19. template <class T>
    20. SinhVien<T>::SinhVien()
    21. {
    22.     this->masv = new char[15];
    23.     this->tensv = new char[15];
    24.     masv = "A10932";
    25.     tensv = "Tuan Viet";
    26.     diem = 7;
    27. }
    28. //Cau tu co tham so cua lop sinh vien
    29. template <class T>
    30. SinhVien<T>::SinhVien(const char *msv,const char *tsv, T kq)
    31. {
    32.     masv = new char[strlen(msv)-1];
    33.     strcpy(masv, msv);
    34.     this->tensv = new char[strlen(tsv)-1];
    35.     strcpy(tensv,tsv);
    36.     this->diem = kq;
    37. }
    38. //Huy tu lop sinh vien
    39. template <class T>
    40. SinhVien<T>::~SinhVien()
    41. {
    42.     masv = NULL;
    43.     tensv = NULL;
    44.     delete masv;
    45.     delete tensv;
    46. }
    47. //Phuong thuc in ra thong tin sinh vien
    48. template <class T>
    49. void SinhVien<T>::PrinteSinhVien()
    50. {
    51.     cout<<masv<<"-"<<tensv<<"-"<<diem<<endl;
    52. }
    53. #endif
    file LinkedListSinhVien.h
    C++ Code:
    1. #ifndef LinkedList_H
    2. #define LinkedList_H
    3. #include "SinhVien.h"
    4. template <class T>
    5. struct Node
    6. {
    7.     SinhVien<T> _data;
    8.     Node *link;
    9. };
    10. template <class T>
    11. class LinkedList
    12. {
    13. private:
    14.    
    15.     Node<T> *head;
    16.     Node<T> *tail;
    17. public:
    18.     LinkedList();
    19.     bool EmptyList()const;
    20.     //chen SinhVien
    21.     void ChenVaoDau(SinhVien<T> &A);
    22.     void DuyetLinkedList();
    23. };
    24. #endif
    file LinkedListSinhVien.cpp

    C++ Code:
    1. #include "LinkedListSinhVien.h"
    2. #include <iostream>
    3. using namespace std;
    4. template <class T>
    5. LinkedList<T>::LinkedList()
    6. {
    7.     head = NULL;
    8.     tail = NULL;
    9. }
    10. template <class T>
    11. bool LinkedList<T>::EmptyList()const
    12. {
    13.     return head == NULL;
    14. }
    15. //chen mot node vao dau danh sach
    16. template <class T>
    17. void LinkedList<T>::ChenVaoDau(SinhVien<T> &A)
    18. {
    19.     Node<T> *newNode = new Node<T>;
    20.     newNode->_data = A;
    21.     if(EmptyList())
    22.     {
    23.         head = newNode;
    24.         head = head->link;
    25.     }
    26.     else
    27.     {
    28.         newNode->link = head;
    29.         head = newNode;
    30.         head->link = tail;
    31.     }
    32. }
    33. //duyet danh sach
    34. template <class T>
    35. void LinkedList<T>::DuyetLinkedList()
    36. {
    37.     Node<T> *p = head;
    38.     while(p!= NULL)
    39.     {
    40.         p->_data.PrinteSinhVien();
    41.         p = p->link;
    42.     }
    43. }
    file main.cpp
    C++ Code:
    1. #include "LinkedListSinhVien.h"
    2. #include "SinhVien.h"
    3. #include <iostream>
    4. using namespace std;
    5. int main()
    6. {
    7.     SinhVien<int> a("a10932","Tuan Viet",9);
    8.     LinkedList<int> ll;
    9.     ll.ChenVaoDau(a);
    10.     ll.DuyetLinkedList();
    11.     return 0;
    12. }
    Khi tớ viết project nhỏ này với visual studio C++ 2010 thì báo lỗi không biên dịch đựoc mặc dù không có lỗi sai cú pháp. Mong bạn và các tiền bối giúp đỡ. Mình xin cảm ơn ạ !
    Đã được chỉnh sửa lần cuối bởi A10932 : 12-01-2013 lúc 10:15 PM.

  4. #4
    Ngày gia nhập
    02 2010
    Bài viết
    113

    Trích dẫn Nguyên bản được gửi bởi A10932 Xem bài viết
    Cảm ơn bạn đã giúp đỡ . Hix giờ mình lại có một thắc mắc về áp dụng DSLK vào đề làm bài toán quản lý sinh viên code của mình gồm những file sau
    file SinhVien.h
    C++ Code:
    1. #ifndef SinhVien_H
    2. #define SinhVien_H
    3. #include <iostream>
    4. #include <cstring>
    5. using namespace std;
    6. template <class T>
    7. class SinhVien
    8. {
    9. private:
    10.     char *masv;
    11.     char *tensv;
    12.     T diem;
    13. public:
    14.     SinhVien();
    15.     ~SinhVien();
    16.     SinhVien(const char *masv,const char *tensv, T diem);
    17.     void PrinteSinhVien();
    18. };
    19. template <class T>
    20. SinhVien<T>::SinhVien()
    21. {
    22.     this->masv = new char[15];
    23.     this->tensv = new char[15];
    24.     masv = "A10932";
    25.     tensv = "Tuan Viet";
    26.     diem = 7;
    27. }
    28. //Cau tu co tham so cua lop sinh vien
    29. template <class T>
    30. SinhVien<T>::SinhVien(const char *msv,const char *tsv, T kq)
    31. {
    32.     masv = new char[strlen(msv)-1];
    33.     strcpy(masv, msv);
    34.     this->tensv = new char[strlen(tsv)-1];
    35.     strcpy(tensv,tsv);
    36.     this->diem = kq;
    37. }
    38. //Huy tu lop sinh vien
    39. template <class T>
    40. SinhVien<T>::~SinhVien()
    41. {
    42.     masv = NULL;
    43.     tensv = NULL;
    44.     delete masv;
    45.     delete tensv;
    46. }
    47. //Phuong thuc in ra thong tin sinh vien
    48. template <class T>
    49. void SinhVien<T>::PrinteSinhVien()
    50. {
    51.     cout<<masv<<"-"<<tensv<<"-"<<diem<<endl;
    52. }
    53. #endif
    file LinkedListSinhVien.h
    C++ Code:
    1. #ifndef LinkedList_H
    2. #define LinkedList_H
    3. #include "SinhVien.h"
    4. template <class T>
    5. struct Node
    6. {
    7.     SinhVien<T> _data;
    8.     Node *link;
    9. };
    10. template <class T>
    11. class LinkedList
    12. {
    13. private:
    14.    
    15.     Node<T> *head;
    16.     Node<T> *tail;
    17. public:
    18.     LinkedList();
    19.     bool EmptyList()const;
    20.     //chen SinhVien
    21.     void ChenVaoDau(SinhVien<T> &A);
    22.     void DuyetLinkedList();
    23. };
    24. #endif
    file LinkedListSinhVien.cpp

    C++ Code:
    1. #include "LinkedListSinhVien.h"
    2. #include <iostream>
    3. using namespace std;
    4. template <class T>
    5. LinkedList<T>::LinkedList()
    6. {
    7.     head = NULL;
    8.     tail = NULL;
    9. }
    10. template <class T>
    11. bool LinkedList<T>::EmptyList()const
    12. {
    13.     return head == NULL;
    14. }
    15. //chen mot node vao dau danh sach
    16. template <class T>
    17. void LinkedList<T>::ChenVaoDau(SinhVien<T> &A)
    18. {
    19.     Node<T> *newNode = new Node<T>;
    20.     newNode->_data = A;
    21.     if(EmptyList())
    22.     {
    23.         head = newNode;
    24.         head = head->link;
    25.     }
    26.     else
    27.     {
    28.         newNode->link = head;
    29.         head = newNode;
    30.         head->link = tail;
    31.     }
    32. }
    33. //duyet danh sach
    34. template <class T>
    35. void LinkedList<T>::DuyetLinkedList()
    36. {
    37.     Node<T> *p = head;
    38.     while(p!= NULL)
    39.     {
    40.         p->_data.PrinteSinhVien();
    41.         p = p->link;
    42.     }
    43. }
    file main.cpp
    C++ Code:
    1. #include "LinkedListSinhVien.h"
    2. #include "SinhVien.h"
    3. #include <iostream>
    4. using namespace std;
    5. int main()
    6. {
    7.     SinhVien<int> a("a10932","Tuan Viet",9);
    8.     LinkedList<int> ll;
    9.     ll.ChenVaoDau(a);
    10.     ll.DuyetLinkedList();
    11.     return 0;
    12. }
    Khi tớ viết project nhỏ này với visual studio C++ 2010 thì báo lỗi không biên dịch đựoc mặc dù không có lỗi sai cú pháp. Mong bạn và các tiền bối giúp đỡ. Mình xin cảm ơn ạ !
    post lên cho xin luôn cái dòng lỗi...tks

  5. #5
    Ngày gia nhập
    04 2008
    Nơi ở
    Số 22 Ngõ 125 Thanh Xuân Hà Nội
    Bài viết
    10

    Đây là lỗi khi mình build project. Mong các bạn sửa chữa giùm mình. Mình cảm ơn ạ

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

  1. Hoán vị Node trong danh sách liên kết
    Gửi bởi rongphuthuy1 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 16
    Bài viết cuối: 04-05-2013, 12:30 AM
  2. Mã nguồn C Lỗi xóa node trong danh sách liên kết đơn. Giúp mình với, cám ơn nhiều !!!
    Gửi bởi shizuoka trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 09-09-2012, 09:02 PM
  3. Kỹ thuật C++ Xóa Node ở vị trí k trong Danh Sách Liên Kết đơn vòng
    Gửi bởi it_p0k3t 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: 27-02-2012, 06:38 PM
  4. lỗi khi tạo node mới trong danh sách liên kết
    Gửi bởi hoanghiep9x trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 21-03-2011, 11:00 PM
  5. code xóa node trong danh sách liên kết. giúp sửa
    Gửi bởi vanmeo trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 13
    Bài viết cuối: 12-07-2010, 02:21 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