Bài tập thực hành này nhằm giúp các bạn ôn lại các kiến thức trong bài “Cài đặt hàng đợi queue bằng danh sách liên kết”. Tất cả các hàm hay các nội dung trong bài này đòi hỏi bạn đọc phải đã có sẵn kiến thức về cách cài đặt hàng queue bằng danh sách liên kết. Vì vậy nếu bạn chưa từng đọc qua về cách cài đặt queue bằng danh sách liên kết xin vui lòng đọc lại trước khi trở lại bài này!

1.Yêu cầu đề bài quản lý máy tính bằng hàng đợi queue

Trên ngôn ngữ C/C++, viết chương trình thực hiện yêu cầu sau: Khai báo cấu trúc date gồm các thông tin: ngày, tháng, năm.

struct date
{
    int ngay, thang, nam;
};

Khai báo cấu trúc máy tính cần bốc xếp trên băng chuyền bao gồm các thông tin: Mã máy, tên máy, ngày xuất hàng, giá xuất hàng đi (đơn vị triệu đồng):

struct Maytinh
{
    char ID[6];
    char ten[256];
    date ngay_xuat;
    float gia_xuat;
};

1.Viết các hàm nhập vào từ bàn phím giá trị của một biến cấu trúc máy tính, hiển thị lên màn hình.

2.Nhập vào 1 số nguyên dương n, sử dụng cấu trúc dữ liệu hàng đợi (queue) nhập vào băng chuyền gồm n máy tính cần bốc xếp.

3.Hiển thị lên màn hình thông tin tất cả các máy tính trong hàng đợi có mã hàng hóa (trường ID) là “007”.

4.Hiển thị lên màn hình thông tin máy tính đã bốc xếp (hiện tại băng chuyền đã rỗng).

2.Xứ lý yêu cầu đề bài bằng queue cài đặt bằng danh sách liên kết

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct date
{
    int ngay, thang, nam;
};

struct Maytinh
{
    char ID[6];
    char ten[256];
    date ngay_xuat;
    float gia_xuat;
};
typedef struct Maytinh MT;

struct node{
    MT data;
    node *next;
};
typedef struct node NODE;

struct queue{
    NODE *front;
    NODE *rear;
};
typedef struct queue QUEUE;

void Init(QUEUE &q){
    q.front = NULL;
    q.rear = NULL;
}

NODE* CreateNode (MT x) {
    NODE *p;
    p = new NODE;
    if (p==NULL) {
        printf ("KHONG DU BO NHO!");
        return NULL;
    }
    p->data=x;
    p->next=NULL;
    return p;
}

int IsEmpty(QUEUE q){
    if (q.front == NULL){
        return 1;
    }
    return 0;
}

void Add (QUEUE &q, NODE *NewNode){
    if(q.front == NULL){
        q.front = NewNode;
        q.rear = NewNode;
    }
    else{
        q.rear->next = NewNode;
        q.rear = NewNode;
    }
}

MT Remove(QUEUE &q){
    MT x;
    NODE *p = NULL;
    if (!IsEmpty(q)){
        p = q.front;
        x = p->data;
        q.front = q.front->next;
        delete p;
        if (q.front==NULL){
            q.rear = NULL;
        }
    }
    return x;
}

void Input(QUEUE &q, int n){
    for(int i = 0; i< n; i++){
        MT x;
        printf("NHAP ID: ");
        fflush(stdin);
        gets(x.ID);
        printf("NHAP TEN: ");
        fflush(stdin);
        gets(x.ten);
        printf("NHAP NGAY XUAT:");
        printf("\nNGAY: ");
        scanf("%d",&x.ngay_xuat.ngay);
        printf("THANG: ");
        scanf("%d",&x.ngay_xuat.thang);
        printf("NAM: ");
        scanf("%d",&x.ngay_xuat.nam);
        printf("NHAP GIA: ");
        scanf("%f",&x.gia_xuat);
        printf("\n \n");
        NODE *p;
        p = CreateNode(x);
        Add(q,p);
    }
}

void Output(QUEUE q){
    for(NODE *p = q.front; p!= NULL; p=p->next){
        printf("%s\t %s\t %d/%d/%d %f\n", p->data.ID, p->data.ten,p->data.ngay_xuat.ngay,p->data.ngay_xuat.thang, p->data.ngay_xuat.nam, p->data.gia_xuat);
    }
}

void Ma001(QUEUE q){
    for(NODE *p = q.front; p!= NULL; p=p->next){
        if(strcmp(p->data.ID,"007") == 0){
            printf("%s\t %s\t %d/%d/%d %f\n", p->data.ID, p->data.ten,p->data.ngay_xuat.ngay,p->data.ngay_xuat.thang, p->data.ngay_xuat.nam, p->data.gia_xuat);
        }
    }
}

void MayTinhBocXep(QUEUE &q){
    for(NODE *p = q.front; p!= NULL; p=p->next){
        MT x = Remove(q);
        printf("%s\t %s\t %d/%d/%d %f\n", x.ID, x.ten,x.ngay_xuat.ngay,x.ngay_xuat.thang, x.ngay_xuat.nam, x.gia_xuat);
    }
}
int main(){
    QUEUE q;
    Init(q);
    int n;
    printf("NHAP SO LUONG MAY TINH: ");
    scanf("%d", &n);
    Input(q,n);
    printf("THONG TIN MAY TINH TRONG HANG DOI\n");
    Output(q); 
    printf("\nTHONG TIN MAY TINH CO MA 007\n");
    Ma001(q);
    printf("\nTHONG TIN MAY TINH DA BOC XEP\n");
    MayTinhBocXep(q);
    printf("\nTHONG TIN MAY TINH HANG DOI SAU KHI BOC XEP (BANG TRUYEN RONG)\n");
    Output(q);
}