Bài tập Danh sách liên kết - Cấu trúc dữ liệu

Thảo luận trong 'Lập trình máy tính' bắt đầu bởi white.smut, 4 Tháng chín 2013.

  1. Offline

    white.smut

    • Administrator

    • Loading: |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||] 99% Completed - Error: Disconnected. Please try again!
    Số bài viết:
    842
    Đã được thích:
    425
    Điểm thành tích:
    450
    Đề bài: Viết chương trình C khởi tạo một danh sách gồm các số nguyên, thực hiện việc nhập, chèn, xóa và xuất danh sách đó ra màn hình.
    Mã:
    #include <stdio.h>
    #include <conio.h>
    typedef int Elementype;
    typedef struct SN{ //khởi tạo danh sách
        Elementype a;
        SN *next;
        };
    SN *L;
    void Nhap(SN *&L) //Hàm nhập
    {
    SN *C,*P;
    int x;
    char ch;
        C=NULL;
        do    {
            P=new SN;
            printf("\nNhap gia tri: ");
            scanf("%d",&x);
            P->a=x;
            P->next=NULL;
            if (L==NULL)    {
                    L=P;
                    C=P;
                    }
            else        {
                    C->next=P;
                    C=P;
                    }
            printf("\nDung lai  = y? ");
            scanf("%s",&ch);
            }
        while    (ch!='y');
    }
    void Xuat(SN *L) //Hàm xuất
    {
    SN *P;
        P=L;
        while (P!=NULL)
            {
            printf("\t%d",P->a);
            P=P->next;
            }
    }
    SN *locate(int k,SN *L) //hàm xác định vị trí
    {
    int dem=1;
    SN *P;
        if(k<0)
            return NULL;
        else{
            P=L;
            while ((P!=NULL)&&(dem<k))
            {
                dem++;
                P=P->next;
            }
            return P;
          }
    }
     
    void Insert(int X,SN *&L,int k) //Hàm chèn
    {
    SN *P,*Q;
        P=new SN;
        P->a=X;
        if (k==1)
            {
            P->next=L;
            L=P;
            }
        else    {
            Q=locate(k-1,L);
            if (Q==NULL)
                printf("Vi tri khong hop le!");
            else    {
                P->next=Q->next;
                Q->next=P;
                }
            }
    }
    void Delete(SN *&L,int K) //Hàm xóa
    {
    SN *P,*Q;
        if (L==NULL)
            printf("Danh sach rong!");
        else    if (K==1)
                {
                P=L;
                L=P->next;
                delete(P);
                }
            else    {
                Q=locate(K-1,L);
                if ((Q==NULL)||(Q->next==NULL))
                    printf("Vi tri khong hop le!");
                else    {
                    P=Q->next;
                    Q->next=P->next;
                    delete(P);
                    }
                }
    }
     
    main() //Hàm main
    {
        clrscr();
        int k,x,a;
        L=NULL;
        Nhap(L);
        printf("\nDVSVT: ");
        Xuat(L);
        printf("\nNhap vi tri va gia tri chen: ");
        scanf("%d%d",&k,&a);
        Insert(a,L,k);
        Xuat(L);
        printf("\nNhap xoa: ");
        scanf("%d",&x);
        Delete(L,x);
        Xuat(L);
        getch();
        return 1;
    }
    Còn dưới đây là file đính kèm (đổi đuôi .txt thành .cpp nhé):

    Các file đính kèm:

    killyou117hongoctrien thích bài này.

Chia sẻ trang này

Advertising: Linux system admin | nukeviet | nukeviet 4 | Upload ảnh miễn phí