当前位置: 首页 > news >正文

大连网站建设选高合科技网站模板 整站源码

大连网站建设选高合科技,网站模板 整站源码,wordpress网络,商标设计网站哪个好前言 本文介绍队列的基本知识,包括概念、初始化、销毁、入队、出队、求队首队尾值以及计算有效元素个数 队列 前言正文1概念与结构 2.常见操作基本实现Queue.hQueue.c初始化与销毁入队判断队列是否为空出队取队头或队尾数据队列中的有效元素 test.c 结语 正文 1概…

前言

本文介绍队列的基本知识,包括概念、初始化、销毁、入队、出队、求队首队尾值以及计算有效元素个数

队列

    • 前言
    • 正文
      • 1概念与结构
    • 2.常见操作基本实现
      • Queue.h
      • Queue.c
        • 初始化与销毁
        • 入队
        • 判断队列是否为空
        • 出队
        • 取队头或队尾数据
        • 队列中的有效元素
      • test.c
    • 结语

正文

1概念与结构

概念:只允许在一端进行插入的数据操作,在另一端进行删除数据操作的特殊线性表
队列具有先入先出
入队列:进行插入的一段称为队尾
出队列:进行删除操作的一段称为队头
队列
那么队列的底层结构如何选选择?数组or链表

数组
入队,可以直接找到,时间复杂度为O(1)
出队,需要遍历,时间复杂度为O(N)
链表
出队,对头出队,O(1)
入队,需要找到尾指针,O(N)

这样看来似乎哪个都行没有区别,但是,对于链表而言,如果我们直接定义一个队尾的指针,时间复杂度岂不是O(1).
代码如下:

//队列结点的结构
typedef struct QueueNode
{QDataType data;struct QueueNode* next;
}QueueNode;
//队列的结构
typedef struct Queue
{QueueNode* phead;QueueNode* ptail;
}Queue;

2.常见操作基本实现

本文依旧是多文件形式

Queue.h

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>typedef int QDataType;
//队列结点的结构
typedef struct QueueNode
{QDataType data;struct QueueNode* next;
}QueueNode;
//队列的结构
typedef struct Queue
{QueueNode* phead;QueueNode* ptail;//int size; //队列中有效数据个数
}Queue;//初始化
void QueueInit(Queue* pq);
//销毁队列
void QueueDestroy(Queue* pq);//入队——队尾
void QueuePush(Queue* pq, QDataType x);//出队——队头
void QueuePop(Queue* pq);//队列判空
bool QueueEmpty(Queue* pq);//队列有效元素个数
int QueueSize(Queue* pq);//取队头数据
QDataType QueueFront(Queue* pq);//取队尾数据
QDataType QueueBack(Queue* pq);

Queue.c

初始化与销毁

初始化:令phead和ptail为NULL
销毁:定义pcur指针,保存pcur->next,然后逐个销毁pcur。

//初始化
void QueueInit(Queue* pq)
{assert(pq);pq->phead = pq->ptail = NULL;//pz->size = 0;
}//销毁队列
void QueueDestroy(Queue* pq)
{assert(pq);QueueNode* pcur = pq->phead;while (pcur){QueueNode* next = pcur->next;free(pcur);pcur = next;}pq->phead = pq->ptail = NULL;//pq->size = 0;
}
入队

在这里插入图片描述
定义一个新结点,插入队尾入队

//入队——队尾
void QueuePush(Queue* pq, QDataType x)
{assert(pq);QueueNode* newnode = (QueueNode*)malloc(sizeof(QueueNode));if (newnode == NULL){perror("malloc fail!");exit(1);}newnode->data = x;newnode->next =NULL;//若队列为空if (pq->phead == NULL){pq->phead = pq->ptail = newnode;}//队列非空else {pq->ptail->next = newnode;pq->ptail = pq->ptail->next;}//pq->size++
}
判断队列是否为空
//判断队列是否为空
bool QueueEmpty(Queue* pq)
{assert(pq);return pq->phead == NULL;
}
出队

只有一个结点phead和ptail置为空,
有多个结点,因为对头出队,所有先要保存头结点的下一个指针phead->next,释放头指针phead,让phead->next成为新的头指针

//出队——对头
void QueuePop(Queue* pq)
{assert(!QueueEmpty(pq));//只有一个结点,phead和ptail都置为空if (pq->phead == pq->ptail){free(pq->phead);pq->phead = pq->ptail = NULL;}else{QueueNode* next = pq->phead->next;free(pq->phead);pq->phead = next;}//pq->size--;
}
取队头或队尾数据

注意:这里是拿出来用并不是销毁,该数据还在队列中
直接返回对应位置的data值即可

//取队头数据
QDataType QueueFront(Queue* pq)
{assert(!QueueEmpty(pq));return pq->phead->data;
}//取队尾数据
QDataType QueueBack(Queue* pq)
{assert(!QueueEmpty(pq));return pq->ptail->data;
}
队列中的有效元素

见代码

//队列有效元素个数
int QueueSize(Queue* pq)
{assert(pq);//方法一:遍历列表——适用于不频繁调用队列有效数据个数的场景(空间复杂度较高O(N))QueueNode* pcur = pq->phead;int size = 0;while (pcur){size++;pcur = pcur->next;}return size;//方法二:遍历链表——适用于频繁调用队列有效数据个数的场景//return pq->size;
}

test.c

用于测试

#include"Queue.h"void test()
{Queue q;QueueInit(&q);QueuePush(&q, 1);QueuePush(&q, 2);QueuePush(&q, 3);QueuePop(&q);int front = QueueFront(&q);int rear = QueueBack(&q);printf("front:%d\n", front);printf("rear:%d\n", rear);printf("size:%d", QueueSize(&q));QueueDestroy(&q);
}int main()
{test();return 0;
}

结语

这篇介绍链表的基本实现,但如需要进一步来学习栈与队列,请关注下一篇栈与队列OJ,希望三连支持一下谢谢。

http://www.dtcms.com/a/494066.html

相关文章:

  • 网站的设计与应用论文装饰公司网站如何布局
  • flash中文网站模板学做淘宝客网站有哪些
  • 网络公司网站策划书前端和后端哪个累
  • 邯郸制作网站的公司ps做图网站
  • 网站建设花都區龙岩网站建设哪里比较好
  • 惠州seo网站排名网站开发费应该入什么科目
  • 做乒乓球网站的图片大全家具设计软件有哪些
  • 武山建设局网站wordpress首页div
  • 山东省建设部网站网站建设的系统设计
  • 网站上传空间的ip地址吗做网站用的插件
  • 嘉兴网站制作网页12306网站开发成本
  • 团购产品 网站建设赣州市赣县区建设局网站
  • 迈创网站建设上海市最新消息今天
  • 有站点地图的网站企业网站模板cms
  • 网站的友情链接怎么做互联网官方网站
  • 陕西省高速公路建设集团公司网站低价网站建设渠道
  • 时尚网站欣赏linux下搭建wordpress
  • 国内可以上的网站网页设计和网页美工
  • 深圳找网站建设西安企业免费建站
  • 公众号申请网站建立自己的个人网站
  • 无经验做网站网站开发加盟商怎么做
  • 朝阳区网站建设公司深圳办公室装饰
  • 设计师怎么弄个人网站网站主题旁边的图标怎么做
  • 大佬做的魔法少女网站海丰网站建设
  • 做网站需要备案么湖北微网站建设价格
  • 电子商务网站建设设计方案上海市建设工程监理咨询有限公司
  • 好的网站推广建设全国科技中心网站
  • 深圳建设工程造价管理站平面设计广告公司
  • 郑州建设工程协会网站wordpress多站点模式插件
  • 网站一年多少钱网站企业地图