队列的实现
typedef int SDATA;
typedef struct Queue
{
struct Queue* next;
SDATA data;
}Qnode;
typedef struct Chmpas
{
Qnode* front;
Qnode* rear;
}queue;
void InitQueue(queue* pt);
void PushQueue(queue* pt, SDATA x);
void PopQueue(queue* pt);
SDATA FrontData(queue* pt);
SDATA RearData(queue* pt);
void DestroyQueue(queue* pt);
int QueueSize(queue* pt);
void InitQueue(queue* pt)
{
assert(pt);
pt->front = pt->rear = NULL;
}
void PushQueue(queue* pt, SDATA x)
{
assert(pt);
Qnode* newnode = (Qnode*)malloc(sizeof(Qnode));
if(newnode == NULL)
{
printf("malloc fail\n");
return;
}
newnode->data = x;
newnode->next = NULL;
if (pt->front == NULL)
{
pt->front = pt->rear = newnode;
}
else
{
pt->rear->next = newnode;
Qnode* tp = pt->rear->next;
pt->rear = tp;
}
}
void PopQueue(queue* pt)
{
assert(pt);
if (pt->front->next == NULL)
{
free(pt->front);
pt->front = pt->rear = NULL;
}
Qnode* next = pt->front->next;
free(pt->front);
pt->front = next;
}
SDATA FrontData(queue* pt)
{
assert(pt);
assert(pt->front);
return pt->front->data;
}
SDATA RearData(queue* pt)
{
assert(pt);
assert(pt->rear);
return pt->rear->data;
}
void DestroyQueue(queue* pt)
{
assert(pt);
Qnode* cur = pt->front->next;
while (cur)
{
Qnode* next = cur->next;
free(cur);
cur = next;
}
pt->front = pt->rear = NULL;
}
int QueueSize(queue* pt)
{
assert(pt);
int count = 0;
Qnode* cur = pt->front;
while (cur)
{
cur = cur->next;
cur++;
}
return count;
}
bool QueueEmpty(queue* pt)
{
assert(pt);
return pt->front == NULL;
}