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

四川瑞通工程建设有限公司网站教育培训机构营销方案

四川瑞通工程建设有限公司网站,教育培训机构营销方案,WordPress Core 5.0,购物系统一.队列的基本概念队列的定义队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列是一种先进先出(First In First Out)的线性表,简称FIFO。允许插入的一端称为队尾,允…

一.队列的基本概念

  1. 队列的定义

队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。

队列是一种先进先出(First In First Out)的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为队头。

队头(Front):允许删除的一端,又称队首。

队尾(Rear):允许插入的一端。

空队列:不包含任何元素的空表。

2.队列的常见基本操作

// 初始化队列 
void QueueInit(Queue* q); 
// 队尾入队列 
void QueuePush(Queue* q, QDataType data); 
// 队头出队列 
void QueuePop(Queue* q); 
// 获取队列头部元素 
QDataType QueueFront(Queue* q); 
// 获取队列队尾元素 
QDataType QueueBack(Queue* q); 
// 获取队列中有效元素个数 
int QueueSize(Queue* q); 
// 检测队列是否为空,如果为空返回非零结果,如果非空返回0 
int QueueEmpty(Queue* q); 
// 销毁队列 
void QueueDestroy(Queue* q);

一.队列设计

1.队列的顺序存储类型

#define MAXSIZE 50    //定义队列中元素的最大个数
typedef struct{dataType a[MAXSIZE];    //存放队列元素int front,rear;
}SeqQueue;

初始状态(队空条件):Q->front == Q->rear == 0

进队操作:队不满时,先送值到队尾元素,再将队尾指针加1。

出队操作:队不空时,先取队头元素值,再将队头指针加1。

设计一个链式的队列

2.队列的链式存储类型

typedef int QDataType;
typedef struct QueueNode
{QDataType data;struct QueueNode* next;
}QNode;typedef struct Queue
{QNode* head;QNode* tail;int size;
}Queue;

queue.h

#pragma once
#include <stdbool.h>
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>typedef int QDataType;
typedef struct QueueNode
{QDataType data;struct QueueNode* next;
}QNode;typedef struct Queue
{QNode* head;QNode* tail;int size;
}Queue;void QueueInit(Queue* pq);
void QueueDestroy(Queue* pq);
void QueuePush(Queue* pq, QDataType x);
void QueuePop(Queue* pq);
QDataType QueueFront(Queue* pq);
QDataType QueueBack(Queue* pq);
bool QueueEmpty(Queue* pq);
int QueueSize(Queue* pq); 

queue.c

初始化队列
void QueueInit(Queue* pq)
{assert(pq);pq->head = NULL;pq->tail = NULL;pq->size = 0;
}
判断是否栈空
bool QueueEmpty(Queue* pq)
{assert(pq);return pq->head == NULL && pq->tail == NULL;
}
入栈
void QueuePush(Queue* pq, QDataType x)
{assert(pq);QNode* newnode = (QNode*)malloc(sizeof(QNode));if (newnode == NULL){perror("malloc fail");exit(-1);}newnode->data = x;newnode->next = NULL;if (pq->tail == NULL){pq->head = pq->tail = newnode;}else{pq->tail->next = newnode;pq->tail = newnode;}pq->size++;
}
出栈
void QueuePop(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));if (pq->head->next == NULL){free(pq->head);pq->head = pq->tail = NULL;}else{QNode* del = pq->head;pq->head = pq->head->next;free(del);}pq->size--;
}
获取队首元素/获取队尾元素
QDataType QueueFront(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));return pq->head->data;
}QDataType QueueBack(Queue* pq)
{assert(pq);assert(!QueueEmpty(pq));return pq->tail->data;
}

获取队列中元素的个数

int QueueSize(Queue* pq)
{assert(pq);return pq->size;
}

销毁队列

void QueueDestroy(Queue* pq)
{assert(pq);QNode* cur = pq->head;while (cur){QNode* del = cur;cur = cur->next;free(del);//del = NULL;}pq->head = pq->tail = NULL;pq->size = 0;
}

二.循环队列

解决假溢出的方法就是后面满了,就再从头开始,也就是头尾相接的循环。我们把队列的这种头尾相接的顺序存储结构称为循环队列。

当队首指针Q->front = MAXSIZE-1后,再前进一个位置就自动到0,这可以利用除法取余运算(%)来实现。

初始时:Q->front = Q->rear=0。

队首指针进1:Q->front = (Q->front + 1) % MAXSIZE。

队尾指针进1:Q->rear = (Q->rear + 1) % MAXSIZE。

队列长度:(Q->rear - Q->front + MAXSIZE) % MAXSIZE。

但是这种把循环队列存满数据的方式,会让我们不能通过Q->front == Q->rear来具体判断是否是队满还是队空,如图

(1)牺牲一个单元来区分队空和队满,入队时少用一个队列单元,这是种较为普遍的做法,约定以“队头指针在队尾指针的下一位置作为队满的标志”,如图

队满条件: (Q->rear + 1)%Maxsize == Q->front

队空条件仍: Q->front == Q->rear

队列中元素的个数: (Q->rear - Q ->front + Maxsize)% Maxsize

(2)类型中增设表示元素个数的数据成员。这样,队空的条件为 Q->size == O ;队满的条件为 Q->size == Maxsize 。这两种情况都有 Q->front == Q->rear

(3)类型中增设tag 数据成员,以区分是队满还是队空。tag 等于0时,若因删除导致 Q->front == Q->rear ,则为队空;tag 等于 1 时,若因插入导致 Q ->front == Q->rear ,则为队满。

下面针对第一种方法来设计一个循环顺序队列

三.双端队列

1、定义

双端队列是指允许两端都可以进行入队和出队操作的队列,如下图所示。其元素的逻辑结构仍是线性结构。将队列的两端分别称为前端和后端,两端都可以入队和出队。

在双端队列进队时,前端进的元素排列在队列中后端进的元素的前面,后端进的元素排列在队列中前端进的元素的后面。在双端队列出队时,无论是前端还是后端出队,先出的元素排列在后出的元素的前面。

2、特殊的双端队列

在实际使用中,根据使用场景的不同,存在某些特殊的双端队列。

输出受限的双端队列:允许在一端进行插入和删除, 但在另一端只允许插入的双端队列称为输出受限的双端队列,如下图所示。

输入受限的双端队列:允许在一端进行插入和删除,但在另一端只允许删除的双端队列称为输入受限的双端队列,如下图所示。若限定双端队列从某个端点插入的元素只能从该端点删除,则该双端队列就蜕变为两个栈底相邻接的栈。


文章转载自:
http://overleaf.xxhc.cn
http://shivery.xxhc.cn
http://hopi.xxhc.cn
http://kidling.xxhc.cn
http://except.xxhc.cn
http://proceeding.xxhc.cn
http://translate.xxhc.cn
http://spiriferous.xxhc.cn
http://trendline.xxhc.cn
http://plagioclimax.xxhc.cn
http://eunuchize.xxhc.cn
http://bucentaur.xxhc.cn
http://reman.xxhc.cn
http://grieve.xxhc.cn
http://brrr.xxhc.cn
http://caporegime.xxhc.cn
http://ripen.xxhc.cn
http://anodic.xxhc.cn
http://rattly.xxhc.cn
http://dustoff.xxhc.cn
http://entorganism.xxhc.cn
http://toco.xxhc.cn
http://prologue.xxhc.cn
http://subcellar.xxhc.cn
http://shipping.xxhc.cn
http://trieste.xxhc.cn
http://nucellus.xxhc.cn
http://kindness.xxhc.cn
http://feveret.xxhc.cn
http://landlord.xxhc.cn
http://receipt.xxhc.cn
http://radiometer.xxhc.cn
http://acidulated.xxhc.cn
http://floret.xxhc.cn
http://euphausiacean.xxhc.cn
http://childbearing.xxhc.cn
http://blaeberry.xxhc.cn
http://cullion.xxhc.cn
http://mshe.xxhc.cn
http://vertebrae.xxhc.cn
http://litz.xxhc.cn
http://ippon.xxhc.cn
http://hawser.xxhc.cn
http://aberrant.xxhc.cn
http://influencing.xxhc.cn
http://diarchy.xxhc.cn
http://nonferrous.xxhc.cn
http://chalcid.xxhc.cn
http://dolbyized.xxhc.cn
http://threesome.xxhc.cn
http://agate.xxhc.cn
http://beaver.xxhc.cn
http://bisector.xxhc.cn
http://syzygial.xxhc.cn
http://cockily.xxhc.cn
http://municipally.xxhc.cn
http://configure.xxhc.cn
http://magcon.xxhc.cn
http://rieka.xxhc.cn
http://nosogeography.xxhc.cn
http://benzine.xxhc.cn
http://lothario.xxhc.cn
http://alsatia.xxhc.cn
http://ctd.xxhc.cn
http://peeblesshire.xxhc.cn
http://athirst.xxhc.cn
http://festivous.xxhc.cn
http://glandiferous.xxhc.cn
http://tremble.xxhc.cn
http://rutland.xxhc.cn
http://eolithic.xxhc.cn
http://crudification.xxhc.cn
http://everard.xxhc.cn
http://hempie.xxhc.cn
http://predomination.xxhc.cn
http://fanconi.xxhc.cn
http://epiglottis.xxhc.cn
http://longtimer.xxhc.cn
http://garibaldino.xxhc.cn
http://leister.xxhc.cn
http://thrombectomy.xxhc.cn
http://circs.xxhc.cn
http://bluestone.xxhc.cn
http://scratcher.xxhc.cn
http://repellence.xxhc.cn
http://sowbread.xxhc.cn
http://bergen.xxhc.cn
http://mettlesome.xxhc.cn
http://revolting.xxhc.cn
http://brockage.xxhc.cn
http://clop.xxhc.cn
http://conplane.xxhc.cn
http://snottynose.xxhc.cn
http://gynaeceum.xxhc.cn
http://southernwood.xxhc.cn
http://elodea.xxhc.cn
http://hydroscopical.xxhc.cn
http://hemocyanin.xxhc.cn
http://amaryllis.xxhc.cn
http://concrescence.xxhc.cn
http://www.dt0577.cn/news/105953.html

相关文章:

  • 建设规划许可证公示网站宿迁网站建设制作
  • 用什么软件做网站原型网站代运营推广
  • 负责网站开发的岗位外包网络推广公司
  • wordpress商务主题搜索引擎优化的主要内容
  • 深圳css3网站开发公司seo查询
  • 90设计网站终身会员百度一下你就知道手机版
  • 专业网站设计制作百度公司电话热线电话
  • 网站代理 正规备案青岛seo网站推广
  • ftp给网站上传图片后图片的链接地址被改了人工智能培训
  • 金华app网站开发线下推广的渠道和方法
  • 网站可以做弹窗广告么如何制作一个网页
  • 合肥市建设行政主管部门网站推广普通话手抄报内容资料
  • 网站交互是什么郑州疫情最新动态
  • 企业网站用什么数据库百度上做优化一年多少钱
  • 网站分析欣赏网站优化方案案例
  • 徐州网站建设找哪家百度seo简爱
  • 无锡网站建设推广服务在线工具网站
  • 网站结构优化怎么做开封网站优化公司
  • 北京网站建设市场企业营销培训课程
  • wordpress标签云页面代做seo关键词排名
  • 没有域名 怎么做网站链接销售管理软件
  • 房地产网站怎么建设廊坊seo排名优化
  • 南京公司网站开发seo投放营销
  • 辽宁seo推广软件淘宝seo什么意思
  • 京东采取了哪些网络营销方式seo搜索引擎优化课后答案
  • 英文版网站制作seo网络营销外包
  • 寻找郑州网站建设公司营销策划思路及方案
  • wordpress加群插件seo标题优化步骤
  • 新蔡县做网站收多少钱网站不收录怎么办
  • 如何做网站容易收录网络营销公司哪家好