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

Đề tài: Lỗi không chèn trước, chèn sau vào danh sách đơn được?

  1. #1
    Ngày gia nhập
    03 2011
    Bài viết
    22

    Wink Lỗi không chèn trước, chèn sau vào danh sách đơn được?

    các ac giúp e tìm hiểu nguyên nhân tại sao e không chèn trước, chen sau danh sách liên kết đơn được
    e đã tạo được danh sách, hiển thị sách sách đó, nhưng khi chèn vào thì sau khi nhập nội dung phần tử muốn chèn vào thì chương trình thoát ra luôn.........
    Code:
    #include<stdio.h>
    #include<stdlib.h>
    #include<conio.h>
    #include<ctype.h>
    
    typedef struct node
    {
           int info;
           struct node *next;
    }node;
    typedef struct              
    {
           node *dau;
           node *cuoi;
    }list;
    node *p1;//khai bao con tro
    list ds;
    
    void *nhap(list &ds);//khai bao ham nhap vao node
    void hienthi(list ds);//khai bao ham hien thi
    void *chentruoc(list &ds);//khai bao ham chen truoc
    void *chensau(list &ds);//khai bao ham chen sau
    void *xoa(list &ds);//khai bao ham chen truoc
    
    //ham chinh-----------------------------------------
    
    
    int main()
    {
        int tl;
        printf("\nDANH SACH LIEN KET DON\n");
        nhap(ds);
        hienthi(ds);
        printf("\n Chon chuc nang:\n1. chen truoc\n2.chen sau\n3.xoa\n0.thoat\n.... ");
        scanf("%d", &tl);
        switch (tl)
        {
                  case 1:
                       {
                            chentruoc(ds);
                            hienthi(ds);
                            getch();
                       }break;
                  case 2:
                       {
                              chensau(ds);
                              hienthi(ds);
                              getch();
                       }break;
                  case 3:
                       {
                              xoa(ds);
                              hienthi(ds);
                              getch();
                       }break;
                  case 4:
                       exit(1);
        }
        getch();
        return 0;
    }
    //dinh nghia ham------------------------------------------------
    
    
    void *nhap(list &ds)//ham nhap phan tu cho node
    {
         char tl;//bien cuc bo trong ham, khong he anh huong den bien tl da khai bao o tren
         do
         {
              node *p;//khai bao con tro p tro vao nut (trong pham vi ham)
              p= new node; //tao node moi
              
              //nhap noi dung cho node moi
              
              printf("\nNhap vao noi dung cho node: ");
              scanf("%d", &(p->info));
              
              //moc nut moi vao danh sach
              if (ds.dau==NULL)
              {
                 ds.dau=p;
                 ds.cuoi=p;
              }
              else
              {
                  ds.cuoi->next=p;//gan cho con tro cuoi tro vao p(truoc do no tro vao NULL)
                  ds.cuoi=p;
              }
             
              //hoi dieu kien lap
              printf("\nBan co muon nhap nua hay khong: (c/k)   ");
              fflush(stdin);
              scanf("%c", &tl);
         }
         while (tl!='k');
         ds.cuoi->next=NULL;// cho con tro cua nut cuoi cung tro vao gia tri NULL
    }
    
    
    void hienthi(list ds) //ham hien thi danh sach
    {
         node *hientai;//khai bao con tro hien thoi (dung de dich tu node dau den node cuoi cua danh sach)
         hientai=ds.dau;//dat con tro hientai tro vao node dau tien cua danh sach
         if (hientai==NULL)
         printf("\nDanh sach khong co phan tu nao: ");
         else
         {
             printf("\nCac phan tu cua danh sach la:");
             do
             {
                   printf("%3d",hientai->info);//in ra truong info cua node hientai dang tro vao
                   hientai=hientai->next;//dich con tro hientai tro sang node ke tiep
             }
             while (hientai!=NULL);
         }
    }
    
    
    
    void *chentruoc(list &ds) //ham chen truoc danh sach
    {
         char tl;
         node *pt;
         do
         {
              printf("\nNhap phan noi dung phan tu moi: ");
              scanf("%d", &(pt->info));
              if (ds.dau==NULL)
              {
                 ds.dau=pt;
                 ds.cuoi=pt;
              }
              else
              {
                  
                  pt->next=ds.dau;
                  ds.dau=pt;              
              }
              printf("\nCo chen nua khong: c/k ");
              fflush(stdin);
              scanf("%c", &tl);
         }
         while (tl!='k');
    }
    
    
    void *chensau(list &ds)
    {
         char tl;
         node *pt;
         do
         {
              printf("\nNhap phan noi dung phan tu moi: ");
              scanf("%d", &(pt->info));
              if (ds.dau==NULL)
              {
                 ds.dau=pt;
                 ds.cuoi=pt;
              }
              else
              {
                 ds.cuoi->next=pt;
                 ds.cuoi=pt;
                 ds.cuoi->next=NULL;
              }
              printf("\nCo chen nua khong: c/k ");
              fflush(stdin);
              scanf("%c", &tl);
         }
         while ((tl!='k') || (tl!='K'));
    }
    
    
    void *xoa(list &ds)
    {
         int so_xoa;
         node *p,*p1;
         printf("\nNhap vao so muon xoa: ");
         scanf("%d",&so_xoa);
         p=ds.dau;//p tro vao dau danh sach
         
         //chia lam 3 truong hop
         if(ds.dau==NULL)//danh sach rong
         printf("\nDanh sach rong: ");
         else
         {
             if(p->info=so_xoa)//nut can xoa o dau danh sach
             {
                ds.dau=p->next;
                free(p);//huy con tro p
             }
             else//nut can xoa nam trong danh sach
             {
                       do 
                       {
                         p1=p;
                         p=p->next;
                       }
                        while(p->info!=so_xoa);
                       //ket thuc vong lap nay p chinh la con tro tro vao nut can xoa
                       p1->next = p->next;
                       free(p);//huy con tro p
             }
         }
    }

  2. #2
    Ngày gia nhập
    01 2011
    Nơi ở
    -Mountain-
    Bài viết
    768

    - Lỗi của bạn là chưa cấp phát bộ nhớ cho node ở hàm chèn trước, chèn sau
    - Mà bạn bỏ mấy cái * trước tên hàm đi. Toàn sao nhìn hoa mắt quá @@

  3. #3
    Ngày gia nhập
    11 2010
    Nơi ở
    hell
    Bài viết
    165

    làm thêm * chi ta khó hỉu khó hỉu hehe

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

    Trích dẫn Nguyên bản được gửi bởi beautifulsoul84hung Xem bài viết
    - Lỗi của bạn là chưa cấp phát bộ nhớ cho node ở hàm chèn trước, chèn sau
    - Mà bạn bỏ mấy cái * trước tên hàm đi. Toàn sao nhìn hoa mắt quá @@
    cụ thể là như thế nào, bác có thể chỉ giáo cho e được không ah!!!!
    thank bác nhiều!!!

  5. #5
    Ngày gia nhập
    03 2011
    Bài viết
    22

    em vừa thêm dòng lệnh
    Code:
    pt=new node;
    vào thì hình như có vẻ được rồi, nhưng e lại gặp vấn đề mới là khi hiện thị hình như e bị lỗi lên toàn màn hình nhắp nháy như ma trận ý, xin các bác xem lại giùm e, cảm ơn ah!!!

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

  1. Bài tập C++ Tách chẵn lẽ thành 2 danh sách trong danh sách liên kết đơn?
    Gửi bởi leo009394 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 8
    Bài viết cuối: 01-01-2012, 04:52 PM
  2. Khai báo và hiển thị danh sách sinh viên bằng danh sách đặc trong C
    Gửi bởi tyrant trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 0
    Bài viết cuối: 04-10-2011, 10:23 AM
  3. Bài tập C++ Nhập xuất danh sách liên kết với lập trình C++, lúc nào cũng ra danh sách rỗng?
    Gửi bởi Le thi Ngoc Lan 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: 24-01-2011, 12:37 PM
  4. Nhập xuất danh sách bằng Danh Sách Liên Kết như thế nào?
    Gửi bởi hvcuongit 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: 10-12-2010, 10:16 AM
  5. Danh sách liên kết, code nhập danh sách sinh viên có lỗi làm sao sửa?
    Gửi bởi acmilan 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: 10-04-2009, 08:24 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