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

怎样在手机做自己的网站6地推网app推广平台

怎样在手机做自己的网站6,地推网app推广平台,商品促销活动策划方案,网站制作公司 知道万维科技一、队列是什么 队列是一种可以实现“先进先出”的存储结构。 队列通常可以分为两种类型: 一、顺序队列,采用顺序存储,当长度确定时使用。 顺序队列又有两种情况: ①使用数组存储队列的称为静态顺序队列。 ②使用动态分配的指针的…

一、队列是什么

队列是一种可以实现“先进先出”的存储结构。

队列通常可以分为两种类型:

一、顺序队列,采用顺序存储,当长度确定时使用。 顺序队列又有两种情况:

  ①使用数组存储队列的称为静态顺序队列。

  ②使用动态分配的指针的称为动态顺序队列。

二、链式队列,采用链式存储,长度不确定时使用(由链表实现)。

由于链式队列跟链表差不多,所以在这里只针对循环(环形)队列来说明并实践。
循环队列的两个参数:
  ①front,front指向队列的第一个元素。(front==head)
  ②rear,rear指向队列的最后一个有效元素的下一元素。(rear==tail)


队列的两个基本操作:出队和入队。

 

二、队列的结构

下面是一个循环队列(基于数组实现)的结构图:

    

 

三、队列的操作

入队(尾部入队) 
  ①将值存入rear所代表的位置。
  ②rear = (rear+1)%数组的长度。
出队(头部出队) 
  front = (front+1)%数组的长度。
队列是否为空   
  front和rear的值相等,则该队列就一定为空。
队列是否已满

在循环队列中,“队满”和“队空”的条件有可能是相同的,都是front ==rear,这种情况下,无法区别是“队满”还是“队空”。

针对这个问题,有3种可能的处理方法: 【这里采用了第3种处理方法】

(1)另设一个标志以区别是“队满”还是“队空”。(即入队/出队前检查是否“队满”/“队空”)

(2)设一个计数器,此时甚至还可以省去一个指针。

(3)少用一个元素空间,即约定队头指针在队尾指针的下一位置时就作为“队满”的标志,即“队满”条件为:(pQueue->rear+1)%MAX_SIZE == pQueue->front。

 

 

四、队列的一些问题以及解决办法

 

 

 

从上图可以看出,随着入队、出队的进行,会使整个队列整体向后移动,就会出现上图中的现象:队尾指针已经移到了最后,即队尾出现溢出,无法再进行入队操作,然而实际上,此时队列中还有空闲空间,这种现象称为“假溢出”。

解决“假溢出”的三种办法:

  • 方法一:每次删除队头元素后,把整个队列向前移动一个位置,这样可保证队头元素在存储空间的最前面。但每次删除元素时,都要把表中所有元素向前移动,效率太低。
  • 方法二:当队尾指针出现溢出时,判断队头指针位置,如果前部有空闲空间,则把当前队列整体前移到最前方。这种方法移动元素的次数大为减少。
  • 方法三:将队列看成头尾相接的循环结构,当队尾指针到队尾后,再从队头开始向后指,这样就不需要移动队列元素了,显然,第三种方法最经济、应用最多,这种顺序队列被称为“循环队列”或“环形队列”。

采用了这种头尾相接的循环队列后,入队的队尾指针加1操作及出队的队头指针加1操作必须做相应的修改,以确保下标范围为0~Max_Size-1。对指针进行取模运算,就能使指针到达最大下标位置后回到0,符合“循环”队列的特点。

因此入队时队尾指针加1操作改为: pQueue->tail = (pQueue->tail+1) % MAX_SIZE;

入队时队尾指针加1操作改为: pQueue->head = (pQueue->head+1) % MAX_SIZE;

 

五、动态顺序队列的实现

基于数组的动态顺序循环队列的具体实现:

5.1  MyQueue.h

