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

建个人网站怎么赚钱吗线上推广方案怎么做

建个人网站怎么赚钱吗,线上推广方案怎么做,秦皇岛网站建设报价,大型网站制作队列 --- Queue前言一、整体结构二、相关方法1.初始化2.销毁3.入队 - - - 队尾插插入数据4.出队 - - - 队头删除数据5.获取队头 / 队尾元素6.判空7.获取队列有效元素个数前言 队列是一种特殊的线性表,其特性是先进先出,只能在队尾入数据,在队…

队列 --- Queue

  • 前言
  • 一、整体结构
  • 二、相关方法
    • 1.初始化
    • 2.销毁
    • 3.入队 - - - 队尾插插入数据
    • 4.出队 - - - 队头删除数据
    • 5.获取队头 / 队尾元素
    • 6.判空
    • 7.获取队列有效元素个数

前言

队列是一种特殊的线性表,其特性是先进先出,只能在队尾入数据,在队头出数据,本次实现使用链表结构实现队列,对比数组实现有下列优点:
在这里插入图片描述

尽管现在来看两者的时间复杂度是差不多的,但是对于链表来说,我们只需要再定义一个尾节点来表示队尾即可将入队操作的时间复杂度优化为O(1),而数组的出队操作是无法优化时间复杂度的,所以综上所述本次实现选择链表结构实现队列。故而逻辑结构上是线性的,物理结构上不一定是线性的
本次实现使用C语言实现

一、整体结构

本次实现队列底层结构是链表,所以说有一个节点结构类型,并且队列操作数据只有队头和队尾位置可以操作,所以将其抽离出来,这就是队列的结构。

节点的结构:

typedef int QDataType;
// 队列的节点结构
typedef struct QueueNode
{QDataType data;          // 数据域struct QueueNode* next;  // 指针域
}QueueNode;

队列的结构:

// 队列的结构
typedef struct Queue
{QueueNode* phead;     // 队头QueueNode* ptail;     // 队尾// int size;          // 有效数据个数
}Queue;

二、相关方法

1.初始化

初始化即将队列phead和ptail置为空即可。

// 初始化
void QueueInit(Queue* pq)
{// pq不能为空assert(pq);// 初始化成空pq->phead = pq->ptail = NULL;// pq->size = 0;
}

创建一个空队列q1并初始化它,
监视窗口演示:
在这里插入图片描述

2.销毁

常见的标记销毁位置起始的节点,并记录此位置的下一个节点,之后循环销毁节点,完成后将phead和ptail置为NULL。

// 销毁
void QueueDestroy(Queue* pq)
{assert(pq);// 标记队头QueueNode* pcur = pq->phead;// 销毁节点while (pcur){// 记录pcur的下一个节点QueueNode* pnext = pcur->next;free(pcur);pcur = pnext;}// 销毁完成后phead和ptail置为NULLpq->phead = pq->ptail = NULL;// pq->size =0;
}

3.入队 - - - 队尾插插入数据

入队两步骤:
1)申请新节点,动态开辟(malloc)一个节点大小的内存空间,更新数据域为入队元素x,再将指针域置为NULL。
2)判断队列是否有元素,若有元素则直接在队尾ptail后面插入数据,并更新队尾指针指向;若没有元素,则新插入的节点newnode既是队头phead也是队尾ptail。

// 入队 --- 队尾入
void QueuePush(Queue* pq, QDataType x)
{assert(pq);// 申请新节点QueueNode* newnode = (QueueNode*)malloc(sizeof(QueueNode));if (newnode == NULL){perror("malloc");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++;
}

向初始化完成后的队列q1入队三个数据:10,20,30
监视窗口演示:
在这里插入图片描述

4.出队 - - - 队头删除数据

出队两步骤:
1)判断队列是否是非空状态,只有有元素才可以出队。
2)判断队列的节点个数,当只有一个节点时,销毁此节点并将phead和ptail置为NULL;当有多个节点时,也是销毁此节点,并更新队头指针。

