/* create a queue by dynarray
*/
#include<stdio.h>
#include<stdlib.h>
struct Queue
{
int capacity;
int front,rear;
int* array;
} ;
typedef struct Queue queue;
void menu(void)
{
printf("menu:\n");
printf("1.initialize\n");
printf("2.enqueue\n");
printf("3.dequeue\n");
printf("4.printelements\n");
printf("5.deletequeue\n");
printf("6.doublesize\n");
}
int Choice(void)
{
int choice;
printf("please input your choice:");
scanf("%d",&choice);
return choice;
}
queue* initialize(void)
{
queue* q=(queue*)malloc(sizeof(queue));
printf("please input the size:");
scanf("%d",&q->capacity);
q->front=-1;
q->rear=-1;
q->array=(int*)malloc(sizeof(int)*q->capacity);
return q;
}
int isfull(queue* q)
{
return (q->rear+1)%q->capacity==q->front;
}
int isempty(queue* q)
{
return q->front==-1;
}
void enqueue(queue* q,int data)
{
if(isfull(q))
printf("the queue is full\n");
else
{
q->rear=(q->rear+1)%q->capacity;
q->array[q->rear]=data;
if(q->front==-1)
q->front=q->rear;
}
}
int dequeue(queue* q)
{
int data=0;
if(isempty(q))
printf("the queue is empty\n");
else
{
data=q->array[q->front];
if(q->front==q->rear)
q->front=q->rear=-1;
else
q->front=(q->front+1)%q->capacity;
}
return data;
}
void printelements(queue* q)
{
int i;
if(q->front<=q->rear)
{
for(i=q->front;i<=q->rear;i++)
printf("%d ",q->array[i]);
}else
{
for(i=q->front;i<q->capacity;i++)
printf("%d ",q->array[i]);
for(i=0;i<=q->rear;i++)
printf("%d ",q->array[i]);
}
printf("\n");
}
void deletequeue(queue* q)
{
if(q)
{
if(q->array)
free(q->array);
}
free(q);
}
void doublesize(queue* q)
{
int size=q->capacity;
int i;
q->capacity*=2;
realloc(q->array,q->capacity);
if(q->front>q->rear)
{
for(i=0;i<=q->rear;i++)
q->array[i+size]=q->array[i];
}
}
int main()
{
int flag=1,data;
queue* q;
menu();
while(flag)
{
switch(Choice())
{
case 1:
q=initialize();
break;
case 2:{
printf("please input value:");
scanf("%d",&data);
enqueue(q,data);
break;
}
case 3:{
data=dequeue(q);
if(data)
printf("daqueue is %d",data);
break;
}
case 4:{
printf("the queue is:");
printelements(q);
break;
}
case 5:{
printf("the queue has deleted\n");
deletequeue(q);
break;
}
case 6:{
printf("the queue has doubled\n");
doublesize(q);
break;
}
}
}
return 0;
}
队列(动态数组实现)
最新推荐文章于 2024-05-07 20:00:07 发布