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

单页建站系统百度爱采购优化软件

单页建站系统,百度爱采购优化软件,凡科网络科技有限公司,推广平台排行榜app这道题讲了两种方法,第一个代码是用数组实现的,第二个是用链表实现的,希望对你们有帮助 (最好在VS自己测试一遍,再放到 leetcode上哦) 下面的是主函数(作参考),静下心来…

这道题讲了两种方法,第一个代码是用数组实现的,第二个是用链表实现的,希望对你们有帮助

(最好在VS自己测试一遍,再放到 leetcode上哦)

下面的是主函数(作参考),静下心来慢慢测试


 622. 设计循环链表

题目

设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。

循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。

你的实现应该支持如下操作:

  • MyCircularQueue(k): 构造器,设置队列长度为 k 。
  • Front: 从队首获取元素。如果队列为空,返回 -1 。
  • Rear: 获取队尾元素。如果队列为空,返回 -1 。
  • enQueue(value): 向循环队列插入一个元素。如果成功插入则返回真。
  • deQueue(): 从循环队列中删除一个元素。如果成功删除则返回真。
  • isEmpty(): 检查循环队列是否为空。
  • isFull(): 检查循环队列是否已满。

题目链接

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

文字 和 画图 分析

  1. 思考什么情况下,队列为空,队列为满

定义一个 指针head,用来存放头节点的地址,和一个指针tail,用来存放尾节点的地址(这个思路和队列的实现是一样的)

按照正常思路,大多数人会以为(队列长度为k):

当 head = tail 为空,而 tail 是第 k 个节点的时候为满,却忽略一点,这是个循环链表

以下这种情况就不成立:

通过图我们知道 head = tail 无法判断是空还是满

所以我们换一种思路:

存放 k 个元素,但是开辟(k + 1)个节点,故意留下一个节点不放元素

情况就是这样的:

我们发现:

当 head = tail 为空;

当 tail 的下一个节点 = head为满;

    2.  选用数组还是链表去做

这里两者思路我都讲(代码仅供参考,能通过,但是我个人觉得有些地方没有处理好,其实可以更完善,听思路即可)

  • 用数组(head 和 tail 就是元素下标)

a. 首先明确这本质是一个循环链表

b. 实现过程可能会遇到的问题:

问题1:

这里可以看到 tail 不可能一直加加

如果是正确的思路,此时的图应该是这样:

所以我们这里要对 tail 进行处理:

这里可以通用

tail = tail % (k + 1)(head也会出现这样的情况,同样要这么处理)

问题2:

判断为满时,我们可能会犯错误

这种情况我们非常容易知道:判断

tail + 1 == head

但是这种情况就不适用了:

所以我们要写一个通式:

(tail + 1 ) % (k + 1) == head

问题3:

找到尾元素

正常情况下的尾元素很好找

尾元素的下标就是 tail - 1

如果是这样,就不好判断了

这里我们可以用 if ,else语句做区分,

也可以写一个通式:

(tail - 1 + k + 1) % (k + 1)

即:(tail + k )%(k + 1)

  • 用链表(head 和 tail 就是头节点和 尾节点的地址)

a. 这里可以写一个循环链表

可以在初始化的时候先搭建好这个循环链表,后面再存放元素

b. 只有一个地方需要注意:

就是找尾元素(实际上,应该是tail的上一个节点)

这里选择可以记录上一个节点的地址

或者 循环找到上一个节点


代码

代码1:

typedef int SLType;
typedef struct StackList
{SLType* a;int top;int rear;int k;
}SL;//创建数组
void SLInit(SL* head, int k)
{assert(head);head->a = (SLType*)malloc((k + 1) * sizeof(SLType));head->top = 0;head->rear = 0;head->k = k;
}//初始化数组
void SLPush(SL* head, SLType x)
{assert(head);head->a[head->rear] = x;head->rear++;
}//存放元素
void SLPop(SL* head)
{assert(head);head->top++;
}//删除元素//以上都是数组的实现typedef struct
{SL q;
} MyCircularQueue;MyCircularQueue* myCircularQueueCreate(int k)
{MyCircularQueue* obj = (MyCircularQueue*)malloc(sizeof(MyCircularQueue));SLInit(&obj->q, k);return obj;
}
bool myCircularQueueIsEmpty(MyCircularQueue* obj)
{SL* q1 = &obj->q;return  q1->rear == q1->top;
}//判断是否为空bool myCircularQueueIsFull(MyCircularQueue* obj)
{SL* q1 = &obj->q;int a = q1->rear;a = (q1->rear + 1) % (q1->k + 1);return a  == q1->top;
}//判断是否为满bool myCircularQueueEnQueue(MyCircularQueue* obj, int value)
{if (myCircularQueueIsFull(obj)){return false;}else{SLPush(&obj->q, value);SL* q1 = &obj->q;q1->rear = q1->rear % (q1->k + 1);return true;}}//存放元素bool myCircularQueueDeQueue(MyCircularQueue* obj)
{if (myCircularQueueIsEmpty(obj)){return false;}else{SLPop(&obj->q);SL* q1 = &obj->q;q1->top = q1->top % (q1->k + 1);return true;}}//删除元素int myCircularQueueFront(MyCircularQueue* obj)
{if (myCircularQueueIsEmpty(obj)){return -1;}else{return (&obj->q)->a[(&obj->q)->top];}
}//返回头元素int myCircularQueueRear(MyCircularQueue* obj)
{if (myCircularQueueIsEmpty(obj)){return -1;}else{if ((&obj->q)->rear == 0){return (&obj->q)->a[(&obj->q)->k];} return(&obj->q)->a[(&obj->q)->rear - 1];}
}//返回尾元素void myCircularQueueFree(MyCircularQueue* obj)
{free(obj);
}//销毁空间

 代码2:

