Kênh Tên Miền chuyên cung cấp tên miền đẹp, giá rẻ! Hãy liên hệ kỹ thuật: 0914205579 - Kinh doanh: 0912191357 để được tư vấn, hướng dẫn miễn phí, Cảm ơn quý khách đã ủng hộ trong thời gian qua!
Wednesday, November 26, 2014

Viết chương trình cài đặt danh sách đặc bằng mảng một chiều, sao đó viết các hàm xử lý danh sách đặc đó như sau: Hàm nhập danh sách, In danh sách, xóa phần tử trong danh sách, sắp xếp danh sách, loại bỏ phần tử trùng nhau trong danh sách.


Bài Giải






/*
Name: Cau Truc Du Lieu - Cai dat danh sach dac
Copyright: None
Author: Tran Anh
Description: http://www.code.tavn.net
*/
#include<stdio.h>
#include<conio.h>
#define Maxlength 1000
typedef int ElementType;
typedef int Position;
typedef struct
{
    ElementType Elements[Maxlength];
    Position Last;
}List;

void MakeNull_List(List &L) //Khoi tao danh sach rong
{
    L.Last=0;
}

int Empty_List(List &L) //Kiem tra sanh sach co rong hay khong| neu rong tra ve 1, nguoc lai tra ve 0
{
    return L.Last==0;
}
Position First_List(List &L) //Trả về vị trí đầu danh sách
{
    return 1;
}
Position End_List(List &L)  //trả về vị trí cuối danh sách
{
    return L.Last+1;
}
Position Next(Position P, List &L) //Duyệt đến vị trí kế tiếp, tức vị trí P+1
{
    return P++;
}
Position Retrieve(Position P, List &L) //Trả về giá trị tại vị trí P, tức phần tử P-1
{
    return L.Elements[P-1];
}
void Insert_List(ElementType X, Position P, List &L)  //Chèn thêm phần tử X vào Danh sách L tại vị trí P
{
    if(L.Last==Maxlength)
            printf("\tDanh sach day!");
    else
        if ((P<1)||(P>L.Last+1))
                printf("\tVi tri khong hop le!");
        else
        {
            for(Position Q=L.Last;Q>P-1;Q--)
                L.Elements[Q]=L.Elements[Q-1];
            L.Elements[P-1]=X;
            L.Last++;
        }

}
void Delete_List(Position P, List &L)
{
    if ((P<0)||(P>L.Last))
            printf("\t Vi tri khong hop le");
    else
    {
        Position Q;
        for(Q=P;Q<L.Last;Q++)
            L.Elements[Q-1]=L.Elements[Q];
        L.Last--;
    }
}
void Read_List(List &L)  //Nhập danh sách vào
{
    MakeNull_List(L);
    int X,N;
    printf("\t-Nhap so phan tu cua sanh sach: "); scanf("%d",&N);

    for(int i=1;i<=N;i++)
    {
        printf("\t\t- Nhap phan tu thu %d: ",i);
        scanf("%d",&X);
        Insert_List(X,i,L);
    }
}
void Print_List(List &L)   //In danh sách ra
{
    if (Empty_List(L)) printf("\t=> Danh sach rong!");
    else
        for(int i=1;i<=L.Last;i++)
            printf("%4d",Retrieve(i,L));
}
void Sort_List(List &L)  //Sắp xếp các phần tử trong danh sách theo thứ tự tăng dần/ giảm dần
{
    for(int i=First_List(L)-1;i<End_List(L)-1;i++)
        for (int j=i+1;j<End_List(L)-1;j++)
            if(L.Elements[i]>L.Elements[j])
                    {
                        int Temp=L.Elements[i];
                        L.Elements[i]=L.Elements[j];
                        L.Elements[j]=Temp;
                    }
}

void Distinc(List &L) //Loại bỏ các phần tử trùng nhau trong danh sách
{
    for (int i=First_List(L)-1;i<End_List(L)-1;i++)
        for(int j=i+1;j<End_List(L)-1;j++)
            if(L.Elements[i]==L.Elements[j])
                Delete_List(j,L);
}

main()
{
    List L;
    Position P;
    Read_List(L);

    printf("\n\t==> Danh sach cua ban: \n");
    Print_List(L);

    Sort_List(L);
    printf("\n\t==> Danh sach cua ban da sap xep: \n");
    Print_List(L);

    Distinc(L);
    printf("\n\t==> Danh sach sao khi loc: \n");
    Print_List(L);

    getch();
    return 0;
}

0 comments:

Post a Comment

Popular Posts