循环队列(完整可运行代码)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1)顺序循环队列类型定义为:
#define N 20typedef struct
{ int data[N];
int front, rear;
}queue_type;
2)编写循环队列出队函数dequeue
3)编写循环队列入队函数enqueue
4)编写函数:void aa(queue_type *q);
调用出对函数把队列q中的元素一一出对列,如果是负数直接抛弃;如果是正数,则调用入队函数,插入到q的队尾。5)编写main函数,首先建立一个队列,其中的数据元素为:{2, 3, -4, 6, -5, 8, -9, 7, -10, 20};然后调用aa函数,并将aa函数调用前后队列的数据元素分别输出到屏幕上。
#include
#define N 20
typedef int elemtype;
int count;
typedef struct queue_type
{ elemtype data[N];
int front;
int rear;
}queue_type;
void initqueue(queue_type *q)
{
q->front=q->rear=0;
return;
}
int enqueue(queue_type *q,elemtype x)
{
if((q->rear+1) % N == q->front)
return 0;
else
{
q->rear=(q->rear+1)%N;
q->data[q->rear]=x;
return(true);
}
}
int dequeue(queue_type *q,elemtype *x)
{
if(q->rear == q->front)
return(NULL);
else
{
q->front=(q->front+1) % N;
*x=q->data[q->front];
}
return 0;
}
void aa(queue_type *q)
{
int i;
q->front=0;
q->rear=count;
i=count;
elemtype out;
while(i--)
{
dequeue(q,&out);
count--;
if(out>0)
{
enqueue(q,out);
count++;
}
}
}
int main()
{
elemtype x,temp;
int i,j,k;
queue_type Q;
initqueue(&Q);
printf("Now, let's make a stack! Please input the number:\n");
scanf("%d",&count);
i=count;
printf("Please input the data:\n");
scanf("%d",&x);
while(--i)
{
enqueue(&Q,x);
scanf("%d",&x);
}
enqueue(&Q,x);
j=count;
while(j--)
{
dequeue(&Q,&temp);
printf("%d ",temp);
}
aa(&Q);
k=count;
printf("\nQueue After 'aa':\n");
while(k--)
{
dequeue(&Q,&temp);
printf("%d ",temp);
}
return 0;
}