一、队列是什么队列是一种可以实现“先进先出”的存储结构,其实,说简单点,队列就是排队,跟我们日常生活中到银行取钱排队,排队打饭在道理上是一样的。
队列通常可以分为两种类型: ①链式队列(由链表实现). ②静态队列(由数组实现),静态队列通常都必须是循环队列. 循环队列的两个参数: ①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; }