Thứ Bảy, 13 tháng 12, 2014

nhập vào một danh sách, in ra danh sách sau khi sắp xếp thứ tự, loại bỏ phần tử trùng, thêm phần tử vào đầu và cuối danh sách


#include<conio.h>
#include<stdio.h>
#include<malloc.h>

typedef int ElementType;    //gia tri
typedef struct Node
{
    ElementType Element;
    Node* Next;
};
typedef Node *Position;
typedef Position List;

void MakeNull_List(List &Header) //Khoi tao danh sach rông
{
    Header=(Node*)malloc(sizeof(Node));
    Header->Next=NULL;
}

int Empty_List(List L)
{
    return (L->Next==NULL);
}

Position FirstList(List L)
{
    return L;
}

void Insert_List(ElementType X, Position P, List &L)
{
    Position T;
    T=(Node*)malloc(sizeof(Node));
    T->Element=X;
    T->Next=P->Next;
    P->Next=T;
}

void InsertFirstList(ElementType X, List &L)
{
    Insert_List(X, FirstList(L), L);

}

Position EndList(List L)
{
   Position P;
   P=L;
   while (P->Next!=NULL)
    P=P->Next;
   return P;
}

void InsertEndList(ElementType X, List &L)
{
    Insert_List(X, EndList(L), L);

}

void Delete_List(Position P, List &L)
{
    Position T;
    if (P->Next!=NULL)
    {
        T=P->Next;
        P->Next=T->Next;
        free(T);
    }
}

Position Locate(ElementType X, List L)
{
    Position P=L;
    while (P->Next!=NULL)
        if (P->Next->Element==X) break;
        else P=P->Next;
        return P;
}

ElementType Retrieve(Position P, List L)
{
    if (P->Next!=NULL)
        return P->Next->Element;
}

void Read_List(List &L)
{
    int n;
    printf("\t Nhap so phan tu cua danh sach: ");
    scanf("%d",&n);
    int i=0;
    ElementType X;
    while (i<n)
    {
        printf("\t-Nhap phan tu thu %d: ",i);
        scanf("%d",&X);
        InsertEndList(X,L);
        i++;
    }
}


void Print_List(List &L)
{
    Position P=FirstList(L);
   while (P->Next!=NULL){
    printf("%6d",P->Next->Element);
   P=P->Next;
   }
}

void Distinct(List &L)
{

    Position P,Q;
    for (P=L;P->Next!=NULL;P=P->Next)
    {
        for (Q=P->Next;Q->Next!=NULL; )
            if (P->Next->Element==Q->Next->Element)
                Delete_List(Q,L);
        else
            Q=Q->Next;
    }

}

void Sort(List &L)
{
  Position P,Q;
  ElementType Temp;
  for (P=L;P->Next!=NULL;P=P->Next)
    for (Q=P->Next;Q->Next!=NULL; Q=Q->Next)
    if(P->Next->Element>Q->Next->Element)
  {

      Temp=P->Next->Element;
      P->Next->Element=Q->Next->Element;
      Q->Next->Element=Temp;
  }

}

main()
{
int n;
    List L;
 
    Position P;
    MakeNull_List(L);

    Read_List(L);
    printf("\n\t-> Danh sach vua nhap: \n");
    Print_List(L);

    Sort(L);
    printf("\n\t-> Danh sach da sap xep: \n");
    Print_List(L);
     printf("\n");

    Distinct(L);
    printf("\n\t-> Danh sach da tach loc: \n");
    Print_List(L);
    printf("\n");

    printf("\n them phan tu vao danh sach: "); scanf("%d",&n);
    ElementType X=n;
 
    printf("\n");
    InsertEndList(X,L);
    printf("\n\t-> Danh sach da them phan tu vao cuoi: \n");
    Print_List(L);

    InsertFirstList(X,L);
    printf("\n\t-> Danh sach da them phan tu vao dau: \n");
    Print_List(L);

getch();
}

Không có nhận xét nào: