#include <stdio.h>
#include <stdlib.h>
#define MAX_QUEUE_SIZE 100
typedef int element;
typedef struct {
element queue[MAX_QUEUE_SIZE];
int front;
int rear;
}queryType;
void error(char *message){
fprintf(stderr,"%s\n", message);
exit(1);
}
void init(queryType *q)
{
q->front = q->rear = 0;
}
int isEmpty(queryType *q)
{
return (q->front == q->rear);
}
int isFull(queryType *q)
{
return ( (q->rear+1) % (MAX_QUEUE_SIZE) == q->front);
//checking if front is ascended rear = means rear arrived to unused queue cell, full
}
void enqueue(queryType *q ,element item)
{
if(isFull(q))
{
error("Queue is full\n");
}
q->rear = (q->rear+1) % MAX_QUEUE_SIZE;//simply it means next cell
q->queue[q->rear] = item;
}
element dequeue(queryType *q)
{
if(isEmpty(q))//get into the block if the result is true
{
error("Queue is empty\n");
}
q->front = (q->front+1) % MAX_QUEUE_SIZE;//means move front index to next cell in circular queue
return q->queue[q->front];//?????????????????
}
element peek(queryType *q)
{
if(isEmpty(q))
{
error("Queue is empty\n");
}
return q->queue[(q->front+1) % MAX_QUEUE_SIZE];//?????????????????
}
void main()
{
queryType q1;
init(&q1);
printf("front = %d, rear = %d\n", q1.front, q1.rear);
enqueue(&q1,1);
enqueue(&q1,2);
enqueue(&q1,3);
printf("dequeue() = %d\n", dequeue(&q1));
printf("dequeue() = %d\n", dequeue(&q1));
printf("dequeue() = %d\n", dequeue(&q1));
printf("front = %d, rear = %d\n", q1.front, q1.rear);
}
#include <stdlib.h>
#define MAX_QUEUE_SIZE 100
typedef int element;
typedef struct {
element queue[MAX_QUEUE_SIZE];
int front;
int rear;
}queryType;
void error(char *message){
fprintf(stderr,"%s\n", message);
exit(1);
}
void init(queryType *q)
{
q->front = q->rear = 0;
}
int isEmpty(queryType *q)
{
return (q->front == q->rear);
}
int isFull(queryType *q)
{
return ( (q->rear+1) % (MAX_QUEUE_SIZE) == q->front);
//checking if front is ascended rear = means rear arrived to unused queue cell, full
}
void enqueue(queryType *q ,element item)
{
if(isFull(q))
{
error("Queue is full\n");
}
q->rear = (q->rear+1) % MAX_QUEUE_SIZE;//simply it means next cell
q->queue[q->rear] = item;
}
element dequeue(queryType *q)
{
if(isEmpty(q))//get into the block if the result is true
{
error("Queue is empty\n");
}
q->front = (q->front+1) % MAX_QUEUE_SIZE;//means move front index to next cell in circular queue
return q->queue[q->front];//?????????????????
}
element peek(queryType *q)
{
if(isEmpty(q))
{
error("Queue is empty\n");
}
return q->queue[(q->front+1) % MAX_QUEUE_SIZE];//?????????????????
}
void main()
{
queryType q1;
init(&q1);
printf("front = %d, rear = %d\n", q1.front, q1.rear);
enqueue(&q1,1);
enqueue(&q1,2);
enqueue(&q1,3);
printf("dequeue() = %d\n", dequeue(&q1));
printf("dequeue() = %d\n", dequeue(&q1));
printf("dequeue() = %d\n", dequeue(&q1));
printf("front = %d, rear = %d\n", q1.front, q1.rear);
}
댓글
댓글 쓰기