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
Tìm thấy 2 mục
bài Danh sách liên kết đơn - 2/12/2009, 20:09
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);
}
}
}


