队列&数组完美运行

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

}

这里写图片描述

这里写图片描述

这里写图片描述

逻辑看不出哪里错, 及时使用打断点进行检查错误

这里写图片描述

这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_42664961/article/details/82346460