Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 4 của 4
  1. #1

    mình mới học môn c có bài tap này mà no chỉ hiển thị co 1 người trong danh sach liên kết

    #include"conio.h"
    #include"stdio.h"
    #include"alloc.h"
    typedef struct cn
    {
    char ht[30];
    char qq[30];
    float lg;
    int ns;
    struct cn*next;
    } ds;
    ds*l;
    void main()
    {
    char ch;
    ds *p,*c;
    float tg;
    int tg1;
    l=NULL;
    do
    {
    p=(ds*)malloc(sizeof(ds));
    printf("
    nhap ho ten: "); fflush(stdin); gets(p->ht);
    printf("
    nhap que quan: "); fflush(stdin); gets(p->qq);
    printf("
    nhap luong: "); scanf("%f",&tg);
    p->lg=tg;
    printf("n nhap nam sinh: "); scanf("%d",&tg1);
    p->ns=tg1;
    p->next=NULL;
    if(l==NULL) l=p;
    else
    p->next=c;
    c=p;
    printf("
    ban co nhap nua khong: ");
    ch=getch();
    }
    while(ch!='k');
    p=l;
    while(p!=NULL)
    {
    printf("
    %10s %10s %10.2f %10d",p->ht,p->qq,p->lg,p->ns);
    p=p->next;
    }
    getch();
    }

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Đây là môt bài về danh sách liên kết rất hay cho bạn tham khảo
    Mã:
    #include<iostream.h>
    #include<fstream.h>
     
    //khai báo 1 node
    struct node{
    int data;
    node*next;
    };
     
    struct dslk{
    node* head;
    node* tail;
    };
    //Thu tuc cho phep tao 1 node khi có gia tri x
    //@param x la gia tri cua nut
    //@return con tro tro den nut chua gia tri x
    node* createNode(int x){
    node *p; p=new node;
    if(p==NULL)return NULL;
    p->data=x;
    p->next=NULL;
    return p;
    }
    ///Ham khoi tao 1 dslk
    //@param l la danh sach can khoi tao
    void init( dslk &l){
    l.head=NULL;
    l.tail=NULL;
    }
    //ham them 1 nut vao dau dslk
    //param p la nut can them
    void addFirst(dslk &l,node*p){
    if(l.head==NULL)
    l.head=l.tail=p;
    else{
    p->next=l.head;
    l.head=p;
    }
    }
     
    void addLast(dslk &l,node*p){
    if(l.head==NULL)
    l.head=l.tail=p;
    else{
    l.tail->next=p;
    l.tail=p;
    }
    }
    //chen node n vao sau node p trong danh sach
    void addAfter(dslk&l,node *q,node*new_node){
    if(l.head==NULL&&q==NULL)
    l.head=l.tail=new_node;
    if (q!=NULL){
    new_node->next = q->next;
    q->next = new_node;
    if(q == l.tail)
    l.tail = new_node;
    }
     
    }
     
    void addBefore(dslk&l,node *q,node*new_node){
    node*p=NULL;
    node*t=l.head;
    while(t->data!=q->data&&t!=NULL){
    p=t;
    t=t->next;
    }
    addAfter(l,p,new_node);
    }
    //add phan tu vao sao cho danh sach luon tang dan
    void addSort(dslk&l,node*n){
    if(l.head==NULL)
    l.head=l.tail=n;
    else{
    if(n->data<=l.head->data)
    addFirst(l,n);
    else if(n->data>=l.tail->data)
    addLast(l,n);
    else{
    node*t=l.head;
    while(t!=NULL){
    if(t->data>n->data)
    break;
    t=t->next;
    }
    addBefore(l,t,n);
    }
    }
    }
     
    //Ham nay dung de duyet qua danh sach va in gia tri data
    //param l la danh sach can duyet
    void traverse(dslk l){
    node*t=l.head;
    while(t!=NULL){
    cout<<t->data<<" ";
    t=t->next;
    }
    cout<<endl;
    }
     
    int nodesCounter(dslk l){
    node*t=l.head;
    int dem=0;
    while(t!=NULL){
    dem++;
    t=t->next;
    }
    return dem;
    }
     
    node*searchByKey(dslk l,int data){
    node*t=l.head;
    while(t!=NULL){
    if(t->data==data)
    return t;
    t=t->next;
    }
    return NULL;
    }
    //xoa 1 phan tu dau danh sach
    int deleteFirst(dslk&l){
    if(l.head==NULL)
    return -1;
    node*p=l.head;//phan tu can xoa
    l.head=p->next;
    if(l.head==NULL)
    l.tail=NULL;
    delete p;
    return 1;
    }
    //Xoa 1 node sau node q
    //tra ve 1 neu xoa thanh cong
    int deleteAfter(dslk&l,node*q){
    if(q==NULL || q->next==NULL)
    return -1;
    node*p=q->next;
    q->next=p->next;
    if(p==l.tail)
    l.tail=q;
    delete p;
    return 1;
    }
    //xoa 1 nút có khóa là key
    //tra ve -1 neu ds rong, 0 neu khong tim thay, 1 neu OK
    int deleteByKey(dslk&l,int key){
    if(l.head==NULL) return -1;
    node*sau=l.head;
    node*truoc=NULL;
    while(sau!=NULL){
    if(sau->data==key) break;
    truoc=sau;
    sau=sau->next;
    }
    if(sau==NULL)
    return 0;
    if(truoc==NULL)
    return deleteFirst(l);
    return deleteAfter(l,truoc);
    }
    //xoa tat ca cac nut trong dslk l co data=key
    void deleteByKeyAll(dslk&l,int key){
    if(l.head==NULL) return;
    node*sau=l.head;
    node*truoc=NULL;int x=-1;
    while(sau!=NULL){
    x=-1;
    if(sau->data==key){
    if(truoc==NULL)
    deleteFirst(l);
    else
    deleteAfter(l,truoc);
    sau=l.head;
    truoc=NULL;
    x=1;
    }
    if(x!=1){
    truoc=sau;
    sau=sau->next;
    }
    }
    }
    //huy toan bo danh sach
    void removeAll(dslk&l){
    node*p;
    while(l.head!=NULL){
    p=l.head;
    l.head=p->next;
    delete p;
    }
    l.tail=NULL;
    }
    //ham ghi du lieu xuong file
    void write2file(char * filename, dslk ds){
    ofstream fs(filename, ios::binary | ios::out );//| ios::app
    node*t=ds.head;
    while(t!=NULL){
    fs.write((char*)&t->data,sizeof(int));
    t=t->next;
    }
    fs.close();
    }
    ///hàm doc du lieu tu file
    void readfromfile(char * filename, dslk &ds){
    init(ds);
    ifstream infile(filename,ios::in|ios::binary);
    if(infile!=NULL){
    int data;
    infile.read((char*)&data,sizeof(int));
    while(!infile.eof()){
    node*n=createNode(data);
    addLast(ds,n);
    infile.read((char*)&data,sizeof(int));
    }
    }
    infile.close();
    }

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    bạn phải đổi "p->next=c" thành "c->next=p" mới đúng. Bạn mới học mà làm được thế là tốt đấy

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    danh sách liên kết rất hay đó bạn, mình giờ rất ít khi dùng mảng,mình cảm thấy danh sách liên kết mô tả thế giới rất tự nhiên và cũng rất dễ quản lí nữa, sau này học đến OOP thì bạn sẽ thấy nhiều cái hay trong nó, chú ý đến cái này đi bạn.

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •