#include <iostream>
#include <stdlib.h>
using namespace std;
typedef int dataType;
typedef struct Node{
int front; //指向队列头部元素
int rear; //指向队列尾部元素的前一个地址
int count; //记录顺序队列中的元素个数
dataType *data;
int mLength; //当前内存中申请的元素个数
}CSQueue;
typedef CSQueue *pCSQueue;
//初始化顺序队列
pCSQueue InitCSQueue()
{
pCSQueue pcsq=(CSQueue*)malloc(sizeof(CSQueue)); //申请一个顺序表结构内存
pcsq->data=(dataType*)malloc(sizeof(dataType)*5); //申请数据数组内存
pcsq->mLength=5;
pcsq->front=pcsq->rear=-1;
pcsq->count=0;
return pcsq;
}
//入队
void EnCSQueue(pCSQueue pcsq,dataType value)
{
if (pcsq->count==pcsq->mLength) //如果队列已满,则重新再为数组申请更多内存
{
dataType *newBase=(dataType*)realloc(pcsq->data,sizeof(dataType)*(pcsq->mLength+10));
pcsq->data=newBase;
pcsq->mLength+=10;
}
pcsq->count+=1;
pcsq->rear=(pcsq->rear+1)%pcsq->mLength; //考虑队列伪满,循环意义下将尾指针加1
pcsq->data[pcsq->rear]=value;
}
//自动创建一个顺序队列
pCSQueue CreateCSQueue()
{
pCSQueue pcsq=InitCSQueue();
int i=1,num=9;
while (i<=9)
{
cout<<i<<" ";
EnCSQueue(pcsq,i);
i++;
}
cout<<endl;
return pcsq;
}
//出队
void DeCSQueue(pCSQueue pcsq)
{
if (pcsq->count==0) //考虑队列已空
{
cout<<"Empty"<<endl;
}
pcsq->front=(pcsq->front+1)%pcsq->mLength; //考虑队列维空
cout<<pcsq->data[pcsq->front]<<endl;
pcsq->count-=1;
}
//全部出列
void AllDeCSQueue(pCSQueue pcsq)
{
if (pcsq->count==0)
{
cout<<"Empty"<<endl;
}
while (pcsq->count)
{
DeCSQueue(pcsq);
}
}
//释放队列内存
void FreeCSQueue(pCSQueue pcsq)
{
free(pcsq->data);
free(pcsq);
}
void main()
{
pCSQueue pcsq=CreateCSQueue();
AllDeCSQueue(pcsq);
FreeCSQueue(pcsq);
system("pause");
}
循环顺序队列的基本操作
最新推荐文章于 2024-08-14 21:43:03 发布