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

Đề tài: không thể xóa node theo ý muốn dc

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

    Mặc định không thể xóa node theo ý muốn dc

    tớ có một cấu trúc Node Nhu sau
    Code:
    struct sach
    {
         int maso;
         sach* next;
    };
    và đây la hàm xóa node theo ma số của sách của mình
    void delnode(sach* &pHead)
    {
    	sach* q;
    	if(pHead==NULL)
    	cout<<" NOT DEL\n";
    	else
    	{
    		int x;
    		cout<<"Nhap ma so sach can xoa:";
    		cin>>x;
    		while(pHead!=NULL && pHead->maso!=x)
    		{
    			q=pHead;
    			pHead=pHead->next;
    		}
    		if(pHead==NULL)
    		cout<<"khong co sach can xoa:";
    		else
    		{
    			pHead->next=q->next;
    			free (q);
    		}
    	}
    }
    và đây la hàm xóa node thứ hai của mình
    Code:
    void delnode(sach* &pHead)
    {
    	sach* g;
    	int t;
    	if(pHead!=NULL)
    	{
    		cout<<"Insert SID:";
    		cin>>t;
    		while(pHead->maso!=t)
    		{
    			if(pHead->next==NULL)
    			break;
    			else
    			{
    			g=pHead;
    			pHead=pHead->next;
    			}
    		}
    		if(pHead==NULL)
    		cout<<"\nKhong co sach can xoa";
    		else
    		{
    			g->next=pHead->next;
                                           free(g);
    		}
    	}else
    		cout<<"\nKhong co du lieu"<<endl;
    	getch();
    }
    mình đã thử bằng cả hai cách,nhung không thể cho kết quả chính xác được.mong được chỉ giáo.
    Đã được chỉnh sửa lần cuối bởi thaibinhindex : 26-02-2009 lúc 02:06 PM.

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

    Xời ơi,bài của bác ko dùng vòng lặp thì xét đươc mấy phần tử trong danh sách hả bác.
    em là new member,có gì ko đúng mong các bác cùng góp ý nhé

    C Code:
    1. void delnode(sach *&pHead)
    2. {
    3.  if(pHead==NULL)
    4.  
    5.  cout<<"\nKhong co danh sach";
    6.  
    7.  else
    8.  {
    9.   int x;
    10.   sach *a,*pnode;
    11.  
    12.   a=pHead;
    13.   pnode=NULL;
    14.   cout<<"\nNhap ma so sach";cin>>x;
    15.  
    16.   while(a->maso!=x)
    17.  {
    18.   pnode=a;
    19.   a=a->next;
    20.  }
    21.  
    22.   if(a==NULL)
    23.   {
    24.   cout<<"\nKhong co sach nay";return;
    25.   }
    26.  
    27.   else
    28.   if(pnode==NULL) //node can xoa la phan tu dau danh sach        
    29.   qHead=a->next;
    30.   else
    31.   pnode->next=a->next;
    32.   delete a;
    33.  }
    34. }

    Lần đầu tham gia nên viết còn run,mong các bác thông cảm

    Bỏ code vào tag code bạn nhé
    Đã được chỉnh sửa lần cuối bởi zkday2686 : 03-03-2009 lúc 01:02 PM.

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

    @thaibinhindex: chú ý không di chuyển pHead đi nếu không sẽ hỏng danh sách
    @nghia_seo_1111988: Chào mừng bạn tham gia diễn đàn, hãy bỏ chút thời gian đọc nội quy và hãy cho code vào tag code. Vòng while trên của bạn có thể vô tận.

    C Code:
    1. void delnode(sach* &pHead)
    2. {
    3.     sach* g,*p = pHead;
    4.     int t;
    5.     if(pHead!=NULL)
    6.     {
    7.         cout<<"Insert SID:";
    8.         cin>>t;
    9.         while(p->maso!=t)
    10.         {
    11.             if(p->next==NULL)
    12.             break;
    13.             g=pHead;
    14.             p=p->next;
    15.         }
    16.         if(pHead==NULL)
    17.         cout<<"\nKhong co sach can xoa";
    18.         else
    19.         {
    20.             g->next=p->next;
    21.                                        delete p;
    22.         }
    23.     }else
    24.         cout<<"\nKhong co du lieu"<<endl;
    25.     getch();
    26. }

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

    Cái sai của bạn là xóa q ( hoặc p ) ra khỏi danh sách mà chưa cập nhật lại liên kết cho nó. Giả sử bạn xóa q thì bạn phải trỏ tới node trước node q, tôi đặt là temp. Muốn xóa q thì temp-> next = q->next, rồi delete q.

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

  1. Xóa hết các NODE tron cây như thế nào?
    Gửi bởi namboygacon 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: 29-04-2011, 01:28 PM
  2. xóa node có ràng buộc
    Gửi bởi dangwru trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 4
    Bài viết cuối: 29-06-2010, 11:29 AM
  3. Xóa Node trong treeview
    Gửi bởi dangwru trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 26-06-2010, 11:30 PM
  4. Tạo cây tìm kiếm thêm node và xóa
    Gửi bởi huy1710 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: 03-03-2010, 05:45 PM
  5. Kỹ thuật xóa node trên cây nhị phân
    Gửi bởi hiepsithong trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 23-12-2006, 08:20 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