Information Technology VietNam

Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

2 posters

    3-2 Xóa danh sách liên kết

    Vy Thanh Định
    Vy Thanh Định
    Web Master
    Web Master


    Giới tính : Nam Bài gửi : 228
    Tổng Điểm : 544
    Điểm Thưởng : 16
    Sinh Nhật : 19/05/1990 Bị Dụ Dỗ : 11/09/2009
    Tuổi : 34

    3-2 Xóa danh sách liên kết Empty 3-2 Xóa danh sách liên kết

    Bài gửi by Vy Thanh Định 8/11/2009, 04:28

    Code:
    #include "iostream.h"
    #include "alloc.h"

    typedef struct NODE
    {
       unsigned x;
       NODE *next;
    };
    typedef struct LIST
    {
       NODE *pHead;
       NODE *pTail;
    };

    void CreateList(LIST &l)
    {
       l.pHead = l.pTail = NULL;
    }
    NODE *GetNode(unsigned x)
    {
       NODE *p = new NODE;
       if(p == NULL) cout<<"Khong du bo nho!\n";
       p->x = x;
       p->next = NULL;
       return p;
    }

    void InsertHead(LIST &l,NODE *x)
    {
       if(l.pHead == NULL)
          l.pHead = l.pTail = x;
       else
       {
          x->next = l.pHead;
          l.pHead = x;
       }
    }

    NODE *AddFirst(LIST &l,unsigned x)
    {
       NODE *p = GetNode(x);
       if(p == NULL)
          return NULL;
       InsertHead(l,p);
       return p;
    }

    void InPut(LIST &l)
    {
       int i,x,n;
       cout<<"Co bao nhiu phan tu: "; cin>>n;
       for(i = 0; i < n; i++)
       {
          do{
             cout<<"x["<<i<<"] (x > 0) = ";
             cin>>x;
             if(x <= 0) cout<<"Ai cho phep ban nhap sai dieu kien!\n";
          }while(x <= 0);
          AddFirst(l,x);
       }
    }

    void OutPut(LIST l)
    {
       NODE *p; int i;
       for(p = l.pHead; p != NULL; p = p->next)
       {
          cout<<p->x<<"  ";
       }
    }
    void RemoveHead(LIST &l)
    {
       NODE *p;
       p = l.pHead;
       if(p == NULL) return;
       l.pHead = l.pHead->next;
       free(p);
       cout<<"\nDanh sach sau khi xoa dau: ";
       OutPut(l);
    }

    void RemoveTail(LIST &l)
    {
       NODE *p,*q;
       p = l.pHead;
       if(p == NULL) return;
       if(p->next == NULL)
       {
          RemoveHead(l);
          return;
       }
       while(p->next != NULL)
       {
          q = p;
          p = p->next;
       }
       q->next = NULL;
       free(p);
       cout<<"\nDanh sach sau khi xoa cuoi: ";
       OutPut(l);   
    }

    void RemoveLocal(LIST &l,int viTri)
    {
       NODE *r, *p, *q;
       int found = 0, count = 1;
       p = l.pHead;
       while(p != NULL && found == 0)
       {
          if(count == viTri)
          {
             q = p->next;
             p->next = q->next;
             q->next = NULL;
             free(q);
             found = 1;
          }
          count++;
          p = p->next;
       }
       if(found == 0) cout<<"Khong tim thay node can xoa\n";
       else
       {
          cout<<"Danh sach sau khi xoa node thu "<<viTri<<": ";
          OutPut(l);
       }
    }

    void XoaConTroCoGiaTriK(LIST &l,unsigned k)
    {
       NODE *p, *q;
       int found = 0;
       p = l.pHead;
       if(p->x == k)
       {
          l.pHead = p->next;
          free(p);
          found = 1;
       }
       else
       for(; p != NULL; p = p->next)
       {
          q = p->next;
          if(q->x == k)
          {
             p->next = q->next;
             q->next = NULL;
             free(q);
             found = 1;
             break;
          }
       }
       if(found == 0) cout<<"Khong tim thay node can xoa\n";
       else
       {
          cout<<"Danh sach sau khi xoa: ";
          OutPut(l);
       }
    }

    main()
    {
       LIST l;
       NODE *p;
       int d;
       CreateList(l);
       do{
          cout<<"\n+-----------------------------+";
          cout<<"\n|            MENU            |";
          cout<<"\n+-----------------------------+";
          cout<<"\n|  1. Nhap vao danh sach      |";
          cout<<"\n|  2. Xuat danh sach          |";
          cout<<"\n|  3. Xoa node dau dsach      |";
          cout<<"\n|  4. Xoa node cuoi dsach    |";
          cout<<"\n|  5. Xoa node chi dinh      |";
          cout<<"\n|  6. Xoa node co gia tri k  |";
          cout<<"\n+-----------------------------+";
          cout<<"\n|  0. Thoat khoi chuong trinh |";
          cout<<"\n+-----------------------------+\n";
          cin>>d;
          switch(d)
          {
             case 1 : InPut(l); break;
             case 2 : OutPut(l); break;
             case 3 : RemoveHead(l); break;
             case 4 : RemoveTail(l); break;
             case 5 :
             {
                int viTri;
                cout<<"Nhap vi tri can xoa: ";
                cin>>viTri;
                RemoveLocal(l,viTri - 1); break;
             }
             case 6 :
             {
                int k;
                cout<<"Nhap gia tri con tro can xoa: ";
                cin>>k;
                XoaConTroCoGiaTriK(l,k); break;
             }
          }
       }while(d != 0);
    }
    ban_tuongky
    ban_tuongky
    Moderator
    Moderator


    Giới tính : Nam Bài gửi : 91
    Tổng Điểm : 198
    Điểm Thưởng : 0
    Bị Dụ Dỗ : 11/09/2009

    3-2 Xóa danh sách liên kết Empty Re: 3-2 Xóa danh sách liên kết

    Bài gửi by ban_tuongky 8/11/2009, 09:39

    thank you@!!!!!!!!!!!!!!!!!!!

      Hôm nay: 2/11/2024, 20:40