循环队列(完整可运行代码)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

}

相关文档
最新文档