BÀI TẬP VỀ MẢNGCho một mảng gồm n phần tử chứa các số nguyên.. Hãy tìm phần tử x1 có trong mảng theo phương pháp tìm tuyến tính.. Cho một số nguyên x2, tìm phần tử x2 có trong mảng theo
Trang 1BÀI TẬP VỀ MẢNG
Cho một mảng gồm n phần tử chứa các số nguyên
a Cho một số x1 Hãy tìm phần tử x1 có trong mảng theo phương pháp tìm tuyến tính
b Sắp xếp mảng tăng/giảm dần theo các phương pháp chọn trực tiếp, đổi chỗ trực tiếp, nổi bọt
c Cho một số nguyên x2, tìm phần tử x2 có trong mảng theo phương pháp tìm kiếm nhị phân(đối với mảng đã được sắp xếp)
d Tìm phần tử lớn nhất/nhỏ nhất trong mảng (Theo phương pháp đệ qui và không
đệ qui)
BÀI TẬP VỀ DSLK Bài 1: Cho một DSLK đơn Mỗi phần tử gồm info là một số nguyên và liên kết chỉ
đến phần tử kế
a Tạo 2 DSLK đơn mới (không phá huỷ DSLK đã cho)
Một danh sách chứa các số lẻ của danh sách đã cho
Một danh sách chứa các số chẵn của danh sách đã cho
b Viết chương trình in ra DSLK đã cho theo thứ tự ngược (HD: Sử dụng đưa DSLK vào Stack)
c In ra các run tự nhiên từ DSLK đã cho:
VÍ DỤ: DSLK ban đầu biểu diễn các số: 1 5 6 4 8 3 7
In ra các dãy số: 1 5 6
4 8
3 7
d Sắp xếp tăng/giảm dần danh sách đã cho theo các phương pháp: chọn trực tiếp, nổi bọt, đổi chỗ trực tiếp
Bài 2: Cho một DSLK đơn Mỗi phần tử info là một ký tự ('A' 'Z') và liên kết chỉ đến
phần tử kế
a Tạo một danh sách liên kết đơn mới chứa các ký tự không có trong danh sách đã cho
b Viết chương trình con loại khỏi danh sách đã cho các phần tử vi phạm điều kiện tăng dần của danh sách Biết rằng phần tử đầu tiên được giữ lại trong danh sách VD: DSLK biểu diễn : D F H G K M A B Q
DSLK sau khi loại: D F H K M Q
c Với danh sách đã cho có thứ tự tăng dần (không có phần tử trùng nhau) Viết chương trình bổ sung vào danh sách này sao cho cho danh sách sẽ chứa đầy đủ các
ký tự từ 'A' đến 'Z'
Bài 3: Quản lý thông tin sinh nhân viên của một lớp gồm :
- Mã sinh viên : chuỗi 8 ký tự
- Tên sinh viên : chuỗi 20 ký tự
- Điểm Toán, Lý, Hoá
Tổ chức cấu trúc dữ liệu thích hợp để biểu diễn các thông tin trên, và cài đặt có các chức năng:
Cập nhật lý lịch cho sinh viên (thêm, xoá, sửa)
Tìm thông tin của một sinh viên.
In ra những sinh viên có ĐTB > 5 với ĐTB = (Toán *2 +Lý +Hoá)/4
BÀI TẬP VỀ CÂY NHỊ PHÂN
Cho một cây nhị phân tìm kiếm Mỗi node trên cây có info là một số nguyên và liên kết chỉ đến cây con trái và cây con phải
Trang 2a Tính số node, số node lá, số node nhánh trên cây.
b Tính chiều cao của cây
c Tính độ dài của cây
d Tính tổng giá trị của các node trên cây
e Nhập vào một số nguyên x Viết thủ tục tìm x trên cây Nếu tìm thấy hãy in ra màn hình giá trị của các node lớn hơn x
f Duyệt cây nhị phân theo các phương pháp NLR, LNR, LRN
Bài 3: Quản lý thông tin sinh nhân viên của một lớp gồm :
- Mã sinh viên : chuỗi 8 ký tự
- Tên sinh viên : chuỗi 20 ký tự
- Điểm Toán, Lý, Hoá
Tổ chức cấu trúc dữ liệu thích hợp để biểu diễn các thông tin trên, và cài đặt có các chức năng:
Cập nhật lý lịch cho sinh viên (thêm, xoá, sửa)
Tìm thông tin của một sinh viên.
In ra những sinh viên có ĐTB > 5 với ĐTB = (Toán *2 +Lý +Hoá)/4
Đáp án:
#include<stdio.h>
#include<conio.h>
#include<string.h>
typedef char infor1[15];
typedef char infor2[20];
typedef float infor3;
struct Svien
{
//khai bao cac truong :
infor1 masv; //ma sinh vien
infor2 tensv //ten sinh vien
,ho; //Ho va ten dem cuar sinh vien
infor3 dtoan //diem toan
,dly //diem ly
,dhoa //diem hoa
,dtb; //diem trung binh
Svien *next;
};
typedef Svien *list;
list P,F;
int cv;//cong viec
infor1 code;//ma sinh vien
infor2 name,fname;//ten sinh vien
infor3 t,l,h,tb;//Diem toan, ly, hoa, va diem trung binh
// -KHAI BAO CAC NGUYEN MAU HAM -
// Nhap moi danh sach tu ban phim
void nhap(list &F);
// in danh sach sinh vien len man hinh -
Trang 3void xuat(list F);
// in danh sach sinh vien co diem trung binh >=7 len man hinh
void xuat2(list F);
// Cap nhap ly lich cho sinh vien them - sua- xoa
void them(list &F,infor1 code,infor2 fname,infor2 name,infor3 t,infor3 l,infor3 h,infor3 tb);//them mot sinh vien vao danh sach
void sua(list ct);//sua phan tu chi boi con tro ct
void xoa(list &F,list t);//xoa sinh vien duoc chi boi con tro t
// Tim thong tin sinh vien qua viec nhap ma sinh vien
void tim(list F,infor1 code);
// -XAY DUNG CAC CHUONG TRINH CON -
void nhap(list &F)
{
F = NULL;
do
{
printf("\n Nhap ho va ten lot : ");
gets(fname);gets(fname);
printf("\n Nhap ten (bo trong de ket thuc) : ");
gets(name);
if(strlen(name)>0)
{
printf("\n Ma sinh vien : ");
gets(code);
printf("\n Diem toan : ");
scanf("%f",&t);
printf("\n Diem ly : ");
scanf("%f",&l);
printf("\n Diem hoa :");
scanf("%f",&h);
tb = (t*2 + l + h)/4;
them(F,code,fname,name,t,l,h,tb);
}
}
while(strlen(name)>0);
}
void xuat(list F)
{
list P;
P = F;
if(P==NULL) printf("\n Danh sach rong !");
else
{
printf("\n DANH SACH SINH VIEN");
printf("\n");
printf("\n Ma sv Ho Ten Toan Ly Hoa Diem TB");
}
while(P!=NULL)
{
printf("\n %10s%13s%7s%10.1f%10.1f%10.1f%10.1f",(*P).masv,(*P).ho,
Trang 4(*P).tensv,(*P).dtoan,(*P).dly,(*P).dhoa,(*P).dtb);
P= (*P).next;
}
printf("\n +An Enter de ve Menu chinh !");
}
void them(list &F,infor1 code,infor2 fname,infor2 name,infor3 t,infor3 l,infor3 h,infor3 tb)
{
list P,before,after;
P=new Svien;
strcpy((*P).ho,fname);
strcpy((*P).tensv,name);
strcpy((*P).masv,code);
(*P).dtoan = t;
(*P).dly = l;
(*P).dhoa = h;
(*P).dtb = tb;
after = F;
while((after!=NULL)&&(strcmp((*P).tensv,(*after).tensv)>0))
{
before = after;
after = (*after).next;
}
(*P).next = after;
if(F==after) F=P;
else (*before).next = P;
}
void xoa(list &F,list t)
{
list after,before;
after = F;
while((after!=NULL)&&(after!=t))
{
before = after;
after = (*after).next;
}
if(after!=NULL)
{
if(F==t) F = (*t).next;
else (*before).next = (*t).next;
delete t;
}
}
list timkiem(list F, infor1 code)
{
list P;
P=F;
while ( (P!=NULL) && strcmp((*P).masv,code) )
P= (*P).next;
return P;
}
Trang 5void xuat2(list F)
{
list P;
P = F;
printf("\n DANH SACH SINH VIEN CO DIEM TRUNG BINH LON HON 7");
printf("\n");
printf("\n Ma sv Ho Ten Toan Ly Hoa Diem TB");
while(P!=NULL)
{
if((*P).dtb>=7)
{
printf("\n %10s%13s%7s%10.1f%10.1f%10.1f%10.1f",(*P).masv,(*P).ho,
(*P).tensv,(*P).dtoan,(*P).dly,(*P).dhoa,(*P).dtb);
}
P= (*P).next;
}
printf("\n +An Enter de ve Menu chinh !");
}
void sua(list ct)
{
printf("\n Ho va ten lot : ");
gets(fname);gets(fname);
strcpy((*ct).ho,fname);//thay ho va ten lot moi
printf("\n Ten : ");
gets(name); //lay chuoi tu ban phim
strcpy((*ct).tensv,name);//thay the chuoi cu bang chuoi moi
tt: printf("\n Ma sv : ");
gets(code);//lay ma so sinh vien tu ban phim
P = timkiem(F,code);//tim kiem xem co bi trung ma voi sinh vien khac khong if((P!= NULL)&&(strcmp((*ct).masv,code)!=0)) //neu trung bao loi va cho nhap lai
ma sinh vien
{
printf("\n Sinh vien nay da co trong danh sach Vui long nhap lai !");
goto tt;
}
strcpy((*ct).masv,code);//thay the ma so cu bang ma so moi
printf("\n Diem Toan : ");
scanf("%f",&t);
(*ct).dtoan = t;
printf("\n Diem Ly : ");
scanf("%f",&l);
(*ct).dly = l;
printf("\n Diem Hoa : ");
scanf("%f",&h);
(*ct).dhoa = h;
tb = (t*3 + l*2 + h)/6;
(*ct).dtb = tb;
printf("\n Sua thanh cong !");
}
//======== HAM MAIN()=======
void main()
Trang 6{
clrscr();
F = NULL;
char k;
int tc;
do
{
clrscr();
printf("\n");
printf("\n -Menu -");
printf("\n -MSTUDENT -");
printf("\n *1.Nhap moi danh sach ");
printf("\n *2.Liet ke danh sach ");
printf("\n -");
printf("\n Cap nhat ly lich cho sv");
printf("\n *3.Them ");
printf("\n *4.Sua ");
printf("\n *5.Xoa ");
printf("\n -");
printf("\n *6.Tim sinh vien ");
printf("\n -");
printf("\n *7.In ra nhung sv hoc luc kha ");
printf("\n -");
printf("\n *8.About MStudent");
printf("\n -");
printf("\n *0.Thoat");
printf("\n -") ;
printf("\n *Chon cong viec ban can lam : ");
scanf("%d",&cv);
switch(cv)
{
case 1: nhap(F);break;
case 2:
xuat(F);
getch();
break;
case 3:
printf("\n Nhap ho va ten lot : ");
gets(fname);gets(fname);
printf("\n Nhap ten (bo trong de ket thuc) : ");
gets(name);
tt : printf("\n Ma so sinh vien : ");
gets(code);
P = timkiem(F,code);
if(P!= NULL)
{
printf("\n Sinh vien nay da co trong danh sach Vui long nhap lai !"); goto tt;
}
printf("\n Diem toan : ");
scanf("%f",&t);
Trang 7printf("\n Diem ly : ");
scanf("%f",&l);
printf("\n Diem hoa : ");
scanf("%f",&h);
tb = (t*3 + l*2 + h)/6;
them(F,code,fname,name,t,l,h,tb);
printf("\n Them thanh cong !");getch();break;
case 4:
printf("\n Nhap ma so sinh vien cua sinh vien can sua : ");
gets(code);gets(code);
P = timkiem(F,code);
if(P!=NULL)
{
printf("\n Thong tin sinh vien can sua : ");
printf("\n Ma sv Ho Ten Toan Ly Hoa Diem TB");
printf("\n %10s%13s%7s%10.1f%10.1f%10.1f%10.1f",(*P).masv,(*P).ho, (*P).tensv,(*P).dtoan,(*P).dly,(*P).dhoa,(*P).dtb);
printf("\n Co chac la ban muon sua thong tin ve sv nay : C/K ?");
scanf("%c",&k);
if(k=='c'||k=='C') sua(P);
else printf("\n Lenh sua duoc huy !");
}
else printf("\n Khong tim thay sinh vien co ma so %s trong danh
sach !",code);getch(); break;
case 5:
printf("\n Nhap ma so sinh vien cua sinh vien can xoa : ");
gets(code);gets(code);
P = timkiem(F,code);
if(P!=NULL)
{
printf("\n Thong tin sinh vien can xoa : ");
printf("\n Ma sv Ho Ten Toan Ly Hoa Diem TB");
printf("\n %10s%13s%7s%10.1f%10.1f%10.1f%10.1f",(*P).masv,(*P).ho, (*P).tensv,(*P).dtoan,(*P).dly,(*P).dhoa,(*P).dtb);
printf("\n Co chac la ban muon xoa sinh vien nay : C/K ?");
scanf("%c",&k);
if(k=='c'||k=='C')
{
xoa(F,P);
printf("\n Xoa thanh cong !");
}
else printf("\n Lenh xoa duoc huy !");
}
else printf("\n Khong co sinh vien co ma sv %s trong danh sach !",code);getch(); break;
case 6:
printf("\n Nhap ma so sinh vien can tim : ");
gets(code);gets(code);
P = timkiem(F,code);
if(P!=NULL)
{
Trang 8printf("\n Thong tin sinh vien co ma sinh vien %s la : ",code);
printf("\n Ma sv Ho Ten Toan Ly Hoa Diem TB");
printf("\n %10s%13s%7s%10.1f%10.1f%10.1f%10.1f",(*P).masv,(*P).ho, (*P).tensv,(*P).dtoan,(*P).dly,(*P).dhoa,(*P).dtb);
printf("\n\n Cac tuy chon : 1.Sua 2.Xoa 3.Ve Menu chinh ");
printf("\n Ban chon : ");
scanf("%d",&tc);
switch(tc)
{
case 1 : sua(P);break;
case 2 : xoa(F,P);
printf("\n Xoa thanh cong !");break;
}
}
else printf("\n Khong tim thay sinh vien co ma sv %s trong danh
sach !",code);getch(); break;
case 7:
xuat2(F);
getch();
break;
case 8:
printf("\n # THUC HANH CAU TRUC DU LIEU #");
printf("\n # -@@@ - #");
printf("\n # CHUONG TRINH #");
printf("\n # QUAN LY THONG TIN SINH VIEN MSTUDENT #");
printf("\n # (De 13) #");
printf("\n # Nhom 10 Sinh vien thuc hien : #");
printf("\n # 1.Ngo Van Nang - Lop 06T1 #");
printf("\n # 2.Nguyen Thanh Huyen - Lop 06T1 #");
printf("\n # 3.Nguyen Le Phu Long - Lop 06T1 #");
printf("\n # copyright@ Nhom 10 #");
printf("\n # update 14.5.2008 #");
printf("\n
printf("n +An Enter de ve Menu chinh !");
getch();
break;
}
}
while(cv!=0);
}
QUẢN LÝ SINH VIÊN BẰNG DANH SÁCH LIÊN KẾT
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
//khoi tao danh sach rong
Trang 9typedef int infotype;
struct node {
infotype data;
struct node *next;
}*pd=NULL,*pc=NULL;
/* Chen nut moi co du lieu la e vao DS pd */
void insert(infotype e)
{
struct node *t;
t= (struct node*) malloc(sizeof(struct node));
t->data=e;
t->next=NULL;
if (pd==NULL)
pd=pc=t;
else
{
pc->next=t;
pc=t;
}
}
/* Nhap danh sach */
void nhap()
{
infotype e;
do {
printf("\n nhap so,nhap -1 de thoi:");
scanf("%d",&e);
if (e!=-1)
insert(e);
} while (e!=-1);
}
/* Xem du lieu, dem so nut va tinh tong cac nut cua DS */ void xem(struct node *pd)
{
struct node *t;
int dem=0,tong=0;
t=pd;
while (t!=NULL)
{
printf("%4d",t->data);
dem++;
tong+=t->data;
t=t->next;
}
getch();
printf("\n So PT cua DS la %d",dem);
printf("\n Tong cac PT cua DS la %d",tong);
printf("\n TB cong cua cac pt la %6.2f",(float)tong/dem); printf("\n");
getch();
Trang 10}
/* Chen vao DS 1 nut moi co du lieu la e va o vi tri thu n */ void chen(infotype e,int n)
{
int dem=0;
struct node *t,*tmp,*truoc=NULL;
tmp=pd;
while (tmp!=NULL && dem<n)
{
dem++;
truoc=tmp;
tmp=tmp->next;
}
if (tmp!=NULL)
{
t=(struct node*) malloc(sizeof(struct node));
t->data=e;
if (truoc==NULL)
{
t->next=pd;
pd=t;
}
else
{
truoc->next=t;
t->next=tmp;
}
}
else
printf("\n Vi tri khong tim thay !");
}
/* Xoa 1 nut cua DS o vi tri thu n */
void xoa(int n)
{
int dem=0;
struct node *tmp,*truoc=NULL;
tmp=pd;
while (tmp!=NULL && dem<n)
{
dem++;
truoc=tmp;
tmp=tmp->next;
}
if (tmp==NULL)
printf("\n Khong tim thay");
else
{
if (truoc==NULL)
pd=tmp->next;
else
truoc->next=tmp->next;
Trang 11}
}
/* Dao nguoc danh sach - doi cac moi lien ket */
void daonguoc(struct node **pd, struct node **pc)
{
struct node *truoc=NULL,*sau,*no;
if (*pd != NULL)
{
sau= *pd;
no= sau->next;
*pc= *pd;
while (no!=NULL)
{
sau->next=truoc;
truoc=sau;
sau=no;
no=no->next;
}
sau->next=truoc;
*pd=sau;
}
}
/* Dao nguoc danh sach bang de qui */
struct node *daonguocdq(struct node **pd, struct node **pc) {
struct node *t;
if (*pd!=NULL)
{
if ((*pd)->next != NULL)
{
t=daonguocdq(&((*pd)->next),pc);
(*pc)->next=*pd;
*pc=*pd;
(*pc)->next=NULL;
*pd=t;
}
return *pd;
}
else
return NULL;
}
/* Xoa danh sach */
void xoaDS(struct node **pd)
{
struct node *t;
t=*pd;
while (t!=NULL)
{
t=(*pd)->next;
free(*pd);
Trang 12*pd=t;
}
*pd=NULL;
}
/* sap xep DS theo thu tu tang dan */
void sapxep()
{
struct node *t,*tt;
infotype tmp;
t=pd;
while (t->next != NULL)
{
tt=t->next;
while (tt != NULL)
{
if (t->data>tt->data)
{
tmp=t->data;
t->data=tt->data;
tt->data=tmp;
}
tt=tt->next;
}
t=t->next;
}
}
/* Tim kiem 1 nut trong DSLK co thu tu */
int tim(struct node *pd,infotype x)
{
int n=0;
while (pd != NULL && pd->data<x)
{
n++;
pd=pd->next;
}
if (pd->data==x)
return n;
else
return -1;
}
main()
{
int m;
infotype d;
nhap();
xem(pd);
/* printf("\nNhap vi tri can chen: ");scanf("%d",&m); printf("\n Nhap so can chen: ");scanf("%d",&d); chen(d,m);
xem(pd);