#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 10
typedef int data_t;
//构造顺序队列类型
typedef struct squeue{
data_t data[SIZE];//顺序队列
int front;//保存队头元素的下标
int rear;//保存队尾元素的下一个位置的下标
}squeue;
//创建顺序队列
squeue *createSqueue()
{
squeue *sq = (squeue *)malloc(sizeof(squeue));
if(NULL == sq)
return NULL;
memset(sq->data, 0, sizeof(sq->data));
sq->front = sq->rear = 0;//说明队列为空
return sq;
}
//判空
int squeue_is_empty(squeue *sq)
{
if(NULL == sq)
return -1;
else
return ((sq->front == sq->rear)?1:0);
}
//判满
int squeue_is_full(squeue *sq)
{
if(NULL == sq)
return -1;
if(sq->rear > sq->front)
return((sq->rear-sq->front == SIZE-1)?1:0);
if(sq->rear < sq->front)
return ((sq->front-sq->rear == 1)?1:0);
}
//求队列中元素个数
int getLengthSqueue(squeue *sq)
{
if(NULL == sq)
return -1;
int num = 0;
int temp = sq->front;
while(temp != sq->rear)
{
num++;
temp = (temp+1)%SIZE; //0 ~ SIZE-1
}
return num;
}
//入队
int enSqueue(squeue *sq, data_t data)
{
if(NULL == sq)
return -1;
//判满
if(squeue_is_full(sq))
return -1;
sq->data[sq->rear] = data;//在队尾添加元素 data
sq->rear = (sq->rear+1) % SIZE;//让rear变量指向队尾元素的下一个位置
return 0;
}
//出队
data_t deSqueue(squeue *sq)
{
if(NULL == sq)
return -1;
if(squeue_is_empty(sq))
return -1;
data_t data = sq->data[sq->front];//data变量保存队头元素
sq->front = (sq->front+1) % SIZE;
return data;
}
//打印队列中各个元素的值
void printSqueue(squeue *sq)
{
if(NULL == sq)
return ;
int temp = sq->front;
while(temp != sq->rear)
{
printf("%d ",sq->data[temp]);
temp = (temp+1)%SIZE;
}
printf("\n");
return ;
}
int main()
{
squeue *sq = createSqueue();
if(NULL == sq)
{
printf("malloc failed\n");
return -1;
}
int i = 0;
while(i<10)
{
enSqueue(sq, i+1);
i++;
}
printSqueue(sq);
i = 0;
while(i<5)
{
data_t data = deSqueue(sq);
printf("%d ",data);
i++;
}
printf("\n");
printSqueue(sq);
return 0;
}
数据结构--7顺序队列程序
最新推荐文章于 2024-09-14 17:04:08 发布