#include
#include
#include
typedef int QElmeType;
#define MAX_QSIZE 5 //最大队列长度
struct SqQueue
{
QElmeType *base; //初始化的动态分配存储空间
int front; //头指针,若队列不空,指向队列头元素
int rear; //尾指针,若队列不空,指向队列尾元素
};
void InitQueue(SqQueue &Q)
{//构造一个空队列Q
Q.base=(QElmeType *)malloc(MAX_QSIZE*sizeof(QElmeType));
if(!Q.base) //存储分配失败
exit(EXIT_FAILURE);
Q.front=Q.rear=0;
}
void DestroyQueue(SqQueue &Q)
{//销毁队列Q,Q不再存在
if(Q.base)
free(Q.base);
Q.base=NULL;
Q.front=Q.rear=0;
}
void ClearQueue(SqQueue &Q)
{//将Q清空为空队列
Q.front=Q.rear=0;
}
bool QueueEmpty(SqQueue Q)
{//若队列Q为空队列,则返回TRUE;否则返回FALSE
if(Q.front==Q.rear)//队列空的标志
return TRUE;
else
return FALSE;
}
int QueueLength(SqQueue Q)
{//返回Q的元素个数,即队列的长度
return(Q.rear-Q.front+MAX_QSIZE)%MAX_QSIZE;
}
bool GetHead(SqQueue Q,QElmeType &e)
{//若队列不空,则用e返回Q的队头元素,并返回OK;否则返回ERROR
if(Q.front==Q.rear)//队列空
return ERROR;
e=Q.base[Q.front];
return TRUE;
}
bool EnQueue(SqQueue &Q,QElmeType e)
{//插入元素e为Q的新的队尾元素
if((Q.rear+1)%MAX_QSIZE==Q.front)//队列满
return ERROR;
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%MAX_QSIZE;
return TRUE;
}
bool DeQueue(SqQueue &Q,QElmeType &e)
{//若队列不空,则删除Q的队头元素,用e返回其值,并返回OK;否则返回ERROR
if(Q.front==Q.rear)//队列空
return ERROR;
e=Q.base[Q.front];
Q.front=(Q.front+1)%MAX_QSIZE;
return TRUE;
}
void QueueTraverse(SqQueue Q,void(*vi)(QElmeType))
{//从队头到队尾依次对队列Q中每个元素调用函数vi()v
int i;
i=Q.front;
while(i!=Q.rear)
{
vi(Q.base[i]);
i=(i+1)%MAX_QSIZE;
}
printf("\n");
}
void print(QElmeType i)
{
printf("%d",i);
}
void main()
{
bool j;
int d,i=0,l;
SqQueue Q;
InitQueue(Q);
printf("初始化队列后,队列空否?%u(1:空 0:否)\n",QueueEmpty(Q));
printf("请输入整型队列元素(不超过%d个),-1为提前结束符:",MAX_QSIZE-1);
do
{
scanf("%d",&d);
if(d==-1)
break;
i++;
EnQueue(Q,d);
}
while(i
printf("现在队列空否?%u(1:空 0:否)\n",QueueEmpty(Q));
printf("连续%d次由队头删除元素,队尾插入元素:",MAX_QSIZE);
for(l=1;l<=MAX_QSIZE;l++)
{
DeQueue(Q,d);
printf("删除的元素是%d,请输入待插入的元素:",d);
scanf("%d",&d);
EnQueue(Q,d);
}
l=QueueLength(Q);
printf("现在队列中的元素为\n");
QueueTraverse(Q,print);
printf("共向队尾插入了%d个元素\n",i+MAX_QSIZE);
if(l-2>0)
printf("现在由队头删除%d个元素:\n",l-2);
while(QueueLength(Q)>2)
{
DeQueue(Q,d);
printf("删除的元素值为%d\n",d);
}
j=GetHead(Q,d);
if(j)
printf("现在队头元素为%d\n",d);
ClearQueue(Q);
printf("清空队列后,队列空否?%u(1:空 0:否)\n",QueueEmpty(Q));
DestroyQueue(Q);
}
错误太多,不细说,自己看
初略看了一下
QElemType 没有定义 自己看一下是要搞什么,虽然你在上面定义了一个int的模板,但是没有赋值
sizeof(QElemType)中找不懂QElemType,所以没有值;
接下来有个‘)’的错误,你把上面的那个错误解决了就不会出现了
然后是exit这个方法没有,貌似你少加了额一个类库,自己去网上查一下是什么,弄进去OK
接下来是OVERFLOW没有定义,我还真的没有发现这个东西,也不知道这个是用来干什么的,不懂你的想法,自己解决吧,反正就是没有定义。感觉上是一个#define OVERFLOW xx 上面没有。
接下来是free,果断的,你少加了一个类库。。。好吧,我发现了,是#include
什么现象?