Code bài toán quản lí ,sắp sếp, tìm kiếm sử dụng Queue trong C khai bao queue 2 khoi tao hang doi rong 2 kiem tra hang doi queue rong 2 kiem tra hang doi day 3 them phan tu vao cuoi queue 3 viet ham nhap hang doi 3 viet ham tao input 4 lay mot phan tu ra khoi hang 4 viet ham output 5 loai bo phan tu dau ra khoi dau hang doi 5 tim kiem phan tu theo so k 6 tim kiem mon hoc co luong san pham >10 7 tim san pham co don gia max 7 tim san pham co so luong hang hoa nho nhat 8 bai toan sap xep cac san pham so luong giam dan 8 tinh tien 9 tinh trung binh so luong sp 9 Ham main 10
Trang 1M c L cụ ụ
Code bài toán quản lí ,sắp sếp, tìm kiếm sử dụng Queue trong C
//khai bao queue 2
//khoi tao hang doi rong 2
// kiem tra hang doi queue rong 2
//kiem tra hang doi day 3
//them phan tu vao cuoi queue 3
//viet ham nhap hang doi 3
//viet ham tao input 4
//lay mot phan tu ra khoi hang 4
//viet ham output 5
// loai bo phan tu dau ra khoi dau hang doi 5
// tim kiem phan tu theo so k 6
//tim kiem mon hoc co luong san pham >10 7
//tim san pham co don gia max 7
//tim san pham co so luong hang hoa nho nhat 8
// bai toan sap xep cac san pham so luong giam dan 8
//tinh tien 9
// tinh trung binh so luong sp 9
//Ham main 10
Trang 2#include<conio.h>
#define max 100
struct mypham{
int mamp,soluong,dongia,tongtien; char tenmp[20];
};
//khai bao queue
struct queue{
int head,tail,count;
mypham node[max];
};
//khoi tao hang doi rong
void init(queue &Q){
Q.head=0;
Q.tail=-1;
Q.count=0;
}
// kiem tra hang doi queue rong
int isEmpty(queue Q){
if(Q.count==0)
return 1;
return 0;
}
Trang 3//kiem tra hang doi day
int isFull(queue Q){
if(Q.count==max)
return 1;
return 0;
}
//them phan tu vao cuoi queue
void push(queue &Q, mypham x) //them phan tu vao cuoi Queue {
if (isFull(Q)) printf("Hang doi day !");
else
{
Q.node[++Q.tail] = x; //tang Rear len va gan phan tu vao Q.count++; //tang so phan tu len
}
}
//viet ham nhap hang doi
void nhap(mypham &x){
printf("Moi ban nhap Ma san pham:");
scanf("%d",&x.mamp); fflush(stdin);
printf("Moi ban nhap ten san pham:");
gets(x.tenmp); fflush(stdin);
printf("Moi ban nhap so luong:");
scanf("%d",&x.soluong);
printf("Moi ban nhap don gia:");
Trang 4x.dongia = a;
b = x.soluong*x.dongia;
x.tongtien = b;
}
//viet ham tao input
void input(queue &Q){
int i,n;
mypham x;
printf("nhap vao so san pham:"); scanf("%d",&n);
for(i=0;i<n;i++){
printf("\n%d:\n",i+1); nhap(x);
push(Q,x);
}
}
//lay mot phan tu ra khoi hang
int get(queue &Q){
mypham x;
if(isEmpty(Q))
printf("hang doi rong");
else
{
x=Q.node[Q.head];
Q.head++;
Trang 5}
return 1;
}
//viet ham output
void output(queue Q){
printf("\n %5s%15s%10s%10s%10s","Ma hh","Ten hh","So luong","Don gia","Tong tien");
{
if (isEmpty(Q))
printf("\nHang doi rong !");
else
{
for (int i=Q.head; i<=Q.tail; i++)
{
printf("\n%5s%15s%10s%10s
%10s",Q.node[Q.head].mamp,Q.node[Q.head].tenmp,Q.node[Q.head].soluong,Q.n ode[Q.head].dongia,Q.node[Q.head].tongtien);
Q.head++;
printf("\n -\n");
}
}
}
}
// loai bo phan tu dau ra khoi dau hang doi
int pop(queue &Q) //Loai bo phan tu khoi dau hang doi
Trang 6if (isEmpty(Q)) printf("Hang doi rong !");
else
{
for (int i=Q.head; i<Q.tail; i++){
Q.head=Q.head+1;
return 1;
}
Q.head ; // giam vi tri phan tu cuoi xuong
Q.count ;//giam so phan tu xuong
return 0; //tra ve phan tu lay ra
}
}
// tim kiem phan tu theo so k
int timkiem(queue &Q,int k){
for (int i=Q.head; i<=Q.tail; i++){
if(Q.node[i].mamp==k){
printf("\n%5s%15s%10s%10s
%10s",Q.node[Q.head].mamp,Q.node[Q.head].tenmp,Q.node[Q.head].soluong,Q.n ode[Q.head].dongia,Q.node[Q.head].tongtien);
} }
}
Trang 7//tim kiem mon hoc co luong san pham >10
int timkiem1(queue &Q){
for (int i=Q.head; i<=Q.tail; i++){
if(Q.node[i].soluong>=10){
printf("\n%5s%15s%10s%10s
%10s",Q.node[Q.head].mamp,Q.node[Q.head].tenmp,Q.node[Q.head].soluong,Q.n ode[Q.head].dongia,Q.node[Q.head].tongtien);
} }
}
//tim san pham co don gia max
void timmax(queue &Q){
int MAX;
MAX=Q.node[Q.head].dongia;
for (int i=Q.head; i<=Q.tail; i++){
if(Q.node[i].dongia > MAX){
MAX=Q.node[i].dongia;
printf("\n%5s%15s%10s%10s
%10s",Q.node[Q.head].mamp,Q.node[Q.head].tenmp,Q.node[Q.head].soluong,Q.n ode[Q.head].dongia,Q.node[Q.head].tongtien);
}
}
}
Trang 8//tim san pham co so luong hang hoa nho nhat
void timmin(queue &Q){
int MIN;
MIN=Q.node[Q.head].soluong;
for (int i=Q.head; i<=Q.tail; i++)
if(Q.node[i].soluong < MIN){
MIN=Q.node[i].soluong;
printf("\n%5s%15s%10s%10s
%10s",Q.node[Q.head].mamp,Q.node[Q.head].tenmp,Q.node[Q.head].soluong,Q.n ode[Q.head].dongia,Q.node[Q.head].tongtien);
} }
// bai toan sap xep cac san pham so luong giam dan
void sapxep(queue &Q){
int i,j;
mypham tg;
for(i=Q.head;i<=Q.tail-1;i++)
for(j=i+1;j<=Q.tail;j++)
if(Q.node[i].soluong < Q.node[j].soluong)
{
tg=Q.node[i]; Q.node[i] = Q.node[j]; Q.node[j]=tg;
}
}
Trang 9//tinh tien
void tinhtong(queue &Q){
int i;
int tongtien=0;
for(i=Q.head;i<=Q.tail;i++){
tongtien=tongtien+Q.node[i].tongtien;
}
printf("Tong so luong cua tat ca cac sp la: %d",tongtien); }
// tinh trung binh so luong sp
void trungbinh(queue &Q){
int i;
int tong=0,dem=0;
for(i=Q.head;i<=Q.tail;i++){
tong=tong+Q.node[i].soluong;
dem=dem+1;
}
if(dem>0)
printf("\nSo luong trung binh cua cac san pham la: %0.2f", (float)tong/dem);
else
printf("khong co phan tu thoa man dieu kien tinh!");
}
Trang 10//Ham main
int main(){
int chon;
mypham x;
queue Q;
init(Q);
input(Q);
output(Q);
do{
printf("\n* -MENU -*\n"); printf("\n0 Thoat");
printf("\n1 Xoa phan tu dau khoi hang doi");
printf("\n2 Them phan tu vao cuoi hang doi");
printf("\n3 Tim kiem phan tu voi ma msp k:");
printf("\n4 Tim kiem phan tu voi co luong sp >10"); printf("\n5 Hien sp co don gia MAX");
printf("\n6 Hien sp so luong gia MIN");
printf("\n7 Sap xep so luong giam dan theo so tiet"); printf("\n8 tinh tong ");
printf("\n9 Tinh TB so luong cua tat ca cac sp"); printf("\n Moi ban chon so: ");
scanf("%d",&chon);
switch(chon)
{
return 0;
Trang 11break;
case 1:
printf("xoa phan tu dau khoi hang doi:\n");
pop(Q);
output(Q);
break;
case 2:
float a, b;
printf("Moi ban nhap Ma san pham:");
scanf("%d",&x.mamp); fflush(stdin);
printf("Moi ban nhap ten san pham:");
gets(x.tenmp); fflush(stdin);
printf("Moi ban nhap so luong:");
scanf("%d",&x.soluong);
printf("Moi ban nhap don gia:");
scanf("%f",&a);
x.dongia = a;
b = x.soluong*x.dongia;
x.tongtien = b;
push(Q,x);
output(Q);
break;
case 3:
int k;
printf("Tim kiem( Moi ban nhap vao ma map k=): ");
Trang 12timkiem(Q,k);
break;
case 4:
printf("sp co luong >10 la:\n");
timkiem1(Q);
break;
case 5:
printf("Hien sp co so luong max la:\n");
timmax(Q);
break;
printf("Hien sp co so luong Min:\n");
timmin(Q);
break;
case 7:
printf("Sap xep giam dan theo so luong sp la:\n"); sapxep(Q);
output(Q);
break;
case 8:
tinhtong(Q);
break;
case 9:
trungbinh(Q);
Trang 13break;
default : printf("Ban chon sai!!!"); }
}while(chon!=0);
getch();
}