ifndef QUEUE_H
define QUEUE_H
include “stdbool.h”
struct node {
void *date;
struct node *next;
};
typedef struct node Node;
struct queue {
Node*rear;
Node*front;
int number;
};
typedef struct queue Queue;
void init_queue(Queue *q);//因为初始化需要对Quueue进行修改,所以函数的参数应该以Queue的地址作为参数;
bool queue_is_full(const Queue *q); //因为函数不更改队列;所以接受Queue的类型的参数;但是传递地址更快节省内存;内存大选用地址,//这里使用地址,但是用const限定修饰是不可以改变的队列。
bool queue_is_empty(Queue *q);
int quque_count(const Queue *q); //q指向的的Queue的数据项是不能修改的,可以用相似的结构返回队列的长度值;
bool en_queue(void *date, Queue *q);//队列末尾涉及对队列元素的修改,是要使用指针的; 函数可以是返回值为空void,也可以返回值表示是否添加成功;
//int DeQueue(Queue q)// 删除项有很多种的方法,可以把项定义为 结构 或者一种基本类型,删除项可以是Queued的类型,也可以是Queue的指针;
bool de_queue(void **pitem, Queue *q); //删除栈中的元素储存在pitem指向的地址,函数的返回值表明是否返回成功;
void empty_queue(Queue *q);//清空队列的唯一参数就是队列的地址;
endif
include”stdio.h”
include”Queue.h”
include”stdlib.h”
include”stdbool.h”
define MAX 10
void init_queue(Queue *q){
q->number = 0;
q->rear = q->front= NULL;
}
bool queue_is_full(const Queue *q){
return q->number == MAX;
}
bool queue_is_empty(Queue *q){
if (q->number == 0){
return true;
}
else
return false;
}
int quque_count(const Queue *q){
return q->number;
}
bool en_queue(void *date, Queue *q){
//思路 1, 创建新节点;2,将项拷贝到新节点;3,新节点next->null,rear->next = 新节点;4, rear重新指向新的节点作为尾节点;5,节点数量+1;
Node *new_node;
new_node = (Node*)malloc(sizeof(Node));
new_node->date = date;
new_node->next = NULL;
if (queue_is_full(q)==true) //传入地址;
return false;
if (queue_is_empty(q) == true){
q->rear = q->front = new_node;
;
}
else{
q->rear->next = new_node;
}
q->rear =new_node;
q->number++;
return true;
}
bool de_queue(void **pitem, Queue *q){
if (queue_is_empty(q))
return false;
*pitem = q->rear->date;
q->front = q->front->next;
q->number--;
if (q->number == 0)
q->rear = NULL;
return true;
}
void empty_queue(Queue *q){
q->rear = q->front = NULL;
}
include”stdio.h”
include”Queue.h”
include”stdlib.h”
int main(){
struct year_node {
int month;
int date;
};
typedef struct year_node year;
year y[10];
Queue queue;
init_queue(&queue);
for (int i = 0; i < 10; i++){
y[i].date= i;
y[i].month = i + 10;
en_queue(&y[i], &queue);
}
int quque_count(queue);
printf("队列元素个数%d\n", queue.number);
year *p;
while (queue_is_empty(&queue)==false){
de_queue(&p, &queue);
printf("month%d,date%d\n", p->month, p->date);
}
system("pause");
}
逻辑看不出哪里错, 及时使用打断点进行检查错误