设为首页 加入收藏

TOP

用数组去实现队列(c)
2014-11-24 00:36:28 来源: 作者: 【 】 浏览:20
Tags:实现 队列
[ html]
#include
#include

struct QueueRecord;
typedef struct QueueRecord *Queue;

#define MinQueueSize (5)

struct QueueRecord
{
int Capacity;
int Front;
int Rear;
int Size;
int *Array;
};

/*
* 创建 队列。
*/
Queue CreateQueue(int capacity)
{
Queue queue;
queue = (Queue)malloc(sizeof(Queue));
if (queue == NULL)
{
printf("out of space!!!\n");
}
queue->Array = (int *)malloc(capacity * sizeof(int));
if (queue->Array == NULL)
{
printf("out of space!!!\n");
}
queue->Size = 0;
queue->Rear = -1;
queue->Front = 0;

return queue;
}



/*
* if full ,return 0; else return 1;
*/
int IsFull(Queue queue, int capacity)
{
return (queue->Size < capacity);
}

/* if null return 1. else 0 */
int IsEmpty(Queue queue)
{
return (queue->Size == 0);
}

/*
* 打印队列。
*/
int ShowQueue(Queue queue, int capacity)
{
int i;

printf("queue->Front = %d\n", queue->Front);
printf("queue->Rear = %d\n", queue->Rear);
if (!IsEmpty(queue))
{
for (i = queue->Front; i <= queue->Rear; i++)
{
if (i < queue->Rear)
{
printf("%d, ", queue->Array[i]);
}
else
{
printf("%d ", queue->Array[i]);
}

}
}
else
{
printf("oh, sorry. it is empty.");
}

}
/* 进队 */
void Enqueue(Queue queue, int a, int capacity)
{
queue->Rear++;
queue->Array[queue->Rear] = a;
queue->Size++;

if (IsFull(queue, capacity))
{
if (queue->Rear == capacity)
{
queue->Rear = 0;
}

}

}

/* 出队 */
void Dequeue(Queue queue, int capacity)
{
queue->Front++;
queue->Size--;

if (IsFull(queue, capacity))
{
if (queue->Front== capacity)
{
queue->Front = 0;
}

}
}

int main(void)
{
Queue queue;
int capacity = 10;
if (capacity < MinQueueSize)
{
printf("it is too small.\n");
}

queue = CreateQueue(capacity);
Enqueue(queue, 1, capacity);
Enqueue(queue, 2, capacity);
Enqueue(queue, 3, capacity);
Enqueue(queue, 4, capacity);
Enqueue(queue, 5, capacity);
Enqueue(queue, 6, capacity);
Dequeue(queue, capacity);
Enqueue(queue, 12, capacity);
//Enqueue(queue, 3, capacity);
ShowQueue(queue, capacity);

}



摘自 angelbosj的专栏
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇swprintf和sprintf的使用 下一篇C语言:逆波兰表达式代码

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: