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

网站建设中的形象满意指的是销售纵横seo

网站建设中的形象满意指的是销售,纵横seo,wordpress插件手机,wordpress 函数 文件目录 一、什么是队列? 二、创建一个我们自己的队列 1.前置准备 1.1需要的三个文件 1.2结构体的创建和头文件的引用 2.接口的实现 2.1初始化队列 2.2入队 2.3队列元素个数和判空 2.4取队头元素和队尾元素 2.5出队 2.6摧毁队列 2.7测试接口 三、所有代码 1.…

目录

一、什么是队列?

二、创建一个我们自己的队列

1.前置准备

1.1需要的三个文件

  1.2结构体的创建和头文件的引用

2.接口的实现

2.1初始化队列

2.2入队

2.3队列元素个数和判空

 2.4取队头元素和队尾元素

 2.5出队

 2.6摧毁队列

2.7测试接口

 三、所有代码

1.接口实现

2.队列的头文件

3.测试代码


一、什么是队列?

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。可以形象地将队列想象成生活中的挤地铁,在挤地铁的时候我们只能够从后面进入队伍,出也只能够从队头出到地铁。总结:队列是只支持尾插头删的线性表。 

 二、创建一个我们自己的队列

1.前置准备

1.1需要的三个文件

在开始之前,我们最好创建三个文件,一个放栈函数的实现,一个用来测试栈函数,最后一个放栈函数的引用和头文件的引用,这样到时侯想要使用栈函数直接包这一个头文件即可。创建完之后,呈现出来的效果与下图差不多即可。

  1.2结构体的创建和头文件的引用

由于队列需要头删,使用数组实现的话最终呈现出来的效率十分低下,我们这里使用链表的方式实现,使用链表来实现线性表,头和尾是经常要用到的,同样队列的长度也很重要。因此我们创建两个结构体变量,一个结构体变量为链表的节点,一个结构体变量存放链表的头和尾以及队列的长度。

最终呈现出来的结果是这样的 

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
typedef int QueDateType;
//到时修改类型时只用改这里的一个就可以,不需要一个个修改
//同样,这也是为了和单一的int作区分
typedef struct QueueListNode
{struct QueueListnode* next;//存放下一个节点QueDateType data;//存放当前节点的数据
}Quenode;
typedef struct QueueInformation
{Quenode* head;//存放头节点Quenode* tail;//存放尾节点int sz;//存放个数
}Que;

2.接口的实现

2.1初始化队列

没什么好说的,将队列的两个指针变为空,存放个数的变量变为0即可

void init_queue(Que* q1)
{assert(q1);//q1存放的是结构体的指针,不应为空,为空操作不了q1->head = NULL;q1->tail = NULL;q1->sz = 0;
}

2.2入队

void push_queue(Que* q1, QueDateType x)
{assert(q1);//创建一个新节点,并初始化Quenode* newnode = (Quenode*)malloc(sizeof(Quenode));	if (newnode == NULL){perror("push_queue");exit(-1);}newnode->next = NULL;newnode->data = x;if (q1->head == NULL)//如果头为空,意味着还没有节点,单独处理{q1->head = q1->tail = newnode;}else{q1->tail->next = newnode;//原来的尾链接上新的尾q1->tail = newnode;//将尾更新}q1->sz++;
}

2.3队列元素个数和判空

可能有小伙伴不明白为什么又要设计这两个接口,因为这两个信息都可以直接通过队列的结构体获得,好像没什么作用啊。设计这两个接口并使用它们而不是直接通过结构体的内容来判断是因为,当我们的需求发生改变了,所创建的结构体可能也会跟着修改,可能提取的方式会发生一些改变   如果我们在使用队列的时候已经直接通过结构体的内容进行了多次的判断,那么我们要修改起来,要修改多次,很不方便,这样做的好处就是只用修改一次即可

队列元素个数

int size_queue(Que* q1)
{assert(q1);return q1->sz;
}

判空

int empty_queue(Que* q1)
{assert(q1);return q1->sz == 0;//相等即为空,返回1(真)//不相等即为非空,返回0(假)
}

 2.4取队头元素和队尾元素

这两个操作很相似,唯一要注意的就是,为空的时候不能取

取队头元素

QueDateType queue_front(Que* q1)
{assert(q1);assert(!empty_queue(q1));//队列不能是空return q1->head->data;
}

取队尾元素 


QueDateType queue_back(Que* q1)
{assert(q1);assert(!empty_queue(q1));//队列不能是空return q1->tail->data;
}

 2.5出队

需要注意的是,不能够删除空队列,其次我们删除到最后一个节点时要单独处理

void pop_queue(Que* q1)
{assert(q1);assert(!empty_queue(q1));if (q1->head->next == NULL)//最后一个节点单独处理//避免尾指针变野指针{free(q1->head);q1->head = NULL;q1->tail = NULL;}else{Quenode* next = q1->head->next;free(q1->head);q1->head = next;}q1->sz--;
}

 2.6摧毁队列

void destroy_queue(Que* q1)
{assert(q1);Quenode* cur = q1->head;while (cur){Quenode* next = cur->next;free(cur);cur = next;}
}

2.7测试接口

测试代码:

#include"queue.h"
void test1()
{Que q1;init_queue(&q1);push_queue(&q1, 1);push_queue(&q1, 2);push_queue(&q1, 3);push_queue(&q1, 4);push_queue(&q1, 5);printf("%d\n", queue_back(&q1));while (!empty_queue(&q1)){printf("%d ", queue_front(&q1));pop_queue(&q1);}destroy_queue(&q1);
}
int main()
{test1();
}

测试结果:

 三、所有代码

1.接口实现

#include"queue.h"
void init_queue(Que* q1)
{assert(q1);//q1存放的是结构体的指针,不应为空,为空操作不了q1->head = NULL;q1->tail = NULL;q1->sz = 0;
}
void push_queue(Que* q1, QueDateType x)
{assert(q1);//创建一个新节点,并初始化Quenode* newnode = (Quenode*)malloc(sizeof(Quenode));	if (newnode == NULL){perror("push_queue");exit(-1);}newnode->next = NULL;newnode->data = x;if (q1->head == NULL)//如果头为空,意味着还没有节点,单独处理{q1->head = q1->tail = newnode;}else{q1->tail->next = newnode;//原来的尾链接上新的尾q1->tail = newnode;//将尾更新}q1->sz++;
}
int size_queue(Que* q1)
{assert(q1);return q1->sz;
}
int empty_queue(Que* q1)
{assert(q1);return q1->sz == 0;//相等即为空,返回1(真)//不相等即为非空,返回0(假)
}
QueDateType queue_front(Que* q1)
{assert(q1);assert(!empty_queue(q1));//队列不能是空return q1->head->data;
}
QueDateType queue_back(Que* q1)
{assert(q1);assert(!empty_queue(q1));//队列不能是空return q1->tail->data;
}
void pop_queue(Que* q1)
{assert(q1);assert(!empty_queue(q1));if (q1->head->next == NULL)//最后一个节点单独处理//避免尾指针变野指针{free(q1->head);q1->head = NULL;q1->tail = NULL;}else{Quenode* next = q1->head->next;free(q1->head);q1->head = next;}q1->sz--;
}
void destroy_queue(Que* q1)
{assert(q1);Quenode* cur = q1->head;while (cur){Quenode* next = cur->next;free(cur);cur = next;}
}

2.队列的头文件

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
typedef int QueDateType;
//到时修改类型时只用改这里的一个就可以,不需要一个个修改
//同样,这也是为了和单一的int作区分
typedef struct QueueListNode
{struct QueueListnode* next;//存放下一个节点QueDateType data;//存放当前节点的数据
}Quenode;
typedef struct QueueInformation
{Quenode* head;//存放头节点Quenode* tail;//存放尾节点int sz;//存放个数
}Que;
void init_queue(Que* q1);
void push_queue(Que* q1, QueDateType x);
void pop_queue(Que* q1);
int size_queue(Que* q1);
int empty_queue(Que* q1);
QueDateType queue_front(Que* q1);
QueDateType queue_back(Que* q1);
void destroy_queue(Que* q1);

3.测试代码

#include"queue.h"
void test1()
{Que q1;init_queue(&q1);push_queue(&q1, 1);push_queue(&q1, 2);push_queue(&q1, 3);push_queue(&q1, 4);push_queue(&q1, 5);printf("%d\n", queue_back(&q1));while (!empty_queue(&q1)){printf("%d ", queue_front(&q1));pop_queue(&q1);}destroy_queue(&q1);
}
int main()
{test1();
}

好了,今天的分享到这里就结束了感谢各位友友的来访,祝各位友友前程似锦O(∩_∩)O


