-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patha13f4.c
148 lines (115 loc) · 3.4 KB
/
a13f4.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
typedef struct {
char username[9];
char filename[13];
}QueueElementType; /*ï ôýðïò ôùí óôïé÷åßùí ôçò óõíäåäåìÝíçò ïõñÜò
åíäåéêôéêÜ ôýðïõ int*/
typedef struct QueueNode *QueuePointer;
typedef struct QueueNode
{
QueueElementType Data;
QueuePointer Next;
} QueueNode;
typedef struct
{
QueuePointer Front;
QueuePointer Rear;
} QueueType;
typedef enum {
FALSE, TRUE
} boolean;
void CreateQ(QueueType *Queue);
boolean EmptyQ(QueueType Queue);
void AddQ(QueueType *Queue, QueueElementType Item);
void RemoveQ(QueueType *Queue, QueueElementType *Item);
int main(){
QueueType Queue1, Queue2;
FILE *fp;
QueueElementType AnItem;
char c;
fp = fopen("i13f4.dat", "r");
if(fp == NULL){
printf("Error oppening file\n");
return -1;
}
CreateQ(&Queue1);
CreateQ(&Queue2);
while(!feof(fp)){
fscanf(fp, "%s", AnItem.username);
fscanf(fp, "%s", AnItem.filename);
if((strncmp("USER", AnItem.username, 4) == 0) || (strncmp("FORT", AnItem.username, 4) == 0)){
AddQ(&Queue1, AnItem);
}else{
AddQ(&Queue2, AnItem);
}
}
while(!EmptyQ(Queue2)){
RemoveQ(&Queue2, &AnItem);
printf("Printing the job of %s, %s\n", AnItem.username, AnItem.filename);
printf("Press any key to continue");
scanf("%c", &c);
}
while(!EmptyQ(Queue1)){
RemoveQ(&Queue1, &AnItem);
printf("Printing the job of %s, %s\n", AnItem.username, AnItem.filename);
printf("Press any key to continue.");
scanf("%c", &c);
}
printf("There are no jobs in the printing queue");
return 0;
}
void CreateQ(QueueType *Queue)
/* Ëåéôïõñãßá: Äçìéïõñãåß ìéá êåíÞ óõíäåäåìÝíç ïõñÜ.
ÅðéóôñÝöåé: Ìéá êåíÞ óõíäåäåìÝíç ïõñÜ
*/
{
Queue->Front = NULL;
Queue->Rear = NULL;
}
boolean EmptyQ(QueueType Queue)
/* ÄÝ÷åôáé: Ìéá óõíäåäåìÝíç ïõñÜ.
Ëåéôïõñãßá: ÅëÝã÷åé áí ç óõíäåäåìÝíç ïõñÜ åßíáé êåíÞ.
ÅðéóôñÝöåé: True áí ç ïõñÜ åßíáé êåíÞ, false äéáöïñåôéêÜ
*/
{
return (Queue.Front==NULL);
}
void AddQ(QueueType *Queue, QueueElementType Item)
/* ÄÝ÷åôáé: Ìéá óõíäåäåìÝíç ïõñÜ Queue êáé Ýíá óôïé÷åßï Item.
Ëåéôïõñãßá: ÐñïóèÝôåé ôï óôïé÷åßï Item óôï ôÝëïò ôçò óõíäåäåìÝíçò ïõñÜò Queue.
ÅðéóôñÝöåé: Ôçí ôñïðïðïéçìÝíç ïõñÜ
*/
{
QueuePointer TempPtr;
TempPtr= (QueuePointer)malloc(sizeof(struct QueueNode));
TempPtr->Data = Item;
TempPtr->Next = NULL;
if (Queue->Front==NULL)
Queue->Front=TempPtr;
else
Queue->Rear->Next = TempPtr;
Queue->Rear=TempPtr;
}
void RemoveQ(QueueType *Queue, QueueElementType *Item)
/* ÄÝ÷åôáé: Ìéá óõíäåäåìÝíç ïõñÜ.
Ëåéôïõñãßá: Áöáéñåß ôï óôïé÷åßï Item áðü ôçí êïñõöÞ ôçò óõíäåäåìÝíçò ïõñÜò,
áí äåí åßíáé êåíÞ.
ÅðéóôñÝöåé: Ôï óôïé÷åßï Item êáé ôçí ôñïðïðïéçìÝíç óõíäåäåìÝíç ïõñÜ.
¸îïäïò: ÌÞíõìá êåíÞò ïõñÜò, áí ç ïõñÜ åßíáé êåíÞ
*/
{
QueuePointer TempPtr;
if (EmptyQ(*Queue)) {
printf("EMPTY Queue\n");
}
else
{
TempPtr = Queue->Front;
*Item=TempPtr->Data;
Queue->Front = Queue->Front->Next;
free(TempPtr);
if (Queue->Front==NULL) Queue->Rear=NULL;
}
}