1.1: tạo và xem danh sách FIFO gồm các phân số. thực hiện thao tác sắp xếp, tìm kiếm, thêm đầu, thêm cuối, thêm phân số x sao cho không làm thay đổi thứ tự sắp xếp.

Thursday, November 27, 2014
// cac thao tac tren danh sach FIFO gom cac phan so;
#include <stdio.h>
#include <conio.h>
typedef struct ps
{
      int tu,mau;
      ps *link;
};
void swap(int *a,int *b) // ham doi cho a va b
{
      int tg;
      tg=*a;
      *a=*b;
      *b=tg;
}
void xemfifo(ps *f)
{
      ps *p;
      p=f;
      while (p!=NULL)
      {
            printf("\n       %d/%d",p->tu,p->mau);
            p=p->link;
      }
}
ps *nhap(ps *f, ps *l, int n)
{
      ps *p;
      int i;
      nhap: for (i=0;i<n;i++)
      {
            p=new(ps);
            printf("\nNhap tu va mau  : ");
            scanf("%d%d",&p->tu,&p->mau);
            if (p->mau==0) {
                 printf("\nNhap sai mau phai khac 0");
                 f=NULL;
                 goto nhap;
            }
            p->link=NULL;
            if (f==NULL) { f=p; l=p;}
            else { l->link=p; l=p;}
      }
      return f;
}
void sapxep(ps *f)
{
      ps *p1,*p2;
      p1=f;
      while (p1!=NULL)
      {
            p2=p1->link;
            while (p2!=NULL)
            {
                  if ((((float)p1->tu/p1->mau))>(((float)p2->tu/p2->mau)))
                  {
                        //doicho
                        swap(&p1->tu,&p2->tu);
                        swap(&p1->mau,&p2->mau);
                  }
                  p2=p2->link;
            }
            p1=p1->link;
      }
}
ps *timkiem(ps *f)
{
      ps *p,*x;
      x=new(ps);
      p=f;
      printf("\nNhap phan so can tim kiem tu/mau :  ");
      scanf("%d%d",&x->tu,&x->mau);
      while (p!=NULL) if (p->tu==x->tu && p->mau==x->mau) return p;
            else p=p->link;
      return p;
}
ps *themdau(ps *f)
{
      ps *p;
      p=new(ps);
      printf("\nNhap tu mau :  ");
      scanf("%d%d",&p->tu,&p->mau);
      p->link=f;
      return p;
}
ps *themcuoi(ps *f)
{
      ps *p,*x;
      p=f;
      x=new(ps);
      printf("\nNhap tu mau :  ");
      scanf("%d%d",&x->tu,&x->mau);
      x->link=NULL;
      while (p->link!=NULL) p=p->link;
      if (f==NULL) return x; else {
            p->link=x;
            return f;
      }
}
// them x vao khong thay doi thu tu sap xep.
ps *themx(ps *f)
{
      ps *p,*x;
      x=new(ps);
      printf("\nNhap tu mau :  ");
      scanf("%d%d",&x->tu,&x->mau);
      if (f==NULL) {
            x->link=NULL;
            return x;
      }
      if ((((float)f->tu/f->mau))>(((float)x->tu/x->mau))) {
            x->link=f;
            return x;
      }
      p=f;
      while (((float)(p->link)->tu/(p->link)->mau)<(((float)x->tu/x->mau)))
      p=p->link;
      x->link=p->link;
      p->link=x;
      return f;
     
}
void main()
{
      int n;
      ps *f=NULL,*l=NULL;
      printf("\n1.Nhap so phan tu  :  ");
      scanf("%d",&n);
      f=nhap(f,l,n);
      xemfifo(f);
      printf("\n2.Them 1 phan tu vao dau  :");
      f=themdau(f);
      xemfifo(f);
      printf("\n3.Them 1 phan tu vao cuoi :");
      f=themcuoi(f);
      xemfifo(f);
      printf("\n4. Sap xep  :");
      sapxep(f);
      xemfifo(f);
      printf("\n5. Them 1 so vao khong thay doi thu tu sap xep  :");
      f=themx(f);
      xemfifo(f);
      printf("\n6. Tim kiem  :");
      if (timkiem(f)!=NULL) printf("\n   Tim thay co trong danh sach");
      else  printf("\n   Khong tim thay trong danh sach");
      getch();

}

Chia sẻ bài viết ^^
Other post

All comments [ 0 ]


Your comments