队列的新建 保存节点信息 死循环

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->front = q->rear = 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));
if (queue_is_full(q)) //传入地址;
    return false;
if (new_node == NULL)
{
    printf("Unable to allocate memory");
    exit(1);//系统异常退出程序执行;exit(0)系统正常退出;
}
if (queue_is_empty(q)){
    q->front = new_node;
    q->rear = q->front;
}
else{
    new_node->date = date;
    new_node->next = NULL;
    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;
while (q->front != q->rear){
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;
}



















 /*//还需要调用一个函数 static void copy_to_code(int date,Node* q) 静态函数只能在该源文件中被引用;

static void copy_to_code(int n, Node *m){
    m->
}
*/

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", queue.number);

year *p;
 de_queue(&p, &queue);
 while (queue_is_empty(&queue)==false){
     printf("month%d,date%d", p->month, p->date);
 }
system("pause");

}

这里写图片描述

这里写图片描述

这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_42664961/article/details/82321231
今日推荐