数组实现循环队列

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();

}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值