顺序对列的数据处理方式就像独木桥,具有先进先出,后进后出的特点。
顺序对列的序列结构:
#include<stdio.h>
#include<malloc.h>
#define Maxsize 20
typedef struct {
int data[Maxsize];
int front, rear;
}SqQueue;
其中,front表示队首,进行出队操作;rear表示队尾,进行入队操作。
初始化顺序队列:令其front和rear均为-1
void InitSqQueue(SqQueue*& Q)
{
Q = (SqQueue*)malloc(sizeof(SqQueue));
Q->front = Q->rear = -1;
}
销毁顺序队列:free()
void DestroySqQueue(SqQueue*& Q)
{
free(Q);
}
判断顺序队列是否为空:
bool EmptySqQueue(SqQueue* Q)
{
return Q->front == Q->rear;
}
在队尾插入元素(若队满则返回假):
bool PushSqQueue(SqQueue*& Q, int a)
{
if (Q->rear == Maxsize-1)
return false;
else
{
Q->rear++;
Q->data[Q->rear] = a;
}
}
在队首删除元素(若队空则返回假):
bool PullSqQueue(SqQueue*& Q, int& a)
{
if (Q->front == Q->rear)
return false;
else
{
a = Q->data[Q->front + 1];
Q->front++;
return true;
}
}
输出顺序队列元素:
void DispSqQueue(SqQueue* Q)
{
if (EmptySqQueue(Q))
printf("空的\n");
else
{
for (int i = Q->front+1; i < Q->rear + 1; i++)
{
printf("%d ", Q->data[i]);
}
printf("\n");
}
}
最后在main()函数上实现
int main()
{
SqQueue* Q;
InitSqQueue(Q);
if (EmptySqQueue)
printf("栈为空\n");
else
printf("栈不为空\n");
printf("\n开始进栈\n");
for (int i = 0; i < 8; i++)
{
printf("元素%d进栈:",i);
PushSqQueue(Q, i);
DispSqQueue(Q);
}
printf("\n开始出栈\n");
for (int i = 0; i < 4; i++)
{
int value = 0;
PullSqQueue(Q, value);
printf("元素%d出栈:", value);
DispSqQueue(Q);
}
DestroySqQueue(Q);
}