使用数组实现队列
2013-08-26 21:50
363 查看
一、h文件:my_que.h
二、c文件:my_que.c
三、打印输出:
#ifndef _MY_QUE_H_ #define _MY_QUE_H_ struct QueRecord; typedef struct QueRecord* queue; typedef int element_type; int IsEmpty(queue q); int IsFull(queue q); queue creat_que(int max_element); void make_empty(queue q); void enqueue(element_type x,queue q); element_type front_que(queue q); void dequeue(queue q); element_type front_deque(queue q); void dispose_que(queue q); #define mini_que 5 struct QueRecord { int capacity; int size; int front; int rear; element_type *array; }; #endif
二、c文件:my_que.c
#include <stdio.h> #include <stdlib.h> #include <string.h> #include "my_que.h" int IsEmpty(queue q) { return q->size == 0; } int IsFull(queue q) { return q->size == q->capacity; } queue creat_que(int max_element) { queue q; if(max_element < mini_que) { printf("the size of que is too small\n"); exit(-2); } q = (queue)malloc(sizeof(struct QueRecord)); if(q == NULL) { printf("can't alloca memory\n"); exit(-1); } q->array = (element_type *)malloc(max_element * sizeof(element_type)); if(q->array == NULL) { printf("can't alloca the mem\n"); exit(-1); } q->capacity = max_element; make_empty(q); return q; } void make_empty(queue q) { if(q != NULL) { q->size = 0; q->front = 1; q->rear = 0; } } int IsQueEnd(int value,queue q) { if( ++value == q->capacity) return 0; else return value; } void enqueue(element_type x,queue q) { if(q == NULL) { printf("the que is not exsit\n"); exit(-2); } if(IsFull(q)) { printf("the que is full\n"); exit(-2); } q->size++; q->rear = IsQueEnd(q->rear,q); q->array[q->rear] = x; } element_type front_que(queue q) { if(IsEmpty(q)) { printf("the que is empty\n"); exit(-3); } return q->array[q->front]; } void dequeue(queue q) { if(IsEmpty(q)) { printf("the que is empty\n"); exit(-4); } q->size--; q->front = IsQueEnd(q->front,q); } element_type front_deque(queue q) { if(IsEmpty(q)) { printf("the que is empty"); exit(-5); } q->size--; int front = q->front; q->front = IsQueEnd(q->front,q); return q->array[front]; } void dispose_que(queue q) { if(q) { if(q->array) { free(q->array); } free(q); } } int main(int argc ,char *argv[]) { element_type val; int i = 0; queue q; q = creat_que(10); while( ++i <= 10 ) { printf("now ,please input the value:\n"); scanf("%d",&val); printf("the val is %d\n",val); enqueue(val,q); printf("the q size is %d\n",q->size); } while(q->size) { val = front_deque(q); printf("the val is %d\n",val); sleep(1); } dispose_que(q); return 0; }
三、打印输出:
hangma@ubuntu:~/test/test/protest/que_test$ ./my_que now ,please input the value: 1 the val is 1 the q size is 1 now ,please input the value: 2 the val is 2 the q size is 2 now ,please input the value: 3 the val is 3 the q size is 3 now ,please input the value: 4 the val is 4 the q size is 4 now ,please input the value: 5 the val is 5 the q size is 5 now ,please input the value: 6 the val is 6 the q size is 6 now ,please input the value: 7 the val is 7 the q size is 7 now ,please input the value: 8 the val is 8 the q size is 8 now ,please input the value: 9 the val is 9 the q size is 9 now ,please input the value: 10 the val is 10 the q size is 10 the val is 1 the val is 2 the val is 3 the val is 4 the val is 5 the val is 6 the val is 7 the val is 8 the val is 9 the val is 10
相关文章推荐
- 使用数组实现队列
- 循环队列Queue--使用顺序存储结构(数组)实现
- java使用数组实现链式队列
- 数据结构与算法-----队列-使用数组(顺序结构)实现
- 使用数组实现队列----《数据结构与算法分析---C语言描述》
- 使用JavaScript的数组实现数据结构中的队列与堆栈
- 使用JavaScript的数组实现数据结构中的队列与堆栈
- 使用JavaScript的数组实现数据结构中的队列与堆栈
- java使用数组实现队列
- 使用数组和模板实现的队列
- java使用数组实现循环队列
- PHP使用数组实现队列
- 使用JavaScript的数组实现数据结构中的队列与堆栈
- 使用数组实现双端队列
- 使用JavaScript的数组实现数据结构中的队列与堆栈
- PHP使用数组实现队列(实际就是先进先出怎样实现)
- Java中队列的实现(1)-使用顺序存储结构(数组)以及实现
- 使用不完全填满数组的实现的循环FIFO(队列)
- PHP使用数组实现队列(实际就是先进先出如何实现)
- 使用数组实现队列