您的位置:首页 > 其它

队列ADT实现

2011-12-29 23:35 260 查看
队列也比较的简单,先进先出。流行的做法也是用数组实现。

结构体如下:

struct Queue

{

 int capacity;

 int front;

 int rear;

 int size;

 int *num;

};

 

直接上参考代码了:

#include<stdio.h>

#include<stdlib.h>

struct Queue

{

 int capacity;

 int front;

 int rear;

 int size;

 int *num;

};

typedef struct Queue queue;

/*创建一个空的队列

形参代表这个队列的长度最大是多少*/

queue *createQueue(int capacity)

{

 queue *Q = (queue*)malloc(sizeof(queue));

 Q->capacity=capacity;

 Q->front = Q->rear =0;

 Q->size=0;

 Q->num=(int*)malloc(sizeof(int)*capacity);

 return Q;

}

/*判断一个队列是否为空

为空的话返回1,否则返回0*/

int isEmpty(queue* Q)

{

 return Q->size==0?1:0;

}

/*判断一个队列是否为满

满的话返回1,否则返回0*/

int isFull(queue*Q)

{

 return Q->size==Q->capacity?1:0;

}

/*入队*/

void inQueue(int x, queue* Q)

{

 if(isFull(Q))

 {

  printf("Queue is full\n");

  exit(1);

 }

 Q->size++;

 Q->num[Q->rear++]=x;

 if(Q->rear ==Q->capacity)

  Q->rear=0;//使用循环数组方式

}

/*出队

返回元素的值*/

int outQueue(queue *Q)

{

 int temp;

 if(isEmpty(Q))

 {

  printf("Queue is empty\n");

  exit(1);

 }

 temp=Q->num[Q->front];

 Q->size--;

 Q->front++;

 if(Q->front==Q->capacity)

  Q->front=0;

 return temp;

}

/*释放队列所占的空间*/

void deleteQueue(queue* Q)

{

 if(Q!=NULL)

 {

  free(Q->num);

  free(Q);

 }

}

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  struct null