数组实现循环队列

来源:互联网 发布:讨鬼传极捏脸数据 编辑:程序博客网 时间:2024/05/22 10:59

1 动态数组类型typedef struct QNode {int size;int front, rear;int *data;//  等待确定大小}Queue;(1)分配结构体内存与数组内存Queue* initialize1(){Queue* q;q = (Queue*)malloc(sizeof(Queue));// 不能加这个 切记q->data = (int*)malloc(sizeof(int)*MaxSize);q->size = 0;q->rear = 0;q->front = 0;return q;}\\相应main函数int main(){Queue *q;q = initialize1(); return 0;}(2)只分配数组内存不分配结构内存int initialize2(Queue* q){//q = (Queue*)malloc(sizeof(Queue)); // 切记 不可再次申请空间 q->data = (int*)malloc(sizeof(int)*MaxSize);q->front = q->rear = 0;q->size = 0;return 1;} \\相应main函数int main(){Queue q;initialize2(&q);return 0;}2 静态数组类型     结构内存与数组内存都不分配typedef struct QNode {int size;int front, rear;int data[MaxSize];}Queue;int initialize3(Queue* q){q->front = q->rear = 0;q->size = 0;return 1;}//相应main函数int main(){Queue q;initialize3(&q);return 0;}


       数组是否是动态数组  是(需要申请数组空间)否(不申请数组空间)  

       main中 创建的是指针还是 结构本身   即 Queue *q(需要申请结构内存)   OR   Queue q(不需要申请结构内存);


其中一种的完整代码实现

#include<stdlib.h>#include<stdio.h>#define MaxSize 10 //循环队列 最大容量为 MaxSize-1;typedef struct QNode {int size;int front, rear;int data[MaxSize];}Queue;int initialize(Queue *q){//q = (Queue*)malloc(sizeof(Queue));// 不能加这个 切记q->size = 0;q->rear = 0;q->front = 0;return 1;}int is_full(Queue q){return (q.rear + 1) % MaxSize == q.front;}int is_empty(Queue q){return q.front == q.rear;}void enqueue(int x, Queue *q){if (!is_full(*q)) {q->data[q->rear] = x;q->rear = (q->rear + 1) % MaxSize;q->size++;}}void dequeue(Queue *q){if (!is_empty(*q)) {q->front = (q->front + 1) % MaxSize;q->size--;}}int get_front(Queue q){if (!is_empty(q)) {printf("q.front = %d", q.front);return q.data[q.front];}}void print_queue(Queue q){int i;for (i = q.front; i < q.front+q.size; i++) {printf("%d ", q.data[i%MaxSize]);}}int main(){Queue q;//已经 完整的创建了 结构体 初始化不能再申请空间了initialize(&q);print_queue(q);int x;scanf("%d", &x);while (x != -1) {enqueue(x, &q);scanf("%d", &x);}dequeue(&q);enqueue(8, &q);dequeue(&q);enqueue(10,&q);print_queue(q);getchar();getchar();}







原创粉丝点击