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

Đề tài: hỏi một chút về danh sách liên kết kép

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

    Mặc định hỏi một chút về danh sách liên kết kép

    Đề bài : nhập 1 danh sách sinh viên = DSLK kép . Sau đó nhập điểm chuẩn và liên kết + in ra các sinh viên đậu .
    Mình làm như sau :
    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. #include<stdlib.h>
    4. #include<alloc.h>
    5. typedef struct sinhvien{
    6.             int d;
    7.             sinhvien *ptiep;
    8.             sinhvien *plui;
    9.                };
    10.  
    11. typedef struct list{
    12.               sinhvien *pdau;
    13.               sinhvien *pcuoi;
    14.              };
    15.  
    16. void khoidau(list &l);
    17. void khoidau(list &l)
    18. {
    19.  l.pdau=l.pcuoi=NULL;
    20. }
    21.  
    22. sinhvien *tao(int n);
    23. sinhvien *tao(int n)
    24. {
    25.  sinhvien *p;
    26.  p=(sinhvien*)malloc(sizeof(sinhvien));
    27.  if(!p) return NULL;
    28.  p->d=n;
    29.  p->ptiep=p->plui=NULL;
    30.  return p;
    31. }
    32.  
    33. void chencuoi(list &l,sinhvien *p);
    34. void chencuoi(list &l,sinhvien *p)
    35. {
    36.  if(l.pdau==NULL) l.pdau=l.pcuoi=p;
    37.  else {
    38.        p->plui=l.pcuoi;
    39.        l.pcuoi->ptiep=p;
    40.        l.pcuoi=p;
    41.       }
    42. }
    43.  
    44. void in(list l);
    45. void in(list l)
    46. {
    47.  sinhvien *p;
    48.  p=l.pdau;
    49.  while(p)
    50.  {
    51.   printf("%d\n",p->d);
    52.   p=p->ptiep;
    53.  }
    54. }
    55. /*day la ham xet dau hay rot*/
    56. void dc(list l,int h);
    57. void dc(list l,int h)
    58. {
    59.  sinhvien *p;
    60.  
    61.  p=l.pdau;
    62.  
    63.  while(p)
    64.  {
    65.   if(((p->plui)==NULL)&&(p->d)<h) l.pdau=p->ptiep;
    66.   else if((p->d)<h) {
    67.              (p->plui)->ptiep=p->ptiep;
    68.              (p->ptiep)->plui=p->plui;
    69.             }
    70.   if(((p->ptiep)==NULL)&&(p->d)<h) l.pcuoi=p->plui;
    71.   p=p->ptiep;
    72.  
    73.  }
    74. }
    75.  
    76. void main()
    77. {
    78.  
    79.  clrscr();
    80.  
    81.  sinhvien *sv,*p;
    82.  list l;
    83.  int n,i,m,h;
    84.  
    85.  khoidau(l);
    86.  printf("nhap so sinh vien:");
    87.  scanf("%d",&n);
    88.  
    89.  for(i=1;i<=n;i++)
    90.  {
    91.   printf("\nnhap diem sinh vien %d:",i);
    92.   scanf("%d",&m);
    93.   sv=tao(m);
    94.   fflush(stdin);
    95.   chencuoi(l,sv);
    96.  }
    97.  
    98.  printf("nhap diem chuan:");
    99.  scanf("%d",&h);
    100.  
    101.  dc(l,h);
    102.  in(l);
    103.  
    104.  getch();
    105. }

    Mình không biết trong cái hàm xét đậu hay rớt của mình :
    1) phải làm sao để mà free bộ nhớ sau khi liên kết lại đây bởi vì như trên thì chỉ có "nối dây" lại cho đúng chứ không xoá được những phần tử bị loại ?
    2) sao lúc mình nhập điểm của thí sinh đầu tiên mà bé hơn điểm chuẩn thì khi thực hiện hàm dc() xong , in ra nó vẫn tồn tại ?
    Cám ơn nhiều nhé .
    Đã được chỉnh sửa lần cuối bởi zkday2686 : 26-09-2008 lúc 08:31 AM.

  2. #2
    Ngày gia nhập
    04 2007
    Bài viết
    27

    Oái sao ko ai giúp mình vậy ???

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

    Thứ nhất tớ lưu ý cậu lần sau nên để trong tag PHP .
    Thứ hai nữa là cách viết này :
    C Code:
    1.  void A();
    2.  void A(){};
    nên xem lại tí. Ý tớ là tổ chức lại cho gọn và dễ nhìn.

    Rồi bi giờ câu 1. (Tớ chưa đọc code được nhưng có ý cho cậu thế này !)

    VD thế này : A<->B<->C. Và cậu muốn bỏ nút B đi thì tớ làm như sau.
    CNode *temp;
    temp = B; (operator = hoặc gán trực tiếp )
    sau đó A<-> C;
    rồi free(temp);

    Câu 2 thì tớ ko hiểu rõ code của cậu lắm. Tớ thấy hơi khó đọc. Cậu nên coi lại phong cách lập trình , đặt biến cũng như ghi chú cho dễ dàng. Tiếp nữa method này không có gì là khó cả . Tớ có ý như sau.

    C Code:
    1.   // Khai báo 1 pointer kểu sinhVien sử dụng nó để duyệt qua các phần tử của list.
    2.   CSinhVien *pTest;
    3.   pTest = pTop ; // pTop là con trỏ đầu của list đấy.
    4.  
    5. // Duyệt toàn bộ list.
    6.  while(pTest->next != NULL)
    7. {
    8.    // Kiểm tra liệu sinh viên này có đủ t. chuẩn ko.
    9.    if(pTest->diem < diemChuan)
    10.    {
    11.         // Nếu ko đủ t.c thì del đi.
    12.         CSinhVien *pDel = pTest;
    13.         pTest->pre = pTest->next;
    14.         free(pDell);
    15.    }
    16. }
    Đơn giản thế là được. Phải ko nhỉ ? Tớ cũng chưa được học cái này .Hôm thứ 3 vừa rồi ông thầy dạy nhưng tớ bận học nên ko biết. À mà cậu học trường nào thế. Chắc dễ trường tớ lắm, vì giờ phần lớn là dùng C++ để cài đặt chứ ít dùng C thế này, khó và mệt hơn ấy nhỉ ?
    Đã được chỉnh sửa lần cuối bởi zkday2686 : 26-09-2008 lúc 08:30 AM.

  4. #4
    Ngày gia nhập
    06 2007
    Nơi ở
    một nơi xa xăm...
    Bài viết
    127

    Thế này nhé mình không hiểu về cái liên kết này lắm.Nhưng mình nghĩ thế này.Vì sau khi qua hàm dc(..) thì sẽ sét được sv nào đạt đúng không?Như vậy để lưu lại kết quả sau khi xét này vào list l thì bạn nên truyền tham số là đối tham chiếu dc(list &l,int h).Không biết mình nghĩ thế có đúng không?

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

  1. Hướng dẫn Biểu diễn thích hợp bằng danh sách liên kết đơn hoặc danh sách liên kết kép
    Gửi bởi maitrung trong diễn đàn Thủ thuật, Tutorials CTDL & Giải thuật
    Trả lời: 3
    Bài viết cuối: 04-08-2012, 08:01 PM
  2. Cấu trúc dữ liệu Cách tạo danh sách liên kết mới từ danh sách liên kết đã cho như thế nào?
    Gửi bởi giacmo1612 trong diễn đàn Thắc mắc CTDL & Giải thuật
    Trả lời: 2
    Bài viết cuối: 30-11-2011, 04:43 PM
  3. Nhập và xuất danh sách liên kết lồng danh sách liên kết?
    Gửi bởi nvluong_it 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: 22-04-2011, 11:30 AM
  4. Lập trình C Danh sách liên kết - Xử lý danh sách liên kết trong lập trình C
    Gửi bởi phucduan 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: 08-11-2010, 10:25 PM
  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