使用顺序表实现一个循环队列
2017-04-13 00:18
393 查看
用顺序表实现一个循环队列,并实现队列的入列,出列,
队列数据打印。
/** * @filename queue.c * @author haohaibo * @data 2017/4/12 * @brief 用顺序表实现一个循环队列 **/ #include <stdio.h> #include <stdlib.h> #define N 9 typedef int datatype_t ; typedef struct{ datatype_t data ; int front; int real; }seqqueue_t; /** * @brief 输出头指针和尾指针用于调试 */ void showpos(seqqueue_t *sq) { printf("real=%d\n",sq->real); printf("front=%d\n",sq->front); } /** * @brief 创建一个队列 */ seqqueue_t *seqqueue_create() { seqqueue_t *sq; sq=(seqqueue_t *)malloc(sizeof(seqqueue_t)); sq->front=0; sq->real=0; return sq; } /** * @brief 清空队列 */ void seqqueue_clear(seqqueue_t *sq) { sq->front=0; sq->real=0; } /** * @brief 队列满 */ int seqqueue_full(seqqueue_t *sq) { if((sq->real+1)%N==sq->front) { puts("seqqueue full"); return 1; } return 0; } /** * @brief 队列空 */ int seqqueue_empty(seqqueue_t *sq) { if(sq->real==sq->front) { puts("seqqueue full"); return 1; } return 0; } /** * @brief 插入数据 */ int seqqueue_push(seqqueue_t *sq,datatype_t value) { if(seqqueue_full(sq)) return -1; //sq->real++; sq->data[sq->real]=value; sq->real=(sq->real+1)%N; return 0; } /** * @brief 数据出列 */ datatype_t seqqueue_pop(seqqueue_t *sq) { datatype_t value; if(seqqueue_empty(sq)) exit(1); value=sq->data[sq->front]; sq->front=(sq->front+1)%N; return value; } /** * @brief 多次数据出列,忽略返回值,仅做调试用 */ datatype_t seqqueue_pop_n(seqqueue_t *sq,int n) { printf("queue pop count=%d.\n",n); while(n--) seqqueue_pop(sq); return 0; } /** * @brief 打印队列数据 */ int seqqueue_show(seqqueue_t *sq) { int i=0; printf("queue data: "); if(sq->real>=sq->front) { for(i=sq->front;i<sq->real;i++) printf("%d ",sq->data[i]); } else { for(i=sq->front;i<N;i++) printf("%d ",sq->data[i]); for(i=0;i<sq->real;i++) printf("%d ",sq->data[i]); } putchar(10); } int main(void) { seqqueue_t *sq1; sq1=seqqueue_create(); seqqueue_push(sq1,1); seqqueue_push(sq1,2); seqqueue_push(sq1,3); seqqueue_push(sq1,4); seqqueue_push(sq1,5); seqqueue_push(sq1,6); seqqueue_push(sq1,7); seqqueue_show(sq1); seqqueue_pop_n(sq1,5); seqqueue_show(sq1); seqqueue_push(sq1,1); seqqueue_push(sq1,2); seqqueue_push(sq1,3); seqqueue_push(sq1,4); seqqueue_push(sq1,5); seqqueue_show(sq1); seqqueue_pop_n(sq1,5); seqqueue_show(sq1); }
队列数据打印。
相关文章推荐
- 实现循环队列为什么要使用一个空的数据位
- //使用顺序表实现循环队列的入队和出队
- 循环数组实现一个队列
- 数据结构循环队列,数组实现,循环队列中如果不使用数据项计数字段items,而是通过front和rear计算队列是否为空或满或队列个数,那会很复杂
- C#基础之温习--使用列表和链表实现优一个先级队列
- 两个队列实现一个栈(两个队列循环)
- 如何实现一个循环队列
- 一个支持多线程同步循环队列的实现
- 数据结构(C实现)------- 顺序队列(循环队列之少用一个存储空间实现) .
- 使用两个Stack类(JDK容器类库中的Stack类)实现一个队列类MyQueue,提供队列的入队列和出队列操作:enQueue和deQueue
- 如何实现一个循环队列
- 使用数组实现一个随机队列
- 如何实现一个循环队列
- 这里实现一个基于数组的线程安全的循环队列
- 使用两个队列实现一个栈
- 28. 微软面试题:使用多线程实现一个队列
- 【题目5】如何使用两个栈来实现一个队列
- 如何实现一个循环队列
- 用最简单的函数实现功能:判断一个int数据是否是2的x次幂(不能使用循环)。
- Cracking coding interview(3.5)使用2个堆栈实现一个队列