input.txt
viec1--6
viec2--5
viec3--8
viec4--6
viec5--5
viec6--4
viec7--5
viec8--4
viec9--5
viec10--8
viec11--6
queue.c
#include<stdio.h>
#include<stdlib.h>
#include"queue.h"
int khoitao(queue *q)
{
q->back=q->front=NULL;
return(0);
}
int rong(queue q)
{
return(q.front==NULL&&q.back==NULL);
}
int enqueue(queue *q,node *a,int*zxc)
{
if(q->front==NULL)
{
q->front=q->back=a;
}
else
{
q->back->next=a;
q->back=a;
}
*zxc+=1;
return(0);
}
int dequeue(queue *q,int*zxc)
{
if(q->front==NULL)
return 4;
node*tmp;
tmp=q->front;
q->front=q->front->next;
if(q->front==NULL)
q->back=NULL;
*zxc-=1;
free(tmp);
return 0;
}
int show(queue q)
{
node *tmp;
int x=1;
tmp=q.front;
while(tmp!=NULL)
{
printf("%d: %s--%d\n",x,tmp->data.ten,tmp->data.bonus);
tmp=tmp->next;
x++;
}
return(0);
}
queue.h
#include<stdio.h>
#include<stdlib.h>
typedef struct queue_data
{
char ten[30];
int bonus,dem;
} data_type;
typedef struct queue_element
{
data_type data;
struct queue_element *next;
} node;
typedef struct queue
{
struct queue_element *front;
struct queue_element *back;
} queue;
int khoitao(queue *q);
int rong(queue q);
int enqueue(queue *q,node *a,int*zxc);
int dequeue(queue *q,int*zxc);
int show(queue q);
main.c
#include <stdio.h>
#include <stdlib.h>
#include"queue.h"
queue q;
FILE *in=NULL;
FILE *out=NULL;;
int zxc=0;
int xep(queue q)
{
node*tmp,*y,*z,*tem;
int x=1;
tmp=q.front;
tem=(node*)malloc(sizeof(node));
while(tmp!=NULL)
{
tmp->data.dem=x-tmp->data.bonus;
tmp=tmp->next;
x++;
}
for(tmp=q.front;tmp!=NULL;tmp=tmp->next)
{
x=tmp->data.dem;
for(y=tmp;y!=NULL;y=y->next)
if(x>y->data.dem)
{
x=y->data.dem;
z=y;
}
tem->data=tmp->data;
tmp->data=z->data;
z->data=tem->data;
}
free(tem);
return 0;
}
int doc(queue *q)
{
node *tmp;
do
{
if((tmp=(node*)malloc(sizeof(node)))==NULL)
{
printf("Khong khoi tao duoc\n");
return 2 ;
}
tmp->next=NULL;
if(fscanf(in,"%[^-]--%d\n",&tmp->data.ten,&tmp->data.bonus)!=EOF)
{
if(zxc>=10)
{
xep(*q);
printf("Viec phai lam ngay: %s\n",q->front->data.ten);
dequeue(q,&zxc);
}
enqueue(q,tmp,&zxc);
printf("%d\n",zxc);
}
else break;
}while(1);
free(tmp);
return 0;
}
int them(queue *q)
{
node *tmp;
if((tmp=(node*)malloc(sizeof(node)))==NULL)
{
printf("Khong khoi tao duoc\n");
return 2;
}
tmp->next=NULL;
printf("Nhap ten -- muc uu tien:\n");
scanf("%s%*c%d",tmp->data.ten,&tmp->data.bonus);
printf("%d\n",zxc);
if(zxc>=10)
{
xep(*q);
printf("Viec phai lam ngay: %s\n",q->front->data.ten);
dequeue(q,&zxc);
}
enqueue(q,tmp,&zxc);
}
int luu(queue q)
{
node *tmp;
tmp=q.front;
while(tmp!=NULL)
{
fprintf(out,"%s--%d\n",tmp->data.ten,tmp->data.bonus);
tmp=tmp->next;
}
return(0);
}
int main()
{
int dk=1,g;
if((in=fopen("input.txt","r+"))==NULL)
{
printf("Khong doc duoc file\n");
return 1;
}
out=fopen("output.txt","w");
khoitao(&q);
doc(&q);
while(dk)
{
printf("\n\n--------------------------\n");
printf("chuong trinh sap xep cong viec\n");
printf("1.hien danh sach\n");
printf("2.them viec\n");
printf("3.sap xep\n");
printf("4.Thoat\n");
printf("--------------------------\n");
printf("Nhap lua chon:");
scanf("%d",&g);
switch(g)
{
case 1: show(q); break;
case 2: them(&q);break;
case 3: xep(q);break;
case 4: dk=0;luu(q);
}
}
return 0;
}