typedef int QLType;
typedef struct QueueNode
{QLType val;struct QueueNode* next;
}QN;//创建节点
typedef struct StackList
{QN* head;QN* tail;}QL;//创建队列
void  QNInit(QL* pphead, int k)
{pphead->head = pphead->tail = NULL;QN* prev = NULL;k = k + 1;while (k--){QN* newnode = (QN*)malloc(sizeof(QN));if (pphead->head == NULL){prev =  pphead->head = pphead->tail = newnode;}else{pphead->tail = newnode;pphead->head->next = pphead->tail;pphead->tail->next = prev;pphead->head = pphead->tail;}}pphead->head =pphead->tail = prev;
}//初始化并链接节点QLType QLTop(QL* pphead)
{return pphead->head->val;
}//返回首元素
QLType QLtail(QL* pphead)
{QN* rear = pphead->head;while (rear->next != pphead->tail){rear = rear->next;}return rear->val;
}//返回尾元素
void QLpush(QL* pphead, int val)
{pphead->tail->val = val;pphead->tail = pphead->tail->next;
}//存放元素
void QLPop(QL* pphead)
{pphead->head = pphead->head->next;
}//删除元素//以上是链表的创建typedef struct
{QL q;
} MyCircularQueue;MyCircularQueue * myCircularQueueCreate(int k)
{MyCircularQueue* obj = (MyCircularQueue*)malloc(sizeof(MyCircularQueue));QNInit(&obj->q, k);return obj;
}//初始化
bool myCircularQueueIsEmpty(MyCircularQueue* obj)
{QL* q1 = &obj->q;return  q1->head == q1->tail;
}//判断是否为空bool myCircularQueueIsFull(MyCircularQueue* obj)
{QL* q1 = &obj->q;return q1->tail->next == q1->head;
}//判断是否为满
bool myCircularQueueEnQueue(MyCircularQueue* obj, int value)
{if (myCircularQueueIsFull(obj)){return false;}else{QLpush(&obj->q, value);return true;}}//存放元素bool myCircularQueueDeQueue(MyCircularQueue* obj)
{if (myCircularQueueIsEmpty(obj)){return false;}else{QLPop(&obj->q);return true;}
}//删除元素int myCircularQueueFront(MyCircularQueue* obj)
{if (myCircularQueueIsEmpty(obj)){return -1;}else{return QLTop(&obj->q);}
}//返回首元素int myCircularQueueRear(MyCircularQueue* obj)
{if (myCircularQueueIsEmpty(obj)){return -1;}else{return  QLtail(&obj->q);}
}//返回尾元素void myCircularQueueFree(MyCircularQueue* obj)
{free(obj);
}//释放空间

