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