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

负责网站建设免费装修设计软件哪个好

负责网站建设,免费装修设计软件哪个好,黑龙江省网站建设,可以看任何网站的浏览器下载目录: 一、队列的概念及结构 二、队列的实现 1.队列的结构 2.队列的初始化 3.队列的销毁 4.队列的插入 5.队列的删除 6.统计队列的数据个数 7.判断队列是否为空 8.返回队列表头数据 9.返回队列表尾数据 10.运行展示 三、代码 一、队列的概念及结构 队列…

目录:

一、队列的概念及结构

二、队列的实现

1.队列的结构

2.队列的初始化

3.队列的销毁

4.队列的插入

5.队列的删除

6.统计队列的数据个数

7.判断队列是否为空

8.返回队列表头数据

9.返回队列表尾数据

10.运行展示

三、代码

一、队列的概念及结构

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out)
入队列:进行插入操作的一端称为 队尾
出队列:进行删除操作的一端称为 队头
在实现栈的时候(https://blog.csdn.net/xpcxpt/article/details/148481903?spm=1001.2014.3001.5501),我们使用了数组作为底层结构,但是队列采取的是队尾进,队头出,用数组不太合适,所以选择用更方便的单链表。

二、队列的实现

1.队列的结构

既然底层是单链表,那我们就先创造一个结构体表示单链表

不会单链表的可以看这个链接:https://blog.csdn.net/xpcxpt/article/details/147569114?spm=1001.2014.3001.5501

那么单链表结构如下:

因为队列需要在表尾插入数据,每次找表尾,都需要遍历链表,非常麻烦,所以我们在创建一个尾指针指向表为,这里可以创建一个结构体,来同时包含表头指针phead和表尾指针ptail:

这里加了一个size变量,用来统计个数

2.队列的初始化

初始化很简单,那么就是表头指针phead和表尾指针ptail首先都是空,并且size在初始时候为0:

3.队列的销毁

销毁要相对麻烦一点,因为这是一个单链表,所以我们需要创建一个指针遍历链表,逐一销毁:

4.队列的插入

要插入节点,首先需要malloc一个新节点,随后进行判断,如果在初始情况,那么还没有节点,这个时候的phead和ptail就都指向新节点;如果链表中已经有了节点,那只需要尾插到后面,记得size要++:

5.队列的删除

删除同样要判断,如果只有一个节点,那么删完,phead和ptail就都要置为NULL,如果不为空,那么就要指定新的头结点,记得size要--:

6.统计队列的数据个数

统计个数就是统计size:

7.判断队列是否为空

size如果是0,那就是空:

8.返回队列表头数据

那就返回头指针指向的val:

9.返回队列表尾数据

那就返回尾指针指向的val:

10.运行展示

我们假设插入1,2,3,4:

运行如下:

三、代码

test.c:


#include"Queue.h"int main()
{Queue q;QueueInit(&q);QueuePush(&q, 1);QueuePush(&q, 2);QueuePush(&q, 3);QueuePush(&q, 4);while (!QueueEmpty(&q)){printf("%d ", QueueFront(&q));QueuePop(&q);}printf("\n");QueueDestroy(&q);return 0;
}

Queue.h:

#pragma once
#pragma once#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
#include<stdbool.h>
typedef int QDataType;
typedef struct QueueNode
{struct QueueNode* next;QDataType val;
}QNode;typedef struct Queue
{QNode* phead;QNode* ptail;int size;
}Queue;void QueueInit(Queue* pq);//初始化
void QueueDestroy(Queue* pq);//销毁
void QueuePush(Queue* pq, QDataType x);//队列的插入
void QueuePop(Queue* pq);//队列的删除int QueueSize(Queue* pq);//统计队列的数据个数QDataType QueueFront(Queue* pq);//返回队列表头数据
QDataType QueueBack(Queue* pq);//返回队列表尾数据
bool QueueEmpty(Queue* pq);//判断队列是否为空

Queue.c:

#include "Queue.h"void QueueInit(Queue* pq)
{assert(pq);//判断是否为空pq->phead = NULL;//初始化指向NULLpq->ptail = NULL;//初始化指向NULLpq->size = 0;//初始的时候,值为0
}
void QueuePush(Queue* pq, QDataType x)
{QNode* newnode = (QNode*)malloc(sizeof(QNode));//创建一个新节点if (newnode == NULL)//判断是否创建成功{perror("malloc fail");return;}newnode->next = NULL;//新节点的next指针为NULLnewnode->val = x;//它的值为给的xif (pq->ptail == NULL)//判断是否为初始情况{pq->phead = pq->ptail = newnode;}else//不是初始情况,链表中已经有节点{pq->ptail->next = newnode;//直接尾插pq->ptail = newnode;//成为新的尾}pq->size++;//个数加一
}void QueuePop(Queue* pq)
{assert(pq);assert(pq->size != 0);if (pq->phead->next==NULL)//是否链表中只有一个节点{free(pq->phead);pq->phead = pq->ptail = NULL;//都为NULL}else//链表中不止一个节点{QNode* tmp = pq->phead->next;//临时变量存放新的头结点free(pq->phead);pq->phead = tmp;}pq->size--;//删除节点,size要减少1
}int QueueSize(Queue* pq)
{assert(pq);return pq->size;
}
QDataType QueueFront(Queue* pq)
{assert(pq);assert(pq->phead);return pq->phead->val;
}
QDataType QueueBack(Queue* pq)
{assert(pq);assert(pq->ptail);return pq->ptail->val;
}
bool QueueEmpty(Queue* pq)
{assert(pq);return pq->size == 0;
}
void QueueDestroy(Queue* pq)
{assert(pq);//判断是否为空QNode* cur = pq->phead;//创建一个额外指针指向头结点while (cur)//遍历链表{QNode* next = cur->next;//临时变量存放新的头结点free(cur);//原本头结点要被销毁掉cur = next;}pq->phead = pq->ptail = NULL;//全部节点销毁完,都置于空,防止成为野指针pq->size = 0;//size也变成0
}


文章转载自:

http://t047XhqE.Lbxhy.cn
http://fTdbcPZa.Lbxhy.cn
http://hFhSz4h7.Lbxhy.cn
http://aCO0X0wd.Lbxhy.cn
http://QWXfDURl.Lbxhy.cn
http://6VH2yLzq.Lbxhy.cn
http://zgt84FaG.Lbxhy.cn
http://XZ2WBSeE.Lbxhy.cn
http://Pqm4pHs1.Lbxhy.cn
http://By9by3xg.Lbxhy.cn
http://39losIWP.Lbxhy.cn
http://UO7o4RPW.Lbxhy.cn
http://XQSIWrP3.Lbxhy.cn
http://r22nd85l.Lbxhy.cn
http://C8m5BzMn.Lbxhy.cn
http://uKTxmU9Z.Lbxhy.cn
http://LhucKaq1.Lbxhy.cn
http://Sn2EDvkr.Lbxhy.cn
http://aG99sc6T.Lbxhy.cn
http://mHySujCZ.Lbxhy.cn
http://hS9pwDi0.Lbxhy.cn
http://kBrTQYm1.Lbxhy.cn
http://AizXk7wi.Lbxhy.cn
http://AFXxoHTJ.Lbxhy.cn
http://EblEXoym.Lbxhy.cn
http://wSp3mqe3.Lbxhy.cn
http://H4HgzsWW.Lbxhy.cn
http://Q7atN8EX.Lbxhy.cn
http://lGK2TVyD.Lbxhy.cn
http://UbLYKxbJ.Lbxhy.cn
http://www.dtcms.com/wzjs/770823.html

相关文章:

  • 郑州做网站公司电话建设旅游业网站目的
  • 高端的网站名称事件营销的案例
  • 海口网站建设运营关键词优化心得
  • 百度可以建网站吗网站开发人员 生活
  • 广州 网站制作公司 网络服务承德信息港
  • 广州网站制作公司联系方式运维工程师培训
  • 网站建设销售业绩任务做网站前期预算
  • 上海网站建设空间杭州建设厅特种作业证
  • 东莞网站建设设wordpress注册不上
  • 电子商城网站建设方案河南最新新闻事件今天
  • 网站建设实质兰州网络推广范文
  • 天河建网站公司六安先锋网
  • 广东建设职业技术学院官方网站电脑传奇网站
  • 辽宁做网站和优化哪家好dedecms做网站注意事项
  • 海南省建设厅网站首页怎么做应用
  • 垂直网站建设的关键因素wordpress 4.5.9 漏洞
  • 中英文网站英文商务酒店网站建设
  • 西安企业网站开发官方网站下载微信最新版
  • 网站用户黏度仿 手机 网站模板html
  • 网站如何建立快捷方式企业品牌类网站
  • 如何撤销网站上信息客户管理软件免费版
  • 福州金山网站建设高明公司搜索seo
  • 郑州网站建设tpywlkj文创产品设计是什么意思
  • 网站后台需要多少网站建设公司推广方式
  • 网站运维合同广州低价网站建设
  • 网站在线优化哈尔滨seo
  • 中山网站制作系统美食网站建设毕业设计
  • 网站建设中网站需求分析的理解宁波seo网站服务
  • 多个网站做计划c2c平台名称
  • 如何建设网站 企业崂山区城乡建设局网站