#ifndef MYQUEUEC_H
#define MYQUEUEC_H#include <stdio.h>
#include <malloc.h>/* 队列: 只允许在表的一端(队尾rear)进行插入操作,而在另一端(队头front)进行删除操作的线性表* 插入操作简称为入队  删除操作简称为出队   队列具有先进先出的特点*//*=====队列的入队、出队示意图========**  出队 ----------------- 入队*   <--- a1,a2,a3,...,an <---*      -----------------**================================*/typedef enum
{OK=0, //正确ERROR=1,   //出错TRUE=2,  //为真FALSE=3   //为假
}status;typedef int ElemType;   //宏定义队列的数据类型
#define MAX_SIZE 20/*一、使用数组存储队列的称为静态顺序队列*二、使用动态分配的指针的称为动态顺序队列*/
// 【这里的是动态顺序队列】
typedef struct
{ElemType *pBase;    //数组指针ElemType front;      //队头索引ElemType rear;       //队尾索引int maxSize;    //当前分配的最大容量
}queue;//创建空队列 queueCapacity-队列容量
status initQueue(queue *PQueue,int queueCapacity);
//销毁队列
void destroyQueue(queue *PQueue);
//清空队列
void clearQueue(queue *PQueue);
//判断队列是否为空
status isEmpityQueue(queue *PQueue);
//判断队列是否为满
status isFullQueue(queue *PQueue);
//获得队列长度
int getQueueLen(queue *PQueue);
//新元素入队 [先进先出原则:在队尾的位置插入] element-要插入元素
status enQueue(queue *PQueue,ElemType element);
//新元素出队,同时保存出队的元素 [先进先出原则:在队头的位置删除]
status deQueue(queue *PQueue,ElemType *pElement);
//遍历队列
void queueTraverse(queue *PQueue);#endif // MYQUEUEC_H

 

5.2  MyQueue.c

#include "myqueuec.h"/* 队列: 只允许在表的一端(队尾rear)进行插入操作,而在另一端(队头front)进行删除操作的线性表* 插入操作简称为入队  删除操作简称为出队   队列具有先进先出的特点*//*=====队列的入队、出队示意图========**  出队 ----------------- 入队*   <--- a1,a2,a3,...,an <---*      -----------------**================================*///创建队列 queueCapacity-队列容量
status initQueue(queue *PQueue,int queueCapacity)
{//给数组指针分配内存PQueue->pBase = (ElemType *)malloc(sizeof(ElemType)*queueCapacity);if(!PQueue->pBase){printf("给数组指针分配内存失败\n");return ERROR;}PQueue->front = 0; //最开始创建时,队头索引为0PQueue->rear = 0; //最开始创建时,队尾索引为0PQueue->maxSize = queueCapacity;return OK;
}//销毁队列
void destroyQueue(queue *PQueue)
{free(PQueue);  //释放队列数组指针指向的内存PQueue = NULL;    //队列数组指针重新指向NULL,避免成为野指针
}//清空队列
void clearQueue(queue *PQueue)
{PQueue->front = 0; //队头索引清0PQueue->rear = 0; //队尾索引清0
}//判断队列是否为空
status isEmpityQueue(queue *PQueue)
{if( PQueue->front == PQueue->rear )  //队头==队尾,说明为空return TRUE;return FALSE;
}/**在循环队列中,“队满”和“队空”的条件有可能是相同的,都是front==rear,*这种情况下,无法区别是“队满”还是“队空”。*针对这个问题,有3种可能的处理方法:*(1)另设一个标志以区别是“队满”还是“队空”。(即入队/出队前检查是否“队满”/“队空”)*(2)设一个计数器,此时甚至还可以省去一个指针。*(3)少用一个元素空间,即约定队头指针在队尾指针的下一位置时就作为“队满”的标志,*即“队满”条件为:(PQueue->rear+1)%MAX_SIZE == PQueue->front。*  【这里采用了第3种处理方法】*/
//判断队列是否为满
status isFullQueue(queue *PQueue)
{if( (PQueue->rear+1)%PQueue->maxSize == PQueue->front )  //队列满return TRUE;return FALSE;
}//获得队列长度
int getQueueLen(queue *PQueue)
{//正常情况下,队列长度为队尾队头指针之差,但如果首尾指针跨容量最大值时,要%return (PQueue->rear - PQueue->front + PQueue->maxSize)%PQueue->maxSize;
}//新元素入队 [先进先出原则:在队尾的位置插入] element-要插入元素
status enQueue(queue *PQueue,ElemType element)
{if(isFullQueue(PQueue)==TRUE){printf("队列已满,不能再插入元素了!\n");return FALSE;}//向队列中添加新元素PQueue->pBase[PQueue->rear] = element;PQueue->rear = (PQueue->rear+1) % PQueue->maxSize; //将rear赋予新的合适的值return TRUE;
}//新元素出队,同时保存出队的元素 [先进先出原则:在队头的位置删除]
status deQueue(queue *PQueue,ElemType *pElement)
{//如果队列为空,则返回falseif(isEmpityQueue(PQueue)==TRUE){printf("队列为空,出队失败!\n");return FALSE;}*pElement = PQueue->pBase[PQueue->front];       //先进先出PQueue->front = (PQueue->front+1) % PQueue->maxSize; //移到下一位置return TRUE;
}//遍历队列
void queueTraverse(queue *PQueue)
{int i = PQueue->front;           //从头开始遍历printf("遍历队列:\n");while(i != PQueue->rear)     //如果没有到达rear位置,就循环
    {printf("%d  ", PQueue->pBase[i]);i = (i+1) % PQueue->maxSize;              //移到下一位置
    }printf("\n");
}

 

5.3  main.c

#include <stdio.h>
#include "myqueuec.h"int main(void)
{int value;          //用于保存出队的元素//创建队列对象queue *PQueue = (queue *)malloc(sizeof(queue));if(!PQueue->pBase){printf("给队列对象分配内存失败\n");return -1;}//调用初始化队列的函数
    initQueue(PQueue,MAX_SIZE);//调用出队函数enQueue(PQueue, 1);enQueue(PQueue, 2);enQueue(PQueue, 3);enQueue(PQueue, 4);enQueue(PQueue, 5);enQueue(PQueue, 6);enQueue(PQueue, 7);enQueue(PQueue, 8);//调用遍历队列的函数
    queueTraverse(PQueue);//调用出队函数if(deQueue(PQueue, &value)){printf("出队一次,元素为:%d\n", value);}queueTraverse(PQueue);if(deQueue(PQueue, &value)){printf("出队一次,元素为:%d\n", value);}queueTraverse(PQueue);free(PQueue);PQueue = NULL;getchar();return 0;
}

 

转载于:https://www.cnblogs.com/linuxAndMcu/p/7735444.html

http://www.lbrq.cn/news/2423215.html

相关文章:

  • 你是网站设计有限公司的项目经理长沙seo排名公司
  • 临淄哪里做网站百度指数搜索热度大学
  • 网站规划和建设的基本步骤seo效果最好的是
  • 做网站开发需要学那些东西ebay欧洲站网址
  • 外国的html 素材网站semir
  • 广告投放网站泰州seo平台
  • 如何通过网站做网上报名系统360识图
  • 如何评价一个网站设计的好坏网络营销软件排行
  • 工会网站建设管理工作总结爱站工具网
  • 商丘网站建设aliapp杭州seo全网营销
  • 网站建设应用后台系统优化软件
  • 一个专门做澳洲直邮的网站搜索引擎优化包括
  • 推广b2c网站丽水网站seo
  • 九江学网站建设最佳磁力搜索引擎
  • 云南营销型网站建设干净无广告的搜索引擎
  • 郑州网站建设zzmshl绍兴seo
  • wordpress建站模板百度app 浏览器
  • 网站的访问量统计怎么做国外seo工具
  • 珠海网站建设维护互联网搜索引擎有哪些
  • 做网站的公司属于什么行业百度关键词搜索推广
  • 云南旅行社网站开发举出最新的网络营销的案例
  • 核动力网站建设百度搜索竞价
  • 校园网站建设与实现毕业论文百青藤广告联盟
  • 常州网站建设公司服务seo百度首页排名业务
  • wordpress图片一排seo技术学院
  • 网站外链建设与维护品牌运营中心
  • 沈阳网站建设 网络服务水果网络营销策划方案
  • 大学网站建设公司网站建设山东聚搜网络
  • 苏州做网站公司乛 苏州聚尚网络网址大全2345
  • 温州手机网站制作联系电话网站开发的流程
  • React-useEffect的闭包陷阱(stale closure)
  • 图片转 PDF三个免费方法总结
  • CFD总压边界条件的理解与开发处理
  • 2025年终端安全管理系统的全方位解析,桌面管理软件的分析
  • (苍穹外卖)暑假学习理解P2
  • 让黑窗口变彩色:C++控制台颜色修改指南