您的位置:首页 > 理论基础 > 数据结构算法

数据结构循环队列的基本操作(C语言)

2017-10-10 22:33 741 查看
#include
#include
//顺序循环队列的基本操作
#define MaxSize 5
#define Len sizeof(SqQueue)
/*
循环队列的核心算法:
1.判断队列是否未满(Queue->rear+1)%MaxSize==Queue->front
2.判队列是否为空 Queue->rear==Queue->front
3.计算队列的长度 (rear->front+QueueSize)%MaxSizes

*/
typedef struct
{
int data[MaxSize];
int front;
int rear;
}SqQueue;
SqQueue *Queue;
int length = 0;
SqQueue* IntQueue()//创建队列并且初始化
{
Queue = (SqQueue *)malloc(Len);
Queue->front = 0;
Queue->rear = 0;
return Queue;
}
SqQueue* Enqueue(SqQueue* Queue, int data)//将元素插入到队中
{
if ((Queue->rear + 1) % MaxSize == Queue->front)//判断队列是否满了
{
printf("队满了!");
exit(0);
}
Queue->data[Queue->rear] = data;//将数据放入队尾
Queue->rear = (Queue->rear + 1)%MaxSize;//尾部向后移动1
return Queue;
}
SqQueue* Dequeue(SqQueue* Queue)//若队列不为空,则删除队头元素
{
if (Queue->front == Queue->rear)//判断队列是否为空
{
printf("队列为空!");
exit(0);
}
Queue->front = (Queue->front + 1) % MaxSize;//队头向后移动1
return Queue;
}
void Print(SqQueue* Queue)//显示数队列的全部元素
{
int n = Queue->front;
while (n != Queue->rear)//队不为空
{
printf("%d ", Queue->data
);
n= (n + 1) % MaxSize;
}

}
void  ClearQueue(SqQueue *Queue)//清空队列中的所有元素
{
Queue->front = Queue->rear = 0;//清空队列中的所有元素
}
int QueueLength(SqQueue* Queue)//求队列的长度
{
int n = Queue->front;
int length = 0;
while (n != Queue->rear)
{
length++;
}
return length;
}
int GetHead(SqQueue* Queue)//返回队列的队首元素
{
int data;
data = Queue->data[Queue->front];
return data;
}
int main()
{
IntQueue();
for (int i = 1; i < 5; i++)
{
Enqueue(Queue, i);
}
printf("删除前:\n");
Print(Queue);
Dequeue(Queue);
printf("删除后:\n");
Print(Queue);
printf("\n");
printf("获取的队首元素是:%d",GetHead(Queue));
system("pause");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: