Tải bản đầy đủ (.pdf) (19 trang)

Bài giảng về cấu trúc dữ liệu và giải thuật

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (56.8 KB, 19 trang )

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100
typedef char inf1[20];
typedef float inf2;
typedef float inf3;
typedef struct _svien { //Dinh nghia kieu du lieu hsinh
inf1 hten;
inf2 cnang;
inf3 ccao;
} svien;
typedef svien list[MAX];
list p;
// Nguyen mau ham
int nhap();//Nhap thong tin cho danh sach sinh vien
svien nhapsv();//Nhap thong tin cho 1 sihn vien
void xuat(int);//Xuat danh sach sinh vien ra man hinh
int them(svien,int,int);//Them mot sv vao ds
int timkiem(inf1,int);//Tim 1 nguoi tra ve vi tri trong ds
int xoa(int,int); //Xoa mot sv ra ds
void menu();//hien thi menu

int main(){
clrscr();
svien temp;
inf1 hten;
int n=0,choice,vitri;//n la so luong sinh vien
while (1){
clrscr();


menu();
printf("\nMoi lua chon:");scanf("%d",&choice); fflush(stdin);
switch (choice){
case 0: exit(0);
case 1:n=nhap();break;
case 2:clrscr();xuat(n);break;
case 3:strcpy(temp.hten,"Le Them");
temp.ccao=155;temp.cnang=temp.ccao-105;
n=them(temp,2,n);break;
case 4:temp=nhapsv();
printf("\nVi tri muon them:");scanf("%d",&vitri);
n=them(temp,vitri,n);break;
case 5:timkiem("Le Tim",n); break;
case 6:printf("\nNhap ten sv:
");gets(hten);timkiem(hten,n);break;
case 7:n=xoa(2,n);break;
case 8:printf("\nNhap vi tri can xoa:
");scanf("%d",&vitri);fflush(stdin);
n=xoa(vitri,n);break;
case 9:if((vitri=timkiem("Le Xoa",n))!=0) n=xoa(vitri,n);break;
case 10: printf("\nNhap ten: ");gets(hten);
if ((vitri=timkiem(hten,n))!=0) n=xoa(vitri,n); break;
default: printf("Lua chon khong hop le !");getch();break;
}
};
}

int nhap(){
inf1 hten;
int i=0;

inf3 ccao;
do{
printf("\nNhap ten sv thu %d (nhap 'end' de ket thuc) :",i+1);
gets(hten);
if (strcmpi(hten,"end")&&(i<MAX)) {
strcpy(p[i].hten,hten);
printf("\nNhap thong tin cho sv %s:",p[i].hten);
printf("\nChieu cao (cm): ");scanf("%f",&ccao);fflush(stdin);
p[i].ccao=ccao;
p[i].cnang= ccao - 105;
i++;
}
if (i==MAX) printf("FULL");
} while (strcmpi(hten,"end")&&(i<MAX));
return i;
}

svien nhapsv(){
svien temp;
inf2 ccao;
inf1 hten;
printf("\nHo ten: ");gets(hten);
strcpy(temp.hten,hten);
printf("\nChieu cao: (cm) ");scanf("%f",&ccao);fflush(stdin);
temp.ccao=ccao;
temp.cnang=ccao-105;
return temp;
}

void xuat(int n){

int i;
if (n==0) printf("\nDanh sach Rong !");
for (i=0;i<n;i++){
printf("\n%d,Sv:%-20s",i+1,p[i].hten);
printf("\tcc: %4.1f (cm) \tcn: %4.1f (kg) ",p[i].ccao,p[i].cnang);
}
getch();
}

int them(svien temp, int vitri,int n){
int i;
if (vitri<1||vitri>n+1) printf("\nVi tri khong hop le !");
else if (n>=100) printf("\nDanh sach het cho trong !");
else{
n++;
for (i=n-1;i>=vitri;i ) p[i]=p[i-1];
p[i]=temp;
printf("\nThanh cong !");
}
getch();
return n;
}

int timkiem(inf1 hten,int n){
int i=0;
while (strcmpi(p[i].hten,hten)) i++;
if (i>=n) printf("\nKhong tim thay %s trong danh sach !",hten);
else{
printf("\nThong tin sv %s :",hten);
printf("\nCcao: %4.1f \t Cnang: %4.1f \t Vi tri:

%3d",p[i].ccao,p[i].cnang,i+1);
}
getch();
if (i<100) return i+1;
else return 0;
}

int xoa(int vitri,int n){
int i;
if (vitri<1||vitri>n) printf("\nVi tri khong thich hop");
else {
for(i=vitri-1;i<n;i++) p[i]=p[i+1];
n ;
printf("\nThanh Cong ");
}
getch();
return n;
}
void menu(){
printf("\n1. Nhap moi mot danh sach sinh vien");
printf("\n2. Liet ke danh sach");
printf("\n3. Them 'Le Them' ccao 155 vao vi tri thu 2 danh
sach");
printf("\n4. Them mot sv vao danh sach");
printf("\n5. Tim kiem sv 'Le Tim' trong danh sach");
printf("\n6. Xem thong tin mot sv");
printf("\n7. Xoa sv thu 2 ra khoi danh sach");
printf("\n8. Xoa sv co vi tri x ra khoi danh sach");
printf("\n9. Xoa sv 'Le Xoa' trong ds neu co");
printf("\n10. Xoa mot sv ra khoi danh sach");

printf("\n0. Ket thuc chuong trinh");
}
//Nhap vao ds sinh vien LIFO: vao sau ra truoc
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100

typedef char inf1[20];
typedef float inf2;
typedef float inf3;

typedef struct _svien { //Dinh nghia kieu du lieu hsinh
inf1 hten;
inf2 cnang;
inf3 ccao;
struct _svien *next;
} svien;

svien *top=NULL,*p=NULL; //Phan tu dau tien cua ds
// Nguyen mau ham
svien *nhapsv(svien *tem);//Nhap thong tin cho danh sach sinh
vien
void xuatsv(svien *tem);//Xuat thong tin 1 sinh vien
void pus(svien *tem);//Them mot sv vao dau danh sach tang dan
theo ho ten
void xuatds(svien *top);
void nhapds();//Nhap danh sach sin vien
void xoasv(inf1 hten);//Xoa sv co ten la hten

void timsv(inf1 hten);//Tim va xuat thong tin sv co ten la hten
void menu();//Hien thi menu

int main(){
clrscr();
inf1 hten;
int choice;
while (1){
menu();
printf("\nMoi lua chon:");scanf("%d",&choice); fflush(stdin);
switch (choice){
case 0: exit(0);
case 1:nhapds();break;
case 2:clrscr();p=new svien;p=nhapsv(p);pus(p);break;
case 3:clrscr();xuatds(top);break;
case 4: printf("\Nhap ho ten sv muon xem thong tin:
");gets(hten);timsv(hten);break;
case 5:if (top!=NULL) top=top->next; else printf("\nDanh sach
rong !"); break;
case 6: printf("\nNhap ho ten sv can xoa:
");gets(hten);xoasv(hten);break;

default: printf("Lua chon khong hop le !");getch();break;

}
clrscr();
};
}
svien *nhapsv(svien *tem){
inf1 hten={0};

inf2 ccao=0;
printf("\nNhap thong tin cho sv:");
printf("\nNhap ten: "); gets(hten);
strcpy(tem->hten,hten);
printf("Nhap chieu cao (cm):");scanf("%f",&ccao);
fflush(stdin);//xoa bo nho dem ban phim
tem->ccao=ccao;
tem->cnang=ccao-105;
return tem;
}
void xuatsv(svien *tem){
printf("\nTen sv: ");printf("%-20s",tem->hten);
printf("\tChieu cao %.1f (cm) \t Can nang chuan %.1f",tem-
>ccao,tem->cnang);
}
void pus(svien *tem){
tem->next=top;
top=tem;
}
void xuatds(svien *top){
svien *tem;
tem=top;//Cat giu top
if (tem==NULL) printf("\nDanh sach rong !");
else printf("\nDanh sach sv:");
while (tem!=NULL){
xuatsv(tem); //xuat thong tin
tem=tem->next;//tro den sv tiep theo
}
getch();
}

void nhapds(){
int end=2;
while (end==2){
p=new svien;//Cap phat moi bo nho cho sv moi
p=nhapsv(p);//Nhap thong tin cho sv p
pus(p);
printf("\t\t\t1. Ket thuc");
printf("\n\t\t\t2. Nhap tiep");
printf("\n\t\t\tChoice ? ");
scanf("%d",&end) ;fflush(stdin);
}
clrscr();
}
void xoasv(inf1 hten){
svien *hientai,*ketruoc;
hientai=top;
while ((hientai!=NULL)&&strcmpi(hientai->hten,hten)) {
ketruoc=hientai;
hientai=hientai->next;
};
if (hientai==NULL) printf("\nKhong tim thay sinh vien !");
else {
if (hientai==top) top=hientai->next;
else ketruoc->next=hientai->next;
printf("\nXoa thanh cong");
getch();
}
}
void timsv(inf1 hten){
svien *tem;

tem=top;
while ((tem!=NULL)&&strcmpi(tem->hten,hten)) tem=tem-
>next;
if (tem==NULL) printf("\nKhong tim thay sinh vien");
else xuatsv(tem);
getch();
}
void menu(){
printf("\n1. Nhap moi mot danh sach sinh vien");
printf("\n2. Them mot sv vao dau danh sach");
printf("\n3. Liet ke danh sach");
printf("\n4. Nhap ten sv can xem thong tin");
printf("\n5. Xoa sv dau tien ra khoi danh sach");
printf("\n6. Nhap ten sinh vien can xoa ra khoi danh sach");
printf("\n0. Ket thuc chuong trinh");
}
//Danh Sach dang FIFO: vao truoc ra truoc
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100

typedef char inf1[20];
typedef float inf2;
typedef float inf3;

typedef struct _svien { //Dinh nghia kieu du lieu hsinh
inf1 hten;
inf2 cnang;

inf3 ccao;
struct _svien *next;
} svien;

svien *first=NULL,*last=NULL,*p=NULL;
// Nguyen mau ham
svien *nhapsv(svien *tem);//Nhap thong tin cho danh sach sinh
vien
void xuatsv(svien *tem);//Xuat thong tin 1 sinh vien
void pus(svien *tem);//Them mot sv vao cuoi danh sach lien ket
void pus1(svien *tem);//Them mot sv vao dau danh sach
void xuatds(svien *top);
void nhapds();//Nhap danh sach sin vien
void xoasv(inf1 hten);//Xoa sv co ten la hten
void timsv(inf1 hten);//Tim va xuat thong tin sv co ten la hten
void menu();//Hien thi menu

int main(){
clrscr();
inf1 hten;
int choice;
while (1){
menu();
printf("\nMoi lua chon:");scanf("%d",&choice); fflush(stdin);
switch (choice){
case 0: exit(0);
case 1:nhapds();break;
case 2:clrscr();p=new svien;p=nhapsv(p);pus1(p);break;
case 3:clrscr();xuatds(first);break;
case 4: printf("\Nhap ho ten sv muon xem thong tin:

");gets(hten);timsv(hten);break;
case 5:if (first!=NULL) first=first->next; else printf("\nDanh
sach rong !"); break;
case 6: printf("\nNhap ho ten sv can xoa:
");gets(hten);xoasv(hten);break;

default: printf("Lua chon khong hop le !");getch();break;

}
clrscr();
};
}
svien *nhapsv(svien *tem){
inf1 hten={0};
inf2 ccao=0;
printf("\nNhap thong tin cho sv:");
printf("\nNhap ten: "); gets(hten);
strcpy(tem->hten,hten);
printf("Nhap chieu cao (cm):");scanf("%f",&ccao);
fflush(stdin);//xoa bo nho dem ban phim
tem->ccao=ccao;
tem->cnang=ccao-105;
return tem;
}
void xuatsv(svien *tem){
printf("\nTen sv: ");printf("%-20s",tem->hten);
printf("\tChieu cao %.1f (cm) \t Can nang chuan %.1f",tem-
>ccao,tem->cnang);
}
void pus(svien *tem){ //Them vao cuoi danh sach phan tu tem

tem->next=NULL;
if (first==NULL) first=tem;
else last->next=tem;
last=tem;
}
void pus1(svien *tem){//Them 1 sv vao dau danh sach
tem->next=first;
first=tem;
}
void xuatds(svien *top){
svien *tem;
tem=top;//Cat giu top
if (tem==NULL) printf("\nDanh sach rong !");
else printf("\nDanh sach sv:");
while (tem!=NULL){
xuatsv(tem); //xuat thong tin
tem=tem->next;//tro den sv tiep theo
}
getch();
}
void nhapds(){
int end=2;
while (end==2){
p=new svien;//Cap phat moi bo nho cho sv moi
p=nhapsv(p);//Nhap thong tin cho sv p
pus(p);
printf("\t\t\t1. Ket thuc");
printf("\n\t\t\t2. Nhap tiep");
printf("\n\t\t\tChoice ? ");
scanf("%d",&end) ;fflush(stdin);

}
clrscr();
}
void xoasv(inf1 hten){
svien *hientai,*ketruoc;
hientai=first;
while ((hientai!=NULL)&&strcmpi(hientai->hten,hten)) {
ketruoc=hientai;
hientai=hientai->next;
};
if (hientai==NULL) printf("\nKhong tim thay sinh vien !");
else {
if (hientai==first) first=hientai->next;
else ketruoc->next=hientai->next;
printf("\nXoa thanh cong");
getch();
}
}
void timsv(inf1 hten){
svien *tem;
tem=first;
while ((tem!=NULL)&&strcmpi(tem->hten,hten)) tem=tem-
>next;
if (tem==NULL) printf("\nKhong tim thay sinh vien");
else xuatsv(tem);
getch();
}
void menu(){
printf("\n1. Nhap moi mot danh sach sinh vien");
printf("\n2. Them mot sv vao dau danh sach");

printf("\n3. Liet ke danh sach");
printf("\n4. Nhap ten sv can xem thong tin");
printf("\n5. Xoa sv dau tien ra khoi danh sach");
printf("\n6. Nhap ten sinh vien can xoa ra khoi danh sach");
printf("\n0. Ket thuc chuong trinh");
}
//Danh Sach sap xep theo thu tu tang dan cua ho ten
// su dung stack
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100

typedef char inf1[20];
typedef float inf2;
typedef float inf3;

typedef struct _svien { //Dinh nghia kieu du lieu hsinh
inf1 hten;
inf2 cnang;
inf3 ccao;
struct _svien *next;
} svien;

svien *top=NULL,*p=NULL;
// Nguyen mau ham
svien *nhapsv(svien *tem);//Nhap thong tin cho danh sach sinh
vien
void xuatsv(svien *tem);//Xuat thong tin 1 sinh vien

void pus(svien *tem);//Them sv vao ds theo tu tang dan cua ho
ten
void pus1(svien *tem);//Them mot sv vao dau danh sach
void xuatds(svien *top);
void nhapds();//Nhap danh sach sin vien
void xoasv(inf1 hten);//Xoa sv co ten la hten
void timsv(inf1 hten);//Tim va xuat thong tin sv co ten la hten
void menu();//Hien thi menu

int main(){
clrscr();
inf1 hten;
int choice;
while (1){
menu();
printf("\nMoi lua chon:");scanf("%d",&choice); fflush(stdin);
switch (choice){
case 0: exit(0);
case 1:top=NULL;nhapds();break;
case 2:clrscr();p=new svien;p=nhapsv(p);pus1(p);break;
case 3:clrscr();xuatds(top);break;
case 4: printf("\Nhap ho ten sv muon xem thong tin:
");gets(hten);timsv(hten);break;
case 5:if (top!=NULL) top=top->next; else printf("\nDanh sach
rong !"); break;
case 6: printf("\nNhap ho ten sv can xoa:
");gets(hten);xoasv(hten);break;

default: printf("Lua chon khong hop le !");getch();break;


}
clrscr();
};
}
svien *nhapsv(svien *tem){
inf1 hten={0};
inf2 ccao=0;
printf("\nNhap thong tin cho sv:");
printf("\nNhap ten: "); gets(hten);
strcpy(tem->hten,hten);
printf("Nhap chieu cao (cm):");scanf("%f",&ccao);
fflush(stdin);//xoa bo nho dem ban phim
tem->ccao=ccao;
tem->cnang=ccao-105;
return tem;
}
void xuatsv(svien *tem){
printf("\nTen sv: ");printf("%-20s",tem->hten);
printf("\tChieu cao %.1f (cm) \t Can nang chuan %.1f",tem-
>ccao,tem->cnang);
}
void pus(svien *tem){ //Them sv vao ds theo thu tu tang dan ho
ten
svien *hientai=NULL,*ketruoc=NULL;
hientai=top;
while ((strcmpi(tem->hten,hientai-
>hten)>0)&&(hientai!=NULL)){
ketruoc=hientai;
hientai=hientai->next;
}

if (hientai==top) {tem->next=top;top=tem;}
else {
tem->next=ketruoc->next;
ketruoc->next=tem;
}
}
void pus1(svien *tem){//Them 1 sv vao dau danh sach
tem->next=top;
top=tem;
}
void xuatds(svien *top){
svien *tem;
tem=top;//Cat giu top
if (tem==NULL) printf("\nDanh sach rong !");
else printf("\nDanh sach sv:");
while (tem!=NULL){
xuatsv(tem); //xuat thong tin
tem=tem->next;//tro den sv tiep theo
}
getch();
}
void nhapds(){
int end=2;
while (end==2){
p=new svien;//Cap phat moi bo nho cho sv moi
p=nhapsv(p);//Nhap thong tin cho sv p
pus(p);
printf("\t\t\t1. Ket thuc");
printf("\n\t\t\t2. Nhap tiep");
printf("\n\t\t\tChoice ? ");

scanf("%d",&end) ;fflush(stdin);
}
clrscr();
}
void xoasv(inf1 hten){
svien *hientai,*ketruoc;
hientai=top;
while ((hientai!=NULL)&&strcmpi(hientai->hten,hten)) {
ketruoc=hientai;
hientai=hientai->next;
};
if (hientai==NULL) printf("\nKhong tim thay sinh vien !");
else {
if (hientai==top) top=hientai->next;
else ketruoc->next=hientai->next;
printf("\nXoa thanh cong");
getch();
}
}
void timsv(inf1 hten){
svien *tem;
tem=top;
while ((tem!=NULL)&&strcmpi(tem->hten,hten)) tem=tem-
>next;
if (tem==NULL) printf("\nKhong tim thay sinh vien");
else xuatsv(tem);
getch();
}
void menu(){
printf("\n1. Nhap moi mot danh sach sinh vien");

printf("\n2. Them mot sv vao dau danh sach");
printf("\n3. Liet ke danh sach");
printf("\n4. Nhap ten sv can xem thong tin");
printf("\n5. Xoa sv dau tien ra khoi danh sach");
printf("\n6. Nhap ten sinh vien can xoa ra khoi danh sach");
printf("\n0. Ket thuc chuong trinh");
}

×