现在的位置: 首页 > 综合 > 正文

QUEUE——队列(procedure)

2018年04月01日 ⁄ 综合 ⁄ 共 1834字 ⁄ 字号 评论关闭

#include <stdio.h>
#include <stdlib.h>
#include "queue.h"

int main()
{
 int i;
 Type x;
 Type arr[] = {3,1,2,5,7,9};
 QUEUE *q = NULL;

 q = CreateQueue(10);
 if(NULL == q)
  return -1;
 
 for(i = 0; i < sizeof(arr)/sizeof(*arr); i++)
 {
  EnQueue(q, arr + i);
 }
 FrontQueue(q, &x);
 printf("x = %d\n", x);

 DisptoryQueue(q);
 return 0;
}
---------------------------------------------------------------

#ifndef _QUEUE_H__
#define _QUEUE_H__

struct node;
typedef int Type;
typedef struct node QUEUE;

QUEUE *CreateQueue(int);
void QueueMakeEmpty(QUEUE *);
int QueueIsEmpty(QUEUE *);
int QueueIsFull(QUEUE *);
int EnQueue(QUEUE *, const Type *);
int DeQueue(QUEUE *);
int FrontQueue(QUEUE *, Type *);
int FrontAndDeQueue(QUEUE *, Type *);
void DisptoryQueue(QUEUE *);

struct node{
 Type *data;
 int capacity;
 int front;
 int rear;
 int size;
};

#endif
-------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>
#include "queue.h"

QUEUE *CreateQueue(int size)
{
 QUEUE *q = malloc(sizeof(*q));
 if(NULL == q)
  return NULL;
 q->data = malloc(sizeof(Type)*size); //队列的长度,队列的成员个数
 if(NULL == q->data)
 {
  free(q);
  return NULL;
 }
 q->capacity = size; //队列容量
 QueueMakeEmpty(q);
 return q;
}
void QueueMakeEmpty(QUEUE *q)
{
 q->size = 0;
 q->front = 1;
 q->rear = 0;
}
int QueueIsEmpty(QUEUE *q)
{
 return q->size == 0;
}
int QueueIsFull(QUEUE *q)
{
 return q->size == q->capacity;
}
static int repeat(QUEUE *q, int rear) //队列队尾入队,
{
 if(++rear == q->capacity)
  rear = 0;
 return rear;
}
int EnQueue(QUEUE *q, const Type *x)
{
 if(QueueIsFull(q))
  return -1;
 q->rear = repeat(q, q->rear); //每次入队成功后,队尾rear置0.
 q->data[q->rear] = *x;
 q->size++;
 return 0;
}
int DeQueue(QUEUE *q) //出队
{
 if(QueueIsEmpty(q))
  return -1;
 q->front = repeat(q, q->front);
 q->size--;
 return 0;
}
int FrontQueue(QUEUE *q, Type *x) //查看队首
{
 if(QueueIsEmpty(q))
  return -1;
 *x = q->data[q->front];
 return 0;
}
int FrontAndDeQueue(QUEUE *q, Type *x) //查看队首并出队
{
 if(FrontQueue(q, x) == 0)
  return DeQueue(q);
 return -1;
}
void DisptroyQueue(QUEUE *q)
{
 free(q->data);
 free(q);
}

抱歉!评论已关闭.