// 出队 --- 队头出
void QueuePop(Queue* pq)
{// 队列非空才可以出队assert(!QueueEmpty(pq));// 当队列只有一个节点if (pq->phead == pq->ptail){free(pq->phead);pq->phead = pq->ptail = NULL;}// 当队列有多个节点时else{// 标记队头的下一个节点QueueNode* pnext = pq->phead->next;free(pq->phead);// 移动队头至下一个节点pq->phead = pnext;}//pq->size--;
}

向入队完成后的队列q1出队前两个数据:10,20
监视窗口演示:
在这里插入图片描述

5.获取队头 / 队尾元素

获取两者的元素各自访问队头队尾指针的数据域即可,前提是队列非空。

获取队头元素:

// 获取队头元素
QDataType QueueFront(Queue* pq)
{// 队列非空才可以获取assert(!QueueEmpty(pq));return pq->phead->data;
}

获取队尾元素:

// 获取队尾元素
QDataType QueueBack(Queue* pq)
{// 队列非空才可以获取assert(!QueueEmpty(pq));return pq->ptail->data;
}

6.判空

队列为空的条件是队头指针或者队尾指针等于NULL。

// 判空
bool QueueEmpty(Queue* pq)
{assert(pq);return pq->phead == NULL;
}

7.获取队列有效元素个数

有两种方法:
1)遍历队列,定义一个计数器size,每访问一个节点计数器加一。
2)在队列属性里多增加一个size属性,直接返回size即可,增加这一个属性之后,初始化,入队,出队,销毁这种需要改变size大小的方法也需要对size进行操作。

// 获取队列有效元素个数
int Queuesize(Queue* pq)
{// 方法一:遍历,统计// 适用于非频繁访问有效数据个数的场景 : O(N)// 标记队头QueueNode* pcur = pq->phead;int size = 0;while (pcur){size++;pcur = pcur->next;}return size;// 方法二:给队列增加一个size属性// 适用于频繁访问有效数据个数的场景 :O(1)//return pq->size;
}
http://www.dtcms.com/wzjs/346473.html

相关文章:

  • godaddy如何创建网站网站建站方式有哪些
  • 常州公司网站模板建站软文客
  • 大连网站建设培训班陕西网络推广公司
  • 苏州网站建设公司电话媒介星软文平台
  • 软文写作平台怎样进行seo
  • c2b做的好的网站网络服务中心
  • 旅行网站首页模板关键词优化软件哪家好
  • 做gif动图的网站犯法吗上海免费关键词排名优化
  • 福建省建设执业注册与管理中心网站seo和sem是什么意思啊
  • 网站开发建设企业网上的推广
  • 房地产做网站不外包seo公司
  • 怎么做网站 知乎百度官方网页
  • 设计页面导航seo内部优化方案
  • 阿里妈妈个人网站怎么做的知名网页设计公司
  • 重庆医院网站建设seo流量的提升的软件
  • 沧州市网站建设seo综合排名优化
  • wordpress 订阅者外贸谷歌seo
  • 游戏开发难还是网站开发难怎么做seo网站关键词优化
  • 做游戏出租的网站好郑州seo地址
  • 空气净化器用什么网站做外贸网络关键词优化软件
  • 微博营销案例搜索引擎营销就是seo
  • 网站建设项目申请ppt长沙百度快照优化排名
  • php网站设计人员武汉整站优化
  • ppt 做的最好的网站关键词排名怎么查
  • 网站嵌入百度地图市场调研方法有哪几种
  • 自己做的网站 打开了没有图片天津seo排名效果好
  • 卧龙区微网站开发东莞推广公司
  • 可视化软件开发工具优化营商环境工作总结
  • 乌兰察布做网站百度优化插件
  • 东大桥做网站的公司湖南竞价优化专业公司