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

Đề tài: Nhập 1 dãy các số nguyên dùng danh sách liên kết trong C????

  1. #1
    Ngày gia nhập
    03 2009
    Nơi ở
    hà nội
    Bài viết
    26

    Mặc định Nhập 1 dãy các số nguyên dùng danh sách liên kết trong C????

    Mình đang học về danh sách liên kết đơn nhưng mà chẳng hiểu lắm.
    Mình có 1 bài đơn giản: nhập 1 dãy các số nguyên dùng dslkđ, sau đó in ra ds vừa nhập.
    Bạn nào giúp mình với! Mình chẳng biết viết sao cả
    Ko bít thì phải học, phải hỏi _ Bít thì nên chia sẻ cho người khác cùng bít
    Chia sẻ là cách học tốt nhất ^_^[j0y_k3y]0_0

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

    C Code:
    1. //DSLK chen,xoa,sap xep//
    2. #include<stdio.h>
    3. #include<conio.h>
    4. #include<alloc.h>
    5. typedef int elementtype;
    6. struct node{
    7.        elementtype element;
    8.        struct node *next;
    9.  
    10.        };
    11. typedef struct node *position;
    12. typedef position list;
    13. //////////////////////////////////////////
    14. void makenull(list *l)
    15.     {
    16.     (*l)=(struct node*)malloc(sizeof(struct node));
    17.     (*l)->next=NULL;
    18.     }
    19. int empty(list l)
    20.     {
    21.     return l->next==NULL;
    22.     }
    23. void insert(elementtype x,position p)
    24.     {
    25.     position t;
    26.     t=(struct node*)malloc(sizeof(struct node));
    27.     t->element=x;
    28.     t->next=p->next;
    29.     p->next=t;
    30.     }
    31. void deletes(position p)
    32.     {
    33.     position t;
    34.     if(p->next !=NULL)
    35.         t=p->next;
    36.         p->next=t->next;
    37.         free(t);
    38.     }
    39. void input(list *l)
    40.     {
    41.     int i,x,n;
    42.     makenull(l);
    43.     position p;
    44.     p=*l;
    45.     printf("Ban muon nhap list co bao nhieu phan tu:  ");
    46.     scanf("%d",&n);
    47.     for(i=1;i<=n;i++)
    48.         {
    49.         printf("Nhap phan tu thu %d :",i);
    50.         scanf("%d",&x);
    51.         insert(x,p);
    52.         p=p->next;//bo dong nay neu muon in theo thu tu nguoc
    53.         }
    54.     }
    55. void output(list l)
    56.     {
    57.         position p;
    58.         p=l->next;
    59.         while(p!=NULL)
    60.             {
    61.             printf("%d\t",p->element);
    62.             p=p->next;
    63.             }
    64.     }
    65. ////////////////////////////////////////////////
    66. void sort(list *l)
    67. {
    68. position p,q;
    69. p=(*l)->next;
    70. while(p!=NULL)
    71.     {
    72.     q=p->next;
    73.     while(q!=NULL)
    74.         {
    75.         if(p->element>q->element)
    76.             {
    77.             int temp;
    78.             temp=p->element;
    79.             p->element=q->element;
    80.             q->element=temp;
    81.             }
    82.         q=q->next;
    83.         }
    84.     p=p->next;
    85.     }
    86. }
    87. void insertX(elementtype x, list *l)
    88. {
    89.     position p,q;
    90.     q=*l;
    91.     p=(*l)->next;
    92.     while((p->element<x)&&(p->next!=NULL))
    93.         {
    94.         q=p;
    95.         p=p->next;
    96.         }
    97.     if(p->next==NULL) insert(x,p);
    98.     else insert(x,q);
    99. }
    100. void deleteX(elementtype x,list *l)
    101. {
    102.     position p,q;
    103.     q=*l;
    104.     p=*l;
    105.     int found=0;
    106.     while((p->next->element<=x)&&(p->next!=NULL))
    107.         {
    108.         q=p;
    109.         if(p->next->element==x)
    110.             {found=1;
    111.             break;}
    112.         else
    113.         p=p->next;
    114.         }
    115.     if(found)
    116.         deletes(q);
    117.     else printf("Khong co phan tu can xoa");
    118. }
    119. //////////////////////////////////////////////////////
    120. void main()
    121. {
    122. list l;
    123. clrscr();
    124. input(&l);
    125. printf("\nList vua nhap: ");
    126. output(l);
    127. sort(&l);
    128. printf("\nList sau khi da sap xep:");
    129. output(l);
    130. int x;
    131. printf("\nNhap so can chen: ");
    132. scanf("%d",&x);
    133. insertX(x,&l);
    134. printf("\nList sau khi chen: ");
    135. output(l);
    136. printf("\nNhap phan tu can xoa: ");
    137. int xoa;
    138. scanf("%d",&xoa);
    139. deleteX(xoa,&l);
    140. printf("\nList sau khi xoa: ");
    141. output(l);
    142. getch();
    cái này search trong dd là có rùi. Mình cho ban thêm code chèn, xóa... luôn để ngâm cú.

  3. #3
    Ngày gia nhập
    03 2009
    Nơi ở
    hà nội
    Bài viết
    26

    Thanks bạn! mình cũng đã làm đợưc bài rùi.
    Lúc đầu mình cũng đã search trong diễn đàn rùi nhưng ko giống với yêu cầu của thầy mình lắm. Đây là code của mình(chỉ nhập và in ra thui chứ mấy cí kia thì mình hiểu rùi):
    C Code:
    1.  #include<stdio.h>
    2. #include<conio.h>
    3. #include<alloc.h>
    4. #include<process.h>
    5.   typedef  struct tagnode
    6.   {
    7.     int info;
    8.     struct tagnode* pnext;
    9.   }node;
    10.   typedef  struct taglist
    11.   {
    12.     node* phead;
    13.     node* ptail;
    14.   }list;
    15.   node* get_node(int x);
    16.   void addhead(list &l,int x);
    17.   void addtail(list &l,int x);
    18.   void inds(list &l);
    19.  
    20.   void main()
    21.   {
    22.     clrscr();
    23.     list l;
    24.     int x;
    25.     char tl;
    26.     l.phead=NULL;l.ptail=NULL;
    27.     do
    28.     {
    29.       printf("\nnhap phan tu cua mang: ");scanf("%d",&x);
    30.       addtail(l,x);
    31.       printf("\nnhap tiep ko? (y/n): ");
    32.       fflush(stdin);tl=getchar();
    33.     }while(tl=='y');
    34.     printf("\ndanh sach vua nhap la: ");inds(l);
    35.     getch();
    36.   }
    37.   node* get_node(int x)
    38.   {
    39.     node *p;
    40.     p=new node;
    41.     if (p==NULL)
    42.     {
    43.       printf("\nko du bo nho");exit(1);
    44.     }
    45.     p->info=x;
    46.     p->pnext=NULL;
    47.     return p;
    48.   }
    49.   void addhead(list &l,int x)
    50.   {
    51.     node* new_ele=get_node(x);
    52.     if(new_ele==NULL) return;
    53.     if(l.phead==NULL)
    54.     {
    55.       l.phead=new_ele;
    56.       l.ptail=l.phead;
    57.     }
    58.     else
    59.     {
    60.       new_ele->pnext=l.phead;
    61.       l.phead=new_ele;
    62.     }
    63.   }
    64.   void addtail(list &l,int x)
    65.   {
    66.      node* new_ele=get_node(x);
    67.      if(new_ele==NULL) return;
    68.      if(l.phead==NULL)
    69.      {
    70.        l.phead=new_ele;
    71.        l.ptail=l.phead;
    72.      }
    73.      else
    74.      {
    75.        l.ptail->pnext=new_ele;
    76.        l.ptail=new_ele;
    77.      }
    78.   }
    Ở đây mình muốn quản lý list bằng hai con trỏ đầu và cuối. Mọi người xem code của mình có ổn ko?

    Mình viết hàm del này nhưng ko hiểu sao nó ko đúng:
    C Code:
    1. int del(list &l,int x)
    2.   {
    3.     node *p=l.phead;
    4.     node *q=NULL;
    5.     while ((p!=NULL)&&(p->info!=x))
    6.     {
    7.       q=p;p=p->pnext;
    8.     }
    9.     if(p==NULL) return 0;
    10.     if(q!=NULL)
    11.     {
    12.       if(p==l.ptail) l.ptail=q;
    13.       q->pnext=p->pnext;
    14.       delete p;
    15.     }
    16.     else
    17.     {
    18.       l.phead=p->pnext;
    19.       if(l.phead==NULL) l.ptail=NULL;
    20.     }
    21.     return 1;
    22.   }
    Nếu ko có phần tủ cần xóa thì nó đúng nhưng nếu tìm thấy thì nó toàn xoá phần tử cuối cùng thôi.
    Mọi người xem giúp mình với?

    Mình đã kiểm tra lại giải thuật rùi. Đúng mà nhưng ko hiểu sao nó lại sai?
    Mọi người kiểm tra giúp mình với :(
    Ko bít thì phải học, phải hỏi _ Bít thì nên chia sẻ cho người khác cùng bít
    Chia sẻ là cách học tốt nhất ^_^[j0y_k3y]0_0

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

    nguyenthuancn2 : cho hỏi cái nay thêm xóa tất cả các số lẽ trong dãy thì sao nhĩ.

  5. #5
    Ngày gia nhập
    09 2011
    Nơi ở
    Registry
    Bài viết
    43

    thì bạn thêm 1 điều kiện nếu là số lẻ thì xóa (p->info % 2 !=0)
    C++ Code:
    1. int BanHoc=1, BanBiet=10;
    2.     if(BanHoc==0)
    3.         cout <<"Ban nen di hoc!";
    4.     else
    5.         if(BanBiet==10)
    6.             cout <<"Ban qua pro!";

  6. #6
    Ngày gia nhập
    03 2012
    Bài viết
    6

    Mặc định Nhập 1 dãy các số nguyên dùng danh sách liên kết trong C????

    Hi h_trang,

    Mình có coi qua hàm del(...) , chưa phát hiện chỗ sai
    Testcase nào làm hàm del(...) của bạn chạy ko đúng zay? Bạn có thể up code bài này lên

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

    #include<stdio.h>
    #include<conio.h>
    #include<stdlib.h>
    typedef struct PHANTU
    {
    int dl;
    PHANTU *tiep;
    };
    void TaoDS(PHANTU * *ds)
    {
    PHANTU *tg,*p;
    randomize();
    *ds=NULL;
    while(random(10)!=0)
    {
    p=(PHANTU *)malloc(sizeof(PHANTU));
    p->dl=random(50);
    p->tiep=NULL;
    //printf("%d", p->dl);
    if(*ds==NULL)
    *ds=p;
    else
    tg->tiep=p;
    tg=p;
    }
    }
    //ham tao co kieu
    /*PHANTU *TaoDSLL()
    {
    PHANTU *tg,*p,*ds;
    ds=NULL;
    while(random(100)!=0)
    {
    p=(PHANTU *)malloc(sizeof(PHANTU));
    p->dl=random(50);
    p->tiep=NULL;
    if(ds==NULL)
    ds=p;
    else
    tg->tiep=p;
    tg=p;
    }
    return ds;
    }*/
    void InDS(PHANTU *ds)
    {
    PHANTU *p;
    p=ds;
    if(p==NULL)
    printf("Day rong !!!");
    else
    {
    while(p!=NULL)
    {
    printf("%d ",p->dl);
    p=p->tiep;
    }
    }
    }

    void main()
    {
    PHANTU *D;
    clrscr();
    TaoDS(&D);
    InDS(D);
    getch();

    }

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

  1. Bài tập C nhập xuất danh sách liên kết đơn các số nguyên. Sửa giúp mình?
    Gửi bởi capulato 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: 31-12-2013, 10:08 PM
  2. Bài tập C Tạo danh sách liên kết các số nguyên tố từ danh sách L (dslk đơn)
    Gửi bởi pato24193 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: 16-12-2012, 02:47 PM
  3. Bài toán quản lí nhân viên dùng dùng danh sách liên kết trong C++. Mong mọi người góp ý!
    Gửi bởi rataki trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 1
    Bài viết cuối: 22-11-2012, 11:26 PM
  4. Bài tập C Dùng danh sách liên kết đơn lưu trữ tập hợp các số nguyên
    Gửi bởi cr9 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: 12-04-2012, 11:23 PM
  5. Danh sách liên kết đơn các số nguyên!
    Gửi bởi Mr Bin 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: 05-07-2009, 09:07 AM

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