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

Đề tài: Danh sách liên kết | bài tập link list có lỗi làm sao sửa?

  1. #1
    Ngày gia nhập
    08 2008
    Nơi ở
    ha noi
    Bài viết
    79

    Mặc định Danh sách liên kết | bài tập link list có lỗi làm sao sửa?

    Mình có 1 bài tập về link list mình làm xong rồi thế nhưng có 2 hàm trg ctrinh của mình nó không hoạt động dc nhờ mọi người chỉ dùm lỗi sai.
    Đây là code của mình

    C Code:
    1. #include "stdio.h"
    2. #include "conio.h"
    3. #include "string.h"
    4. #include "dos.h"
    5. #include "stdlib.h"
    6.  
    7.  
    8. struct thongtin
    9.     {
    10.         char hoten[30];
    11.         char masv[30];
    12.         char diachi[30];
    13.         float dcb;
    14.         float dcn;
    15.     };
    16. struct sv
    17.     {
    18.         struct thongtin infor;
    19.         sv *next;
    20.         sv *pret;
    21.     };
    22. struct listsv
    23.     {
    24.         sv *head;
    25.         sv *tail;
    26.     };
    27.  
    28. void nhapds(listsv &q);
    29. void nhapmoi(listsv &q);
    30. void inds(listsv &q);
    31. void tim(listsv &q);
    32. void chen_dauds(listsv &q);
    33. void chen_cuoids(listsv &q);
    34. void xoa_dauds(listsv &q);
    35. void xoa_cuoids(listsv &q);
    36. void remover_after(listsv &q,char hoten[]);
    37. void remover_before(listsv &q,char hoten[]);
    38.  
    39. void nhapds(listsv &q)
    40.     {
    41.         sv *p;
    42.         char hoten[30];
    43.         char masv[30];
    44.         char diachi[30];
    45.         float dcb;
    46.         float dcn;
    47.         q.head=NULL;
    48.         while(1)
    49.             {
    50.                 printf("Nhap vao ho ten sinh vien: ");
    51.                 gets(hoten);
    52.                 if(hoten[0]==0)break;
    53.                 if(q.head==NULL)
    54.                     {
    55.                         p=(sv*)malloc(sizeof(sv));
    56.                         q.head=p;
    57.                     }
    58.                 else
    59.                     {
    60.                         p->next=(sv*)malloc(sizeof(sv));
    61.                         p=p->next;
    62.                     }
    63.                 strcpy(p->infor.hoten,hoten);
    64.                 printf("Nhap vao masv : ");
    65.                 gets(p->infor.masv);
    66.                 printf("Nhap vao dia chi: ");
    67.                 gets(p->infor.diachi);
    68.                 printf("Nhap vao diem co ban: ");
    69.                 scanf("%f%*c",&dcb);
    70.                 p->infor.dcb=dcb;
    71.                 printf("Nhap vao diem chuyen nganh: ");
    72.                 scanf("%f%*c",&dcn);
    73.                 p->infor.dcn=dcn;
    74.                 q.tail=p;
    75.                 p->next=NULL;
    76.                 p->pret=NULL;
    77.             }
    78.         p=q.head;
    79.     }
    80.  
    81.  
    82. void inds(listsv &q)
    83.     {
    84.         sv *p;
    85.         p=q.head;
    86.         while(p!=NULL)
    87.             {
    88.                 printf("%10s %10s %10s    %.2f    %.2f\n",p->infor.hoten,p->infor.masv,p->infor.diachi,p->infor.dcb,p->infor.dcn);
    89.                 p=p->next;
    90.             }
    91.     }
    92.  
    93. void timsv(listsv &q,char tim[])
    94.     {
    95.         int dem=0;
    96.         sv *p;
    97.         p=q.head;
    98.         while(p!=NULL)
    99.             {
    100.                 if(strcmp(p->infor.hoten,tim)==0)
    101.                     {
    102.                         printf("%10s %10s %10s    %.2f    %.2f\n",p->infor.hoten,p->infor.masv,p->infor.diachi,p->infor.dcb,p->infor.dcn);
    103.                         dem++;
    104.                     }
    105.                 p=p->next;
    106.             }
    107.         if(dem==0)  printf("Khong Co Sinh Vien Nao Cug Ten.");
    108.  
    109.     }
    110.  
    111.  
    112. void chen_dauds(listsv &q)
    113.     {
    114.         sv *p;
    115.         if(q.head==NULL)    q.head=p;
    116.         else
    117.             {
    118.                 p->next=q.head;
    119.                 q.head=p;
    120.             }
    121.  
    122.     }
    123.  
    124.  
    125. void chen_cuoids(listsv &q)
    126.     {
    127.         sv *p;
    128.         if(q.head==NULL)
    129.             {
    130.                 q.head=p;
    131.                 q.tail=p;
    132.             }
    133.         else
    134.             {
    135.                 q.tail->next=p;
    136.                 q.tail=p;
    137.             }
    138.     }
    139.  
    140. void xoa_dauds(listsv &q)
    141.     {
    142.         sv *p;
    143.         if(q.head==NULL)    q.tail=NULL;
    144.         else    if(q.head!=NULL)
    145.             {
    146.                 p=q.head;
    147.                 q.head=q.head->next;
    148.                 q.head->pret=NULL;
    149.                 free(p);
    150.             }
    151.         printf("Remover Head:\n");
    152.         inds(q);
    153.     }
    154.  
    155. [B][I][U]void xoa_cuoids(listsv &q)   [/U][/I]  [/B]<==== hàm này ko hoạt động
    156.     {
    157.         sv *p;
    158.         if(q.head==NULL)    q.tail=NULL;
    159.         else
    160.             {
    161.                 if(q.tail!=NULL)
    162.                     {
    163.                         p=q.tail;
    164.                         q.tail=q.tail->pret;
    165.                         q.tail->next=NULL;
    166.                         free(p);
    167.                     }
    168.                 printf("Remover Tail: \n");
    169.                 inds(q);
    170.             }
    171.      }
    172.  
    173. void remover_after(listsv &q,char hoten[])
    174.     {
    175.         sv *p;
    176.         sv *r=NULL;
    177.         p=q.head;
    178.         while(p!=NULL)
    179.             {
    180.                 if(stricmp(p->infor.hoten,hoten)==0)break;
    181.                 r=p->next;
    182.                 p=p->next;
    183.             }
    184.         if(r==NULL) printf("Ko Co.\n");
    185.         if(r!=NULL)
    186.             {
    187.                 if(r==q.tail)
    188.                     {
    189.                         printf("Ko Xoa Duoc.");
    190.                         delay(1000);
    191.                         exit(1);
    192.                     }
    193.                 else
    194.                     {
    195.                         p=r->next;
    196.                         r->next=p->next;
    197.                         if(p==q.tail)   q.tail=r;
    198.                         else    p->next->pret=r;
    199.                         free(p);
    200.                     }
    201.                 inds(q);
    202.             }
    203.     }
    204.  
    205. [B][I][U]void remover_before(listsv &q,char hoten[])[/U][/I][/B]    <=== hàm này cũng vậy
    206.     {
    207.         sv *p;
    208.         sv *r=NULL;
    209.         p=q.head;
    210.         while(p!=NULL)
    211.             {
    212.                 if(stricmp(p->infor.hoten,hoten)==0)break;
    213.                 r=p->pret;
    214.                 p=p->next;
    215.             }
    216.         if(r==NULL) printf("Ko Co.\n");
    217.         if(r!=NULL)
    218.             {
    219.                 if(r==q.head)
    220.                     {
    221.                         printf("Ko Xoa Duoc.");
    222.                         delay(1000);
    223.                         exit(1);
    224.                     }
    225.                 else
    226.                     {
    227.                         p=r->pret;
    228.                         r->pret=p->pret;
    229.                         if(p==q.head)   q.head=r;
    230.                         else    p->pret->next=r;
    231.                         free(p);
    232.                     }
    233.                 inds(q);
    234.             }
    235.     }
    236.  
    237. void main(void)
    238.     {
    239.         clrscr();
    240.         listsv q;
    241.         char hoten[30];
    242.         nhapds(q);
    243.         inds(q);
    244.         /*
    245.         printf("Nhap Vao Ten Can Xoa Sau: ");
    246.         fflush(stdin);
    247.         gets(hoten);
    248.         remover_before(q,hoten);
    249.         */
    250.         xoa_cuoids(q);
    251.         getch();
    252.     }
    2 hàm không hoạt động đúng là xoa_cuoidsremover_before

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

    có lẽ là do cả 2 hàm ko hề cấp phát bộ nhớ cho con trỏ q nên ko xuât ra kết quả được ,ko cấp phát bộ nhớ mà lại giải phóng bộ nhớ(free(p)) hoặc cũng có thể sai về giải thuật.

  3. #3
    Ngày gia nhập
    08 2008
    Nơi ở
    ha noi
    Bài viết
    79

    Trích dẫn Nguyên bản được gửi bởi kimduquan Xem bài viết
    có lẽ là do cả 2 hàm ko hề cấp phát bộ nhớ cho con trỏ q nên ko xuât ra kết quả được ,ko cấp phát bộ nhớ mà lại giải phóng bộ nhớ(free(p)) hoặc cũng có thể sai về giải thuật.
    mình cấp phát bộ nhớ ở hàm nhập_ds rồi mà bạn cần ji cấp phát nó ở hàm xoá nữa nếu bạn nói thế thì tại sao hàm xoa_dauds mình lại xoá dc còn con trỏ q mình đã khai báo ở trong mỗi hàm rồi mà mình nghĩ nó sai ở thuật toán

  4. #4
    Ngày gia nhập
    01 2009
    Bài viết
    165

    hình như toàn bộ dữ liệu nhập vào đều nằm ở q.tail nhưng trong hàm xoa_cuoi bằng dòng lệnh:q.tail=q.tail->pret bạn đã hủy bỏ toàn bộ dữ liệu đã nhập,sau khi bạn gọi hàm inds thì tất cả dữ liệu nhập vào đều nằm ở q.tail còn trong hàm remover_before lại toàn dùng q.head nên bị sai.ko biết có đúng ko.
    Đã được chỉnh sửa lần cuối bởi kimduquan : 08-04-2009 lúc 08:16 PM.

  5. #5
    Ngày gia nhập
    08 2008
    Nơi ở
    ha noi
    Bài viết
    79

    Hix mấy hnay vì 2 cái hàm kia mà chẳng nghĩ dc cái ji được mình cũng đọc qua 1 2 code của mấy người nhưng mà họ code khác mình quá nên ko tìm ra lỗi sai dc kimduquan và mọi người có cách nào ko sửa dùm mình với :(

  6. #6
    Ngày gia nhập
    04 2009
    Bài viết
    0

    Red face Hello everyone


    Nhung thong tin cac ban cung cap rat co ich. Cam on cac ban nhieu^^
    pret auto

  7. #7
    Ngày gia nhập
    08 2008
    Nơi ở
    ha noi
    Bài viết
    79

    Trích dẫn Nguyên bản được gửi bởi rainbow2009 Xem bài viết

    Nhung thong tin cac ban cung cap rat co ich. Cam on cac ban nhieu^^
    pret auto
    hix điên à bài này lâu rồi vào spam lung tung
    u never know

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

  1. Danh sách liên kết cơ bản | Linked list basic
    Gửi bởi Kevin Hoang trong diễn đàn Thủ thuật, Tutorials và Mã nguồn C/C++/C++0x
    Trả lời: 13
    Bài viết cuối: 20-11-2016, 10:26 PM
  2. Danh sách liên kết vòng (Circular Linked List)
    Gửi bởi iamvtn trong diễn đàn Thủ thuật, Tutorials CTDL & Giải thuật
    Trả lời: 2
    Bài viết cuối: 14-06-2014, 11:06 PM
  3. Lập trình C++ [Share Code] Danh sách liên kết, class List
    Gửi bởi vietduc trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 7
    Bài viết cuối: 02-06-2013, 08:10 PM
  4. tạo 1 danh sách liên kết đơn(Linked List) mới ntn???
    Gửi bởi nhocconan.91 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: 15-10-2010, 06:36 AM
  5. linked list | Danh sách liên kết | Lỗi do đâu?
    Gửi bởi xai1lanroibo trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 12
    Bài viết cuối: 03-05-2009, 03:01 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