队列的链表实现

#include <stdio.h>

typedef struct queue {
	int ele;
	struct queue* next;
}queue;

queue* CreatQueue() {
	queue* p = (queue*)malloc(sizeof(queue));
	if (p == NULL) {
		printf("内存不足\n");
		return NULL;
	}
	p->next = NULL;
	return p;
}

void MakeEmpty(queue* p) {
	queue* tmp = p;
	if (tmp->next != NULL) {
		MakeEmpty(tmp->next);
		free(tmp);
	}
	else {
		free(tmp);
	}
}

int IsEmpty(queue* p) {
	if (p->next == NULL) {
		return 1;
	}
	return 0;
}

void enqueue(queue* p, int x) {
	queue* tmp = p;
	queue* mem = (queue*)malloc(sizeof(queue));
	if (p == NULL) {
		printf("内存不足\n");
		return NULL;
	}
	mem->ele = x;
	mem->next = tmp->next;
	tmp->next = mem;
}

void dequeue(queue* p) {
	queue* tmp = p;
	if (p->next == NULL) {
		printf("队列为空\n");
		return;
	}
	while (tmp->next->next != NULL) {
		tmp = tmp->next;
	}
	queue* tmpp = tmp->next;
	tmp->next = NULL;
	free(tmpp);
}

queue* Front(queue* p) {
	queue* tmp = p;
	if (p->next == NULL) {
		printf("队列为空\n");
		return;
	}
	while (tmp->next != NULL) {
		tmp = tmp->next;
	}
	return tmp;
}

queue* FrontAndDe(queue* p) {
	queue* tmp = p;
	if (p->next == NULL) {
		printf("队列为空\n");
		return;
	}
	while (tmp->next->next != NULL) {
		tmp = tmp->next;
	}
	queue* tmpp = tmp->next;
	int b = tmpp->ele;
	tmp->next = NULL;
	free(tmpp);
	return b;
}

void Print(queue* p) {
	queue* tmp = p->next;
	while (tmp != NULL) {
		printf("%d ", tmp->ele);
		tmp = tmp->next;
	}
	printf("\n-------------------\n");
}
int main() {
	queue* pq = CreatQueue();
	if (IsEmpty(pq)) {
		printf("空队列\n");
		printf("----------------------\n");
	}

	//入队
	enqueue(pq, 1);
	enqueue(pq, 2);
	enqueue(pq, 3);
	enqueue(pq, 4);
	enqueue(pq, 5);
	enqueue(pq, 6);
	Print(pq);

	//出队
	dequeue(pq, 1);
	dequeue(pq, 2);
	dequeue(pq, 3);
	enqueue(pq, 9);
	Print(pq);
	//dequeue(pq, 4);
	//dequeue(pq, 5);
	//dequeue(pq, 6);

	//返回队头元素
	queue* first = Front(pq);
	printf("%d\n------------------\n", first->ele);

	//返回队头元素并出队
	int b = FrontAndDe(pq);
	printf("%d\n-------------------\n", b);
	first = Front(pq);
	printf("%d\n------------------\n", first->ele);

	MakeEmpty(pq);
	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值