数据结构之基本队列-顺序结构实现-初始化-判断队列是否为空(front=rear)-出队-入队-队尾满了,调整队列-获取队头元素
数据结构之基本队列-顺序结构实现-初始化-判断队列是否为空(front=rear)-出队-入队-队尾满了,调整队列-获取队头元素——完整可运行代码
#include <stdio.h>
#define MAXSIZE 100
typedef int ElemType;
typedef struct
{
ElemType data[MAXSIZE];
int front;
int rear;
}Queue;
//初始化
void initQueue(Queue *Q)
{
Q->front = 0;
Q->rear = 0;
}
//判断队列是否为空
int isEmpty(Queue *Q)
{
if (Q->front == Q->rear)
{
printf("空的\n");
return 1;
}
else
{
return 0;
}
}
//出队
ElemType dequeue(Queue *Q)
{
if (Q->front == Q->rear)
{
printf("空的\n");
return 0;
}
ElemType e = Q->data[Q->front];
Q->front++;
return e;
}
//队尾满了,调整队列(挪位置)
int queueFull(Queue *Q)
{
if (Q->front > 0)//队尾满了,但是队列还有空间
{
int step = Q->front;
for (int i = Q->front; i <= Q->rear; ++i)
{
Q->data[i - step] = Q->data[i];
}
Q->front = 0;
Q->rear = Q->rear - step;
return 1;
}
else
{
printf("真的满了\n");
return 0;
}
}
//入队
int equeue(Queue *Q, ElemType e)
{
if (Q->rear >= MAXSIZE)
{
if(!queueFull(Q))
{
return 0;
}
}
Q->data[Q->rear] = e;
Q->rear++;
return 1;
}
//获取队头元素(数据)
int getHead(Queue *Q, ElemType *e)
{
if (Q->front == Q->rear)
{
printf("空的\n");
return 0;
}
*e = Q->data[Q->front];
return 1;
}
int main()
{
Queue q;
initQueue(&q);
equeue(&q, 10);
equeue(&q, 20);
equeue(&q, 30);
equeue(&q, 40);
equeue(&q, 50);//分别入队10,20,30,40,50
printf("%d\n",dequeue(&q));
printf("%d\n",dequeue(&q));//10,20出队列
ElemType e;
getHead(&q, &e);//获取此时队头的数据
printf("%d\n",e);
return 0;
}
动态分配内存:
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef int ElemType;
typedef struct
{
ElemType *data;
int front;
int rear;
}Queue;
//初始化
Queue* initQueue()
{
Queue *q = (Queue*)malloc(sizeof(Queue));
q->data = (ElemType*)malloc(sizeof(ElemType) * MAXSIZE);
q->front = 0;
q->rear = 0;
return q;
}
//判断队列是否为空
int isEmpty(Queue *Q)
{
if (Q->front == Q->rear)
{
printf("空的\n");
return 1;
}
else
{
return 0;
}
}
//出队
ElemType dequeue(Queue *Q)
{
if (Q->front == Q->rear)
{
printf("空的\n");
return 0;
}
ElemType e = Q->data[Q->front];
Q->front++;
return e;
}
//队尾满了,调整队列
int queueFull(Queue *Q)
{
if (Q->front > 0)
{
int step = Q->front;
for (int i = Q->front; i <= Q->rear; ++i)
{
Q->data[i - step] = Q->data[i];
}
Q->front = 0;
Q->rear = Q->rear - step;
return 1;
}
else
{
printf("真的满了\n");
return 0;
}
}
//入队
int equeue(Queue *Q, ElemType e)
{
if (Q->rear >= MAXSIZE)
{
if(!queueFull(Q))
{
return 0;
}
}
Q->data[Q->rear] = e;
Q->rear++;
return 1;
}
//获取队头元素
int getHead(Queue *Q, ElemType *e)
{
if (Q->front == Q->rear)
{
printf("空的\n");
return 0;
}
*e = Q->data[Q->front];
return 1;
}
int main()
{
Queue *q = initQueue();
equeue(q, 10);
equeue(q, 20);
equeue(q, 30);
equeue(q, 40);
equeue(q, 50);
printf("%d\n",dequeue(q));
printf("%d\n",dequeue(q));
ElemType e;
getHead(q, &e);
printf("%d\n",e);
return 0;
}