队列链表实现

#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>

#define MAXQUEUE 10

typedef struct node {
	int offset;
	struct Node* next;
}Node;
typedef struct queue {
	Node* front;
	Node* rear;
	int size;
}*Queue;

void Intializequeue(Queue x_queue);
void showarray(int offset);
void PrintQueue(void (*pfun)(int),Queue x_queue);/*第一个参数为函数指针*/
void DeleteEmQueue(Queue x_queue);
bool InitializeFull();
bool Queue_ptr(Queue x_queue);
bool EnQueue(Queue x_queue,int off);
bool DeleteQueue(Queue x_queue);
bool Queueliste(int x_queue);
static Queue CopyQueueFull(int off);

int main(void) {
	struct queue x_queue;
	Node* v_queue;
	int off;
	int ch;
	Intializequeue(&x_queue);
	if (InitializeFull()) {
		fprintf(stderr, "申请内存失败");
		exit(1);
	}
	puts("请输入整数:");
	while (scanf("%d", &off) == 1&& off != 0) {
		getchar();//清掉换行符
		if (Queue_ptr(&x_queue)) {/*判断队列是否已满*/
			printf("队已满");
			break;
		}
		if (EnQueue(&x_queue,off)) {
			printf("添加成功\n");
		}
		puts("删除请按d");
		if ((ch = getchar()) == 'd') {
			if (DeleteQueue(&x_queue))
				puts("删除成功");
		}
		printf("请输入下一个要添加到队里的整数:");
	}
	if (Queueliste(x_queue.size))
		printf("队为空");
	else
	PrintQueue(showarray,&x_queue);
	DeleteEmQueue(&x_queue);

}
void showarray(int offset) {
	printf("off:%d\t", offset);
}
/*初始化*/
void Intializequeue(Queue x_queue) {
	x_queue->front = x_queue->rear = NULL;
	x_queue->size = 0;
}
/*判断队是否已满*/
bool Queue_ptr(Queue x_queue) {
	return x_queue->size == MAXQUEUE;
}
/*查看队是否为空*/
bool Queueliste(int list) {
	return list == 0;
}
/*判断内存是否申请成功(可有可无)*/
bool InitializeFull() {
	Node* x_queue = (Node*)malloc(sizeof(struct node));
	if (! x_queue)
		return true;
	else 
		free(x_queue);/*这里只是判断是否申请成功所以内存要释放掉*/
	return false;
}
/*添加到队列*/
bool EnQueue(Queue x_queue, int off) {
	Node* v_queue;
	Node* b_queue = x_queue->front;
	v_queue=CopyQueueFull(off);
	if (v_queue == NULL)
		exit(2);
	if (b_queue == NULL)
		x_queue->front = v_queue;
	else {
		x_queue->rear->next = v_queue;
	}
	x_queue->rear = v_queue;/*记录队尾端*/
	x_queue->size++;
	return true;
}
/*删除队*/
bool DeleteQueue(Queue x_queue) {
	if (Queueliste(x_queue->size)) {
		printf("队为空\n");
		return false;
	}
	Node* v_queue = x_queue->front;
	x_queue->size--;
	x_queue->front = v_queue->next;
	free(v_queue);
	return true;
}
/*显示队内容*/
void PrintQueue(void (*pfun)(int), Queue x_queue) {
	Node* v_queue = x_queue->front;
	while (v_queue != NULL) {
		(*pfun)(v_queue->offset);/*作用于(这里可以当成showarray函数)*/
		v_queue = v_queue->next;
	}
}
/*清空*/
void DeleteEmQueue(Queue x_queue) {
	Node* v_queue = x_queue->front;
	while (v_queue != NULL) {
		x_queue->front = v_queue->next;
		free(v_queue);
		v_queue = x_queue->front;
	}
}
static Queue CopyQueueFull(int off) {
	Node* v_queue = (Node*)malloc(sizeof(Node));
	v_queue->offset= off;
	v_queue->next = NULL;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值