Queue.h
#ifndef __CIRCULAR_QUEUE_H__
#define __CIRCULAR_QUEUE_H__
#define TRUE 1
#define FALSE 0
typedef int Data;
typedef struct _node
{
Data data;
struct _node *next;
} Node;
typedef struct _lQueue
{
Node *front;
Node *rear;
} LQueue;
typedef LQueue Queue;
void QueueInit(Queue *pq);
int QIsEmpty(Queue *pq);
void EnQueue(Queue *pq, Data data);
Data DeQueue(Queue *pq);
Data QPeek(Queue *pq);
#endif
Queue.c
#include <stdlib.h>
#include <stdio.h>
#include "Queue.h"
void QueueInit(Queue *pq)
{
pq->front = NULL;
pq->rear = NULL;
}
int QIsEmpty(Queue *pq)
{
if (pq->front == NULL)
return TRUE;
return FALSE;
}
void EnQueue(Queue *pq, Data data)
{
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
if (QIsEmpty(pq))
{
pq->front = newNode;
pq->rear = newNode;
}
else
{
pq->rear->next = newNode;
pq->rear = newNode;
}
}
Data DeQueue(Queue *pq)
{
Node *dNode = pq->front;
int dData = pq->front->data;
if (QIsEmpty(pq))
exit (1);
pq->front = pq->front->next;
free(dNode);
return dData;
}
Data QPeek(Queue *pq)
{
if (QIsEmpty(pq))
exit (1);
return pq->front->data;
}
Queue.h
#ifndef __CIRCULAR_QUEUE_H__
#define __CIRCULAR_QUEUE_H__
#define TRUE 1
#define FALSE 0
#define QUE_LEN 100
typedef int Data;
class Node
{
private:
int data;
Node *next;
public:
int GetData()
{
return data;
}
void SetData(int _data)
{
data = _data;
}
void SetNextNode(Node *_Node)
{
next = _Node;
}
Node* GetNextNode()
{
return next;
}
};
class Queue
{
private:
Node *front;
Node *rear;
public:
void QueueInit();
int QIsEmpty();
void EnQueue(Data data);
Data DeQueue();
Data QPeek();
};
#endif
Queue.cpp
#include "Queue.h"
#include <iostream>
void Queue::QueueInit()
{
front = NULL;
rear = NULL;
}
int Queue::QIsEmpty()
{
if (front == NULL)
return 1;
return 0;
}
void Queue::EnQueue(Data data)
{
Node *newNode = new Node;
newNode->SetData(data);
newNode->SetNextNode(NULL);
if (QIsEmpty())
{
front = newNode;
rear = newNode;
}
else
{
rear->SetNextNode(newNode);
rear = newNode;
}
}
Data Queue::DeQueue()
{
Node *dNode = front;
int dData = front->GetData();
if (QIsEmpty())
{
std::cout << "no data" << std::endl;
exit(1);
}
else
{
front = front->GetNextNode();
free(dNode);
}
return dData;
}
Data Queue::QPeek()
{
if (QIsEmpty())
exit(1);
return front->GetData();
}