#include<stdio.h>
#include<stdlib.h>
using namespace std;
#define maxSize 100
/*
顺序队中,通常让
队尾指针rear指向刚进队的元素位置
队首指针front指向刚出队的元素位置
由于普通的队会发生“假溢出”,所以此代码是以“循环队列”来写的
*/
//顺序队列结构体定义
typedef struct
{
int data[maxSize];
int rear;
int front;
}SqQueue;
//初始化顺序队列
void initSqQueue(SqQueue &squ)
{
squ.rear=squ.front=0;
}
//判断队空
int isQueueEmpty(SqQueue squ)
{
if(squ.front==squ.rear) //首位指针在一起,顺序队列就为空
return 1;
else
return 0;
}
//元素进队
void enQueue(SqQueue &squ,int x)
{
if((squ.rear+1)%maxSize==squ.front)
printf("队列已满");
else
squ.rear=(squ.rear+1)%maxSize;
squ.data[squ.rear]=x;
}
//元素出队
int deQueue(SqQueue &squ)
{
if(squ.rear==squ.front) //判断队列是否为空
return 0;
else
squ.front=(squ.front+1)%maxSize;
return squ.data[squ.front];
}
//打印队中元素
void outputSqQueue(SqQueue sque)
{
printf("队列中的元素为:\t");
while(sque.front<sque.rear)
{
printf("%d\t",sque.data[(sque.front+1)%maxSize]);
sque.front=(sque.front+1)%maxSize;
}
}
int main()
{
SqQueue sque;
initSqQueue(sque);
//让四个元素进队
int a[4]={1,2,3,4};
for(int i=0;i<4;i++)
{
enQueue(sque,a[i]);
}
//打印出队列中的元素
outputSqQueue(sque);
//去除一个队列元素
printf("\n");
printf("去除一个队列元素,其值为:%d\t",deQueue(sque)) ;
outputSqQueue(sque);
printf("\n");
printf("去除一个队列元素,其值为:%d\t",deQueue(sque)) ;
outputSqQueue(sque);
return 0;
}
C语言实现数据结构代码(二)-栈和队列-队列-循环队列的基本操作
最新推荐文章于 2023-04-12 21:55:21 发布