数据类型-C-队列

17 篇文章 0 订阅

一、队列是什么

队列是一种可以实现“先进先出”的存储结构,其实,说简单点,队列就是排队,跟我们日常生活中到银行取钱排队,排队打饭在道理上是一样的。

队列通常可以分为两种类型:       ①链式队列(由链表实现).       ②静态队列(由数组实现),静态队列通常都必须是循环队列.    循环队列的两个参数:       ①front,front指向队列的第一个元素.        ②rear,rear指向队列的最后一个有效元素的下一元素.    队列的两个基本操作:出队和入队.

二、队列的结构

三、队列的操作

初始化队列

入队(尾部入队) 

出队(头部出队) 

队列是否为空   队列是否已满四、队列的实现 

 

static PNODE CreatNode(int data){
	PNODE pnew = (PNODE)malloc(sizeof(NODE));
	if (pnew == NULL){
		return NULL;
	}
	pnew->data = data;
	pnew->next = NULL;
	return pnew;
}
static PNODE DeleteNode(PNODE qu){
	PNODE P = qu->next;
	free(qu);
	qu = NULL;
	return P;
}
//压队列
void push(PQUEUE qu, int data)
{
	//创建节点
	PNODE pNew = CreatNode(data);

	//把最后一个节点的next指针指向新节点
	if (qu->rear){

		qu->rear->next = pNew;
	}
	else
	{
		qu->front = pNew;
		//qu->rear = pNew;
	}
	//把rear指向最后 也就是新节点
	qu->rear = pNew;
}
//出队列
int pop(PQUEUE qu){
	//先保存对首元素
	int da = qu->front->data;
	//先删除对首元素
	if(qu->front = DeleteNode(qu->front)){
		;//如果头不是NULL说明里面有元素,尾部指针不需要改变
	}
	else{//头部为NULL,说明列队中没有元素,把尾部制造NULL;
		qu->rear = NULL;
	}
	return da;
}
//获取大小
int GetSize(PQUEUE qu){
	int size = 0;
	PNODE p = qu->front;
	while(p){
		++size;
		p = p->next;
	}
	return size;
}
//判断空
int IsEmpty(PQUEUE qu){
	return !qu->front || !qu->rear;
}
//初始化
void init(PQUEUE qu){
	qu->front = NULL;
	qu->rear = NULL;
}
//得到对首
int getFront(PQUEUE qu){
	return qu->front->data;
}
//显示所有内容
void show(PQUEUE qu){
	PNODE p = qu->front;
	for (;p;p = p->next){
		printf("%d>",p->next);
	}
	printf("null\n");
}
执行文件:
#include "queue_t.h"
#include <stdio.h>

int main(){
	QUEUE qu;
	init(&qu);
	for (int i = 0; i < 5; i++){
		push(&qu, 2 * i);
	}
	show(&qu);
	printf("出队列的值%d\n",pop(&qu));

	show(&qu);
	push(&qu, 666);
	show(&qu);
	printf("大小是%d\n", GetSize(&qu));
	printf("队列的首元素%d\n",getFront(&qu));//67
	getchar();
	//写一个队列.存入的是10个学生信息(id,姓名,年龄),
	//按照id从小到大的顺序入队列,把学员的信息通过队列首到队
	//列尾部的顺序打印出来
	return 0;
}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值