数据类型-C-队列

来源:互联网 发布:通信网络优化培训 编辑:程序博客网 时间:2024/06/05 17:35

一、队列是什么

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

队列通常可以分为两种类型:       ①链式队列(由链表实现).       ②静态队列(由数组实现),静态队列通常都必须是循环队列.    循环队列的两个参数:       ①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));//67getchar();//写一个队列.存入的是10个学生信息(id,姓名,年龄),//按照id从小到大的顺序入队列,把学员的信息通过队列首到队//列尾部的顺序打印出来return 0;}