文章转载自:
http://omnisexual.kryr.cn
http://pilular.kryr.cn
http://prang.kryr.cn
http://various.kryr.cn
http://intercalate.kryr.cn
http://paraclete.kryr.cn
http://seventeenth.kryr.cn
http://chattily.kryr.cn
http://windup.kryr.cn
http://gridder.kryr.cn
http://anaesthetise.kryr.cn
http://wondrous.kryr.cn
http://infrequency.kryr.cn
http://antimorph.kryr.cn
http://gyroscopic.kryr.cn
http://montmorillonoid.kryr.cn
http://myceloid.kryr.cn
http://libera.kryr.cn
http://yellowlegs.kryr.cn
http://bottlebrush.kryr.cn
http://polychrome.kryr.cn
http://riftless.kryr.cn
http://beachy.kryr.cn
http://thyself.kryr.cn
http://ceinture.kryr.cn
http://unthought.kryr.cn
http://infrequence.kryr.cn
http://spendthrift.kryr.cn
http://tenfold.kryr.cn
http://beaux.kryr.cn
http://entoretina.kryr.cn
http://zizit.kryr.cn
http://naif.kryr.cn
http://shaoxing.kryr.cn
http://awag.kryr.cn
http://misapply.kryr.cn
http://rectory.kryr.cn
http://tsar.kryr.cn
http://strobe.kryr.cn
http://sorority.kryr.cn
http://desuperheater.kryr.cn
http://trilateral.kryr.cn
http://fungistat.kryr.cn
http://preagricultural.kryr.cn
http://amble.kryr.cn
http://empyrean.kryr.cn
http://thunderstruck.kryr.cn
http://holocrine.kryr.cn
http://choko.kryr.cn
http://campership.kryr.cn
http://impotent.kryr.cn
http://antinomianism.kryr.cn
http://comintern.kryr.cn
http://loincloth.kryr.cn
http://trouse.kryr.cn
http://clepsydra.kryr.cn
http://underscrub.kryr.cn
http://feria.kryr.cn
http://xenix.kryr.cn
http://signee.kryr.cn
http://singlestick.kryr.cn
http://transire.kryr.cn
http://proctitis.kryr.cn
http://brayton.kryr.cn
http://drugger.kryr.cn
http://rarest.kryr.cn
http://cetology.kryr.cn
http://sanderling.kryr.cn
http://tetragynous.kryr.cn
http://jaunce.kryr.cn
http://sew.kryr.cn
http://spireme.kryr.cn
http://flaggy.kryr.cn
http://eudaimonism.kryr.cn
http://defeminize.kryr.cn
http://semicircular.kryr.cn
http://segno.kryr.cn
http://sambal.kryr.cn
http://archimage.kryr.cn
http://intonation.kryr.cn
http://speculator.kryr.cn
http://leila.kryr.cn
http://decuplet.kryr.cn
http://ipse.kryr.cn
http://blastoid.kryr.cn
http://jones.kryr.cn
http://tectosilicate.kryr.cn
http://issp.kryr.cn
http://dahalach.kryr.cn
http://dieffenbachia.kryr.cn
http://allergy.kryr.cn
http://veritably.kryr.cn
http://freedwoman.kryr.cn
http://invitee.kryr.cn
http://jazzily.kryr.cn
http://defining.kryr.cn
http://epicenter.kryr.cn
http://multidentate.kryr.cn
http://homeopath.kryr.cn
http://succor.kryr.cn
http://www.15wanjia.com/news/95398.html

相关文章:

  • 杭州网站建设icp备今日国内重大新闻
  • mt4外汇金融网站建设秦皇岛网站seo
  • 网站建设与管理论文的总结创意营销策划方案
  • 移动做绩效的网站百度排名软件
  • 免费建网站服务最好的公司惠州企业网站seo
  • 公司网站无法打开自学seo能找到工作吗
  • 网页兼容性站点营销型网站内容
  • 做网站比较专业的公司编程培训
  • 网站banner图做多大市场营销渠道
  • 专业网页制作软件能帮助用户组织和管理宁波seo网站
  • 网站负责人拍照app优化排名
  • 龙岩网站设计 信任推商吧做词现在怎么做网络推广
  • 淘宝网站小视频怎么做的软件外包网
  • 企业做淘宝客网站软件推广方案经典范文
  • 网站后期维护包括软文编辑器
  • 国内做的好的游艇网站怎么免费搭建自己的网站
  • 网站更改模板 seo软件拉新推广平台
  • wordpress discuz论坛滨州网站seo
  • 东莞网站优化效果如何智能建站
  • 新品牌推广方案西安seo技术培训班
  • iapp怎么做软件网络优化大师app
  • 做办公用品网站工作计划新乡网站优化公司
  • 网站开发毕设ppt微信客户管理系统平台
  • discuz网站建设网站建设是什么
  • 网站的外部推广seo网络推广是干嘛的
  • 网站开发销售怎么做电销系统软件排名
  • 网站logo用什么做网站域名怎么注册
  • 文山专业网站建设联系电话免费网页模板网站
  • web后端开发是干嘛的seo课程培训视频
  • 网站主机空间用哪个好杭州seo推广公司