数组队列
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 10
typedef struct
{
int data[MaxSize];
int rear, front;
int size;
}SqQueue;
void InitSqQueue(SqQueue &sqQueue)
{
sqQueue.rear = sqQueue.front = 0;
sqQueue.size = 0;
}
bool SqQueueIsEmpty(SqQueue SqQueue)
{
if (SqQueue.rear == SqQueue.front && SqQueue.size == 0)
{
return true;
}
return false;
}
bool SqQueueIsMax(SqQueue SqQueue)
{
if (SqQueue.rear == SqQueue.front && SqQueue.size == MaxSize)
{
return true;
}
return false;
}
bool EnQueue(SqQueue &SqQueue,int ele)
{
if (SqQueueIsMax(SqQueue))
{
return false;
}
SqQueue.data[SqQueue.rear++] = ele;
SqQueue.size++;
SqQueue.rear %= MaxSize;
return true;
}
bool DeQueue(SqQueue &SqQueue, int &ele)
{
if (SqQueueIsEmpty(SqQueue))
{
return false;
}
ele = SqQueue.data[SqQueue.front++];
SqQueue.size--;
SqQueue.front %= MaxSize;
return true;
}
void printQueue(SqQueue s)
{
while (s.size-->0)
{
printf("%d\t",s.data[s.front++]);
s.front %= MaxSize;
}
printf("\n");
}
int QueueSize(SqQueue SqQueue)
{
return (SqQueue.rear + MaxSize - SqQueue.front) % MaxSize;
}
int main()
{
SqQueue sqQueue;
InitSqQueue(sqQueue);
for (int i = 0; i < 20; i++)
{
EnQueue(sqQueue,i+1);
}
EnQueue(sqQueue, 10);
printQueue(sqQueue);
int a = 0;
DeQueue(sqQueue,a);
printQueue(sqQueue);
printf("size:%d", QueueSize(sqQueue));
}
链表队列
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 10
typedef struct
{
int data;
LinkNode *next;
} LinkNode;
typedef struct
{
LinkNode *rear, *front;
} LinkQueue;
bool InitLinkQueue(LinkQueue &Q)
{
Q.front = Q.rear = (LinkNode*)malloc(sizeof(LinkNode));
Q.front->next = NULL;
return true;
}
bool IsEmpty(LinkQueue Q)
{
if (Q.front==Q.rear)
{
return true;
}
return false;
}
bool EnQueue(LinkQueue &Q,int ele)
{
LinkNode *s =(LinkNode*) malloc(sizeof(LinkNode));
s->next = NULL;
Q.rear->next = s;
Q.rear = s;
return true;
}
bool DeQueue(LinkQueue &Q, int &ele)
{
if (IsEmpty(Q))
{
return false;
}
LinkNode *p = Q.front->next;
ele =p->data;
Q.front->next = p->next;
if (p==Q.rear)
{
Q.rear = Q.front;
}
free(p);
return false;
}