Tìm thấy 2 mục

tranthinh_it

bài Danh sách liên kết đơn - 2/12/2009, 20:09

cảm ơn bạn . do chỗ menu , mình để "int tiep" nen chi nhập số , chắc bạn nhập kí tự nên nó thế , mình đã sưa xong , phím 1 để tiếp tuc chứ không phải phím bất kì để tiếp tục bạn à , cảm ơn bạn đã góp ý kiến
mình chỉ sử dung fflush(stdin) đối với nhập chuỗi , còn nhập số thì mình khồn sử dụng , ban có thể nói rõ lỗi đc không , để mình sửa , cảm ơn bạn nhìu

tranthinh_it

bài Danh sách liên kết đơn - 2/12/2009, 18:41

Code:
#include<stdio.h>
#include<conio.h>
#include<math.h>
typedef struct sinhvien
{
    char hoten[30];
    int masv;
}SV;
typedef struct node
{
    SV info;
    struct node *pNext;
}NODE;
typedef struct tagList
{
    NODE* pHead;
    NODE* pTail;
}LIST;
int IsEmptyList(LIST &l)
{
 return ((l.pHead==NULL)&&(l.pTail==NULL));
}
void Init(LIST &l)
{
    l.pHead = l.pTail=NULL;
}
NODE* GetNode(SV x)
{
 NODE *p;
    p = new NODE;
    if(p==NULL)
    {
        printf("Khong du bo nho");
        exit(1);
    }
    p->info = x;
    p->pNext = NULL;
    return p;
}
void AddFirst(LIST &l, NODE* new_ele)
{
    if(l.pHead ==NULL)
    {
        l.pHead = new_ele;
        l.pTail = l.pHead;
    }
 else
    {
        new_ele->pNext = l.pHead;
        l.pHead = new_ele;
    }
}
void AddTail(LIST &l,NODE* new_ele)
{
 if(l.pHead==NULL)
 l.pHead=l.pTail=new_ele;
 else
 {
 l.pTail->pNext=new_ele;
 l.pTail=new_ele;
 }
}
void AddAfter(LIST &l,NODE* q,NODE* new_ele)
{
 int Masv;
 printf("Chen sau Masv:");
 fflush(stdin);
 scanf("%d",&Masv);
 for(q=l.pHead;q;q=q->pNext)
 {
  if(q->info.masv==Masv)
  {
  if(q!= NULL)
  {
    new_ele->pNext=q->pNext;
    q->pNext=new_ele;
    if(q==l.pTail)
    l.pTail=new_ele;
  }
  else
  AddFirst(l,new_ele);
  }
 }
}
void  RemoveHead(LIST &l)
{
 if(l.pHead!=NULL)
 {
  NODE*p=l.pHead;
  l.pHead=l.pHead->pNext;
  delete p;
  if(l.pHead== NULL) l.pTail=NULL;
 }
 else
  printf("\nHuy that bai:");
}
void  Removelist(LIST &l)
{
 while(l.pHead)
 {
  NODE* p=l.pHead;
  l.pHead=l.pHead->pNext;
  delete p;
 }
 l.pTail=NULL;
}
void RemoveTail(LIST &l)

 NODE *p,*q;
  p = l.pHead;
  if(p->pNext == NULL) 
  {     
    RemoveHead(l);   
    return; 
 } 
 while(p->pNext!= NULL)
  {   
    q = p;   
  p = p->pNext;
    } 
 q->pNext = NULL; 
 delete p;   
}
void RemoveNode(LIST &l,int Msv)
{
  NODE *p, *q; 
  p = l.pHead; 
 if(p->info.masv == Msv) 
 {     
  l.pHead = p->pNext;
    delete p;     
  } 
  else     
  q = p->pNext;   
  if(q->info.masv ==Msv) 
  {     
  p->pNext = q->pNext;   
    q->pNext = NULL;
    delete q;                         
  }       
}
NODE* Search(LIST l) 
{
 char hoten[30];
 int Masv;
 int i=1;
 NODE* p=l.pHead;
 printf("Nhap vao ma so sinh vien :");
 scanf("%d",&Masv);
 while(p&&p->info.masv!=Masv)
 p=p->pNext;
 return p;
}
void hoanvi(SV &a,SV &b)
{
 SV itamp;
 itamp=a;
 a=b;
 b=itamp;
}
void ListSelectionSort(LIST &l)
{
    NODE*min;
    NODE *p, *q;
    p = l.pHead;
    while(p!=l.pTail)
    {
        q = p->pNext;
        min = p;
        while(q!=NULL)
        {
  if(q->info.masv < min->info.masv)
  min = q;
    q = q->pNext;
        }
        hoanvi(min->info, p->info);
        p = p->pNext; 
    }
}
void  InterChangeSort(LIST &l)
{
 NODE *p;
 NODE *q;
 for ( p=l.pHead ; p!=l.pTail ; p=p->pNext )
  for ( q=p->pNext ; q!=NULL ; q=q->pNext )
  if ( p->info.masv > q->info.masv )
    hoanvi( p->info , q->info );
}
void XuatDS(LIST l)
{
 NODE *p;
 p=l.pHead;
 if(l.pHead==NULL)
  printf("\n Danh sach rong");
 printf("\n-------------------------------");
 printf("\n%-20s %-20s ","MaSV","Ho Ten");
 printf("\n-------------------------------");
 while(p!=NULL)
 {
  printf("\t\n%-20d %-20s ",p->info.masv,p->info.hoten);
  p=p->pNext;
 }
}
void XuatTK(NODE* p)
{
 if(p==NULL)
  printf("\nDanh sach rong");
 else
 {
  printf("\nSinh vien ban can tim:");
  printf("\n-------------------------------");
  printf("\n%-20s %-20s ","MaSV","Ho Ten");
  printf("\n-------------------------------");
  printf("\t\n%-20d %-20s ",p->info.masv,p->info.hoten);
 }
}
void main()
{
 printf("\n_________________Quan ly Sinh vien_____________________");
 printf("\n__________________Tran Van Thinh_______________________");
    SV x;
    LIST l;
    NODE* p=new NODE;
    NODE* q=new NODE;
    NODE* a=new NODE;
    Init(l);
    int tiep=1;
    int chon;
 int i;
 int n;
 printf("\n\nNhap vao so sinh vien : ");
 scanf("%d",&n);
 for(i=0;i<n;i++)
 {
  printf("\nNhap vao sinh vien thu %d",i+1);
  fflush(stdin);
  printf("\n\nNhap vao ho ten:");
  gets(x.hoten);
  printf("\n\nNhap vao mssv:");
  scanf("%d",&x.masv);
  p=GetNode(x);
  AddTail(l,p); 
 }
 XuatDS(l);
 printf("\n______________________________________________________________"); 
    while(tiep==1)
    {
    printf("\n\t----------------------------------------------------");
    printf("\n\t+                      MENU                        +");
    printf("\n\t-----------------------------------------------------");
    printf("\n\t+          1.Chen 1 NODE vao dau DSLK              +");
  printf("\n\t+          2.Chen 1 NODE vao cuoi DSLK              +");
  printf("\n\t+          3.Chen 1 NODE sau  DSLK                +");
  printf("\n\t+          4.Xoa 1 NODE o dau DSLK                  +");
  printf("\n\t+          5.Xoa 1 NODE o cuoi DSLK                +");
  printf("\n\t+          6.Xoa Node bat ki                        +");
  printf("\n\t+          7.huy toan bo danh sach                  +");
  printf("\n\t+          8.Duyet DSLK                            +");
  printf("\n\t+          9.Tim 1 NODE co khoa k                  +");
  printf("\n\t+          10.Sap xep DSLK theo pp interChangeSort  +");
  printf("\n\t+          11.Sap xep theo pp selecsionsort        +");
  printf("\n\t+          0:thoat.                                +");
  printf("\n\t+---------------------------------------------------+");
    printf("\nMoi ban chon:");
    scanf("%d",&chon);
    switch(chon)
    {
  case 1:
      fflush(stdin);
      printf("\n\nNhap vao ho ten:");
      gets(x.hoten);
      printf("\n\nNhap vao mssv:");
      scanf("%d",&x.masv);
      p=GetNode(x);
      AddFirst(l,p);
      printf("\nDanh sach sau khi them");
      XuatDS(l);
      printf("\nTiep 1!! thoat phim bat ki!! : ");
      scanf("%d",&tiep);
      break;
      case 2:
      fflush(stdin);
      printf("\n\nNhap vao ho ten:");
      gets(x.hoten);
      printf("\n\nNhap vao mssv:");
      scanf("%d",&x.masv);
      p=GetNode(x);
      AddTail(l,p);
      printf("\nDanh sach sau khi them");
      XuatDS(l);
      printf("\nTiep 1!! thoat phi bat ki : ");
      scanf("%d",&tiep);
      break;
    case 3:
    fflush(stdin);
      printf("\n\nNhap vao ho ten:");
      gets(x.hoten);
      printf("\n\nNhap vao mssv:");
      scanf("%d",&x.masv);
      q=GetNode(x);
      AddAfter(l,p,q);
      printf("\nDanh sach sau khi them");
      XuatDS(l);
      printf("\nTiep 1!! thoat phi bat ki : ");
      scanf("%d",&tiep);
      break;
    case 4:
      printf("\nDa xoa sv dau ds\n\n");
      RemoveHead(l);
      printf("\n\tDanh sach sau khi xoa");
      XuatDS(l);
      printf("\nTiep 1!! thoat phim bat ki!! : ");
      scanf("%d",&tiep);
      break;
  case 5:
    printf("\nDa xoa sv cuoi DS\n\n");
    RemoveTail(l);
    printf("\n\tDanh sach sau khi xoa");
    XuatDS(l);
    printf("\nTiep 1!! thoat phi bat ki : ");
      scanf("%d",&tiep);
    break;
  case 6:
    int Msv;
    printf("\n\nNhap vao mssv ban muon xoa:");
      scanf("%d",&Msv);
    RemoveNode(l,Msv);
    printf("\n\tDanh sach sau khi xoa");
    XuatDS(l);
    printf("\nTiep 1!! thoat phim bat ki!! : ");
      scanf("%d",&tiep);
    break;
  case 7:
    Removelist(l);
    XuatDS(l);
    printf("\nTiep 1!! thoat phi bat ki : ");
      scanf("%d",&tiep);
      break;
      case 8:
      printf("\nDuyet danh sach:");
      printf("\n");
      XuatDS(l);
      printf("\nTiep 1!! thoat phim bat ki!! : ");
      scanf("%d",&tiep);
      break;
      case 9:
      a=Search(l);
      if(a!=NULL)
      XuatTK(a);
      else
      {
    printf("Khong thay Ma Sv nay");
      }
      printf("\nTiep 1!! thoat phi bat ki : ");
      scanf("%d",&tiep);
      break;
  case 10:
    printf("\nMang da xap xep theo ma sinh vien:");
      InterChangeSort(l);
      XuatDS(l);
      printf("\nTiep 1!! thoat phim bat ki!! : ");
      scanf("%d",&tiep);
      break;
  case 11:
    printf("\nMang da xap xep theo ma sinh vien:");
      ListSelectionSort(l);
      XuatDS(l);
      printf("\nTiep 1!! thoat phim bat ki!! : ");
      scanf("%d",&tiep);
      break;       
    case 0:
        exit(1);   
    }
    } 
}


Về Đầu Trang

Hôm nay: 20/5/2012, 19:43