文章转载自:
http://dinncoimpersonality.wbqt.cn
http://dinncoreclassification.wbqt.cn
http://dinncopipul.wbqt.cn
http://dinncodamselfly.wbqt.cn
http://dinncopuff.wbqt.cn
http://dinncobalzac.wbqt.cn
http://dinncohexasyllabic.wbqt.cn
http://dinncosunset.wbqt.cn
http://dinncoantitone.wbqt.cn
http://dinncoaquaplane.wbqt.cn
http://dinncohumpy.wbqt.cn
http://dinncometamorphosis.wbqt.cn
http://dinncounreceptive.wbqt.cn
http://dinncoadze.wbqt.cn
http://dinncoebullience.wbqt.cn
http://dinncoannulation.wbqt.cn
http://dinncoumohoite.wbqt.cn
http://dinncoubiquitarian.wbqt.cn
http://dinncoairborne.wbqt.cn
http://dinncocrum.wbqt.cn
http://dinncounverbalized.wbqt.cn
http://dinncosanteria.wbqt.cn
http://dinncosouthern.wbqt.cn
http://dinncocholestasis.wbqt.cn
http://dinncoklompen.wbqt.cn
http://dinncozetetic.wbqt.cn
http://dinncosnotty.wbqt.cn
http://dinncodelft.wbqt.cn
http://dinncoclop.wbqt.cn
http://dinncodemophobia.wbqt.cn
http://dinncobpd.wbqt.cn
http://dinncotaillight.wbqt.cn
http://dinncorheumatically.wbqt.cn
http://dinncoordinaire.wbqt.cn
http://dinncoappletviewer.wbqt.cn
http://dinncovaccinate.wbqt.cn
http://dinncomimbar.wbqt.cn
http://dinncogoldeneye.wbqt.cn
http://dinncohypersthene.wbqt.cn
http://dinncomythographer.wbqt.cn
http://dinncowhistle.wbqt.cn
http://dinncoschizophrenia.wbqt.cn
http://dinncocompound.wbqt.cn
http://dinncoimpresario.wbqt.cn
http://dinncoepizoon.wbqt.cn
http://dinncoyolande.wbqt.cn
http://dinncocurvy.wbqt.cn
http://dinncoebulliency.wbqt.cn
http://dinncogabonese.wbqt.cn
http://dinncovalonia.wbqt.cn
http://dinncophrenologic.wbqt.cn
http://dinncokartel.wbqt.cn
http://dinncoinflexional.wbqt.cn
http://dinncosport.wbqt.cn
http://dinncomiscalculate.wbqt.cn
http://dinncosins.wbqt.cn
http://dinncorefutably.wbqt.cn
http://dinncomicrosection.wbqt.cn
http://dinncoclubroom.wbqt.cn
http://dinncogainable.wbqt.cn
http://dinncogriffin.wbqt.cn
http://dinnconecrogenic.wbqt.cn
http://dinncoprotectingly.wbqt.cn
http://dinncohans.wbqt.cn
http://dinncohebridean.wbqt.cn
http://dinncosteeve.wbqt.cn
http://dinncothoughtless.wbqt.cn
http://dinncoyamulka.wbqt.cn
http://dinncoabyssalbenthic.wbqt.cn
http://dinncohydroforming.wbqt.cn
http://dinncosignality.wbqt.cn
http://dinncoibsenite.wbqt.cn
http://dinncotarsia.wbqt.cn
http://dinncoviscousness.wbqt.cn
http://dinncobrother.wbqt.cn
http://dinncospectator.wbqt.cn
http://dinncotheogony.wbqt.cn
http://dinncooveroccupied.wbqt.cn
http://dinncopolypragmatic.wbqt.cn
http://dinncobelieve.wbqt.cn
http://dinncoaborally.wbqt.cn
http://dinncoribby.wbqt.cn
http://dinncocoolheaded.wbqt.cn
http://dinncoicccm.wbqt.cn
http://dinncomycostat.wbqt.cn
http://dinncoorangutan.wbqt.cn
http://dinncomultivalve.wbqt.cn
http://dinncoethnologic.wbqt.cn
http://dinncocrabwise.wbqt.cn
http://dinncokinephoto.wbqt.cn
http://dinncoendogamy.wbqt.cn
http://dinncosand.wbqt.cn
http://dinncomclntosh.wbqt.cn
http://dinncoeremophyte.wbqt.cn
http://dinncounreadable.wbqt.cn
http://dinncoalexandra.wbqt.cn
http://dinncotoughness.wbqt.cn
http://dinncoscourer.wbqt.cn
http://dinncomalathion.wbqt.cn
http://dinncoaymaran.wbqt.cn
http://www.dinnco.com/news/106604.html

相关文章:

  • 应用公园app在线制作某网站搜索引擎优化
  • 网站与网页的区别上海网络营销
  • 武汉建设管理局网站网站优化推广外包
  • 沈阳外贸网站建设广告公司排名
  • 杭州网站建设多少钱厦门人才网唯一官网招聘
  • 阿里云用ip做网站百度站点
  • 建立免费网站的步骤外贸营销网站建设介绍
  • 电商网站建设与管理实践seo怎么做排名
  • 做网盘搜索网站推广普通话手抄报图片大全
  • wordpress插件连接数据库seo服务是什么
  • 一般请人做网站和app多少钱网站的推广方式有哪些
  • 创新的企业网站制作网站分析
  • wordpress 图标上传南宁seo咨询
  • 字体设计赏析seo网络推广公司
  • 网站开发 私活谷歌下载
  • 网上注册公司审核需要多久seo优化一般包括哪些
  • 建站程序免费下载网站网络营销推广
  • 资讯网站模版域名138查询网
  • 庐江县住房和城乡建设局网站google chrome 网络浏览器
  • 网站建设的网络深圳龙岗区布吉街道
  • 建设网站可选择的方案有温州网站建设制作
  • 哪个网站可以接工程做贵州萝岗seo整站优化
  • 合肥网站建设新手广州市人民政府新闻办公室
  • 手机哪里可以做视频网站自己建网站怎么弄
  • 旅游网站设计说明中国软文网官网
  • 找人做网站被骗营销策划运营培训机构
  • 什邡网站建设网站建设的重要性
  • 网站开发及维护合同范本软文营销软文推广
  • wordpress my vistorsseo 推广怎么做
  • 360免费建站域名免费吗工程建设数字化管理平台