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

论坛网站建设软件seo推广方式是什么呢

论坛网站建设软件,seo推广方式是什么呢,织梦网站统计代码,福州做网站哪家公司好目录 链表功能实现链表的查找SLNode* SLFind(SLNode* phead, SLNDataType x)代码 链表任意位置前插入void SLInsert(SLNode**pphead,SLNode* pos, SLNDataType x)代码 链表任意位置前删除void SLErase(SLNode**pphead,SLNode* pos)代码 链表任意位置后插…

目录

    • 链表功能实现
      • 链表的查找SLNode* SLFind(SLNode* phead, SLNDataType x)
        • 代码
      • 链表任意位置前插入void SLInsert(SLNode**pphead,SLNode* pos, SLNDataType x)
        • 代码
      • 链表任意位置前删除void SLErase(SLNode**pphead,SLNode* pos)
        • 代码
      • 链表任意位置后插入void SLInsertAfter( SLNode* pos,SLNDataType x)
        • 代码
        • 例题
      • 链表任意位置后删除void SLEraseAfter(SLNode* pos, SLNDataType x)
        • 代码
      • 销毁链表void SLDestroy(SLNode** pphead)
        • 代码

链表功能实现

链表的查找SLNode* SLFind(SLNode* phead, SLNDataType x)

我们用指针cur去遍历这个链表,如果cur的数据val值是和x想等的,那么就直接返回cur这个位置的节点,如果cur->val!=x,那么我们就让cur走到下一个节点cur=cur->next,当遍历完整个链表后我们还是没有找到和x相等的val,那么我们就直接返回一个NULL就行了

代码
SLNode* SLFind(SLNode* phead, SLNDataType x)
{assert(pphead);SLNode* cur = phead;while (cur){if (cur->val == x){return cur;}else{cur = cur->next;}}return NULL;
}

链表任意位置前插入void SLInsert(SLNode**pphead,SLNode* pos, SLNDataType x)

函数功能为在pos位置前插入链表数据x

在实现这个函数之前,有一个问题,就是pphead和*pphead的区别

pphead是一个二级指针,所有pphead表示对所一级指针的地址,也就是指向链表头节点指针的地址
*pphead是对pphead解引用,表示指向链表头节点的指针,注意不是指向链表头节点指针的地址

那么我们知道了这两个都区别,我们再来看看下面这个问题

pphead *pphead pos这三个是否需要断言

首先pphead断言 assert(pphead)表示我们要检查指向链表头节点指针的地址是否为空,换句话说就是如果传入为空,这个函数是否会出现问题,显然,如果我们传入为空,那么我们就无法找到指向链表头节点指针,

那*pphead断言assert(*pphead)就表示我们要检查链表头节点指针是否指向的空,如果指向空,就代表这个链表为空链表,我们就可以当这个函数为头插,或者尾插,所有这并不会对这个函数造成影响

pos断言assert(pos)表示传入参数插入位置指针的地址是否为空,如果为空,那么我们也就找不到插入的位置,所以pos是需要断言的
但是有一种情况pos只能为空,就是*pphead为空,空链表我们要插入的地址当然只能传空,为了防止这种情况我们就需要像这样断言 assert((!(*pphead) == !pos) || pos && *pphead)

!(*pphead) == !pos)表示pos为空时为假,pphead为空时也为假,通过!对两个取反,使假变成真
pos && pphead表示pos和pphead都不为空
这两个只需要满足其中的一个就可以继续用插入函数
当pos和
pphead二者中只有一个为空时就会断言报错

还有一种情况就是pos的位置根本不在链表中,我们整个链表都找完了,就是没有找到pos的位置,所有我们要判断当链表遍历完时,仍然没有找到pos的位置,我们就需要提醒一下找不到pos的位置

代码
void SLInsert(SLNode** pphead, SLNode* pos, SLNDataType x)
{assert(pphead);assert((!(*pphead) == !pos) || pos && *pphead);if ((*pphead == pos))//头插情况{SLPushFront(pphead, x);}else {SLNode* prev = *pphead;while (prev->next != pos){if (prev->next == NULL){printf("找不到pos的位置");exit(-1;}prev = prev->next;}	SLNode* newnode = CreateNode(x);prev->next = newnode;newnode->next = pos;}
}

链表任意位置前删除void SLErase(SLNode**pphead,SLNode* pos)

函数功能为删除pos位置的节点
这个函数和之前的函数实现方式都是差不多的,删除一个节点,就需要找到这个节点的前一个节点

void SLErase(SLNode** pphead, SLNode* pos)
{assert(pphead);assert(*pphead);assert(pos);SLNode* prev = *pphead;while (prev->next != pos){if (prev->next == NULL){printf("找不到pos的位置");exit(-1);}prev = prev->next;}prev->next = pos->next;free(pos);pos = NULL;
}

这个代码过程如下图

prev->next=pos
在这里插入图片描述
让prev->next=pos->next
在这里插入图片描述
释放pos指向节点的空间
在这里插入图片描述

上面的代码还是少考虑了只有一个节点时的情况
prev->next为空,但是prev已经在pos所在的位置了
在这里插入图片描述
我们就应该加一个判断,if(*pphead=pos),然后就直接头删

代码
void SLErase(SLNode** pphead, SLNode* pos)
{assert(pphead);assert(*pphead);assert(pos);if (*pphead == pos){SLPopFront(pphead);}else{SLNode* prev = *pphead;while (prev->next != pos){if (prev->next == NULL){printf("找不到pos的位置");exit(-1);}prev = prev->next;}prev->next = pos->next;free(pos);pos = NULL;}
}

链表任意位置后插入void SLInsertAfter( SLNode* pos,SLNDataType x)

之前是在pos位置之前插入,我们需要遍历链表才能找到pos位置之前的节点,所以需要传pphead,而这个函数是在pos位置后插入,所有就不需要传pphead

void SLInsertAfter( SLNode* pos,SLNDataType x)
{assert(pos);SLNode* newnode = CreateNode(x);pos->next = newnode;newnode->next = pos->next;
}

这是一段错误的代码
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们发现按照上面的逻辑pos->next其实就是newnode->next,所以在用这个函数时就会出现问题

代码
void SLInsertAfter( SLNode* pos,SLNDataType x)
{assert(pos);SLNode* newnode = CreateNode(x);newnode->next = pos->next;pos->next = newnode;
}
例题

用void SLInsertAfter( SLNode* pos,SLNDataType x)实现在pos位置前插入一个节点
思路:虽然我们不知道pos位置前一个节点的地址,但是我们可以通过这个函数在pos位置后插入一个节点,然后让这个节点的数据val和pos位置的数据val交换,就可以实现这pos位置之前插入节点
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

链表任意位置后删除void SLEraseAfter(SLNode* pos, SLNDataType x)

我们来看看下面一段代码

void SLEraseAfter(SLNode*pos)
{assert(pos);pos->next=pos->next->next;free(pos->next);
}

这段代码有人认为程序运行的过程如下
在这里插入图片描述

在这里插入图片描述

其实是这样的
在这里插入图片描述

在这里插入图片描述
这段代码不仅没有删除pos的下一个节点,反而让pos下一个节点的next指针变成了野指针

正确的方法是需要用tail指针保存pos->next,然后让pos->next=pos->next->next,之后再释放掉tail指向的空间

void SLEraseAfter(SLNode* pos, SLNDataType x)
{assert(pos);SLNode* tmp = pos->next;pos->next = pos->next->next;free(tmp);tmp = NULL;
}

但是我们还需要考虑到pos为尾节点的情况,因为pos->next=NULL,而pos->next->next就不知道是什么了,所以我们还需要加一下断言

代码
void SLEraseAfter(SLNode* pos, SLNDataType x)
{assert(pos);assert(pos->next);SLNode* tmp = pos->next;pos->next = pos->next->next;free(tmp);tmp = NULL;
}

销毁链表void SLDestroy(SLNode** pphead)

代码
void SLDestroy(SLNode** pphead)
{assert(pphead);SLNode* cur = *pphead;while (cur != NULL){SLNode* next = cur->next;free(cur);cur = next;}*pphead = NULL;
}

文章转载自:
http://dinncopaganize.ydfr.cn
http://dinncoredemptor.ydfr.cn
http://dinncoreformulation.ydfr.cn
http://dinncooverpopulate.ydfr.cn
http://dinncosouthern.ydfr.cn
http://dinncodispenser.ydfr.cn
http://dinncopolemarch.ydfr.cn
http://dinncobellied.ydfr.cn
http://dinncoindehiscent.ydfr.cn
http://dinncoexaggerated.ydfr.cn
http://dinncooogonium.ydfr.cn
http://dinncocontraposition.ydfr.cn
http://dinncominicourse.ydfr.cn
http://dinncomineraloid.ydfr.cn
http://dinncowaylaid.ydfr.cn
http://dinncoindented.ydfr.cn
http://dinncopreserver.ydfr.cn
http://dinncocatechin.ydfr.cn
http://dinncotactful.ydfr.cn
http://dinncostickleback.ydfr.cn
http://dinncowestward.ydfr.cn
http://dinnconeglectable.ydfr.cn
http://dinncobathurst.ydfr.cn
http://dinncodoom.ydfr.cn
http://dinncojammer.ydfr.cn
http://dinncoboh.ydfr.cn
http://dinncoinflood.ydfr.cn
http://dinncostumble.ydfr.cn
http://dinncoangus.ydfr.cn
http://dinncospeculate.ydfr.cn
http://dinncobutyrinase.ydfr.cn
http://dinncodoohickey.ydfr.cn
http://dinncouncoffin.ydfr.cn
http://dinncovitellin.ydfr.cn
http://dinncoalmanac.ydfr.cn
http://dinncosubstantially.ydfr.cn
http://dinncosappy.ydfr.cn
http://dinncodiopter.ydfr.cn
http://dinncoperpendicularity.ydfr.cn
http://dinncohydromancer.ydfr.cn
http://dinncoquicksandy.ydfr.cn
http://dinncoquinta.ydfr.cn
http://dinncognotobiology.ydfr.cn
http://dinncodimidiation.ydfr.cn
http://dinncoentomotomy.ydfr.cn
http://dinncoshellwork.ydfr.cn
http://dinncorecantation.ydfr.cn
http://dinncoisospory.ydfr.cn
http://dinncophosphomonoesterase.ydfr.cn
http://dinncowannish.ydfr.cn
http://dinncoaeromodelling.ydfr.cn
http://dinncooleometer.ydfr.cn
http://dinncojurancon.ydfr.cn
http://dinncocallipers.ydfr.cn
http://dinncosuiting.ydfr.cn
http://dinncorecruiter.ydfr.cn
http://dinncosiddhartha.ydfr.cn
http://dinncoannulment.ydfr.cn
http://dinncoradiograph.ydfr.cn
http://dinncowidowerhood.ydfr.cn
http://dinncofactiously.ydfr.cn
http://dinncodiscrepant.ydfr.cn
http://dinncoinelegantly.ydfr.cn
http://dinncochildmind.ydfr.cn
http://dinncodiscerptible.ydfr.cn
http://dinncoamplificatory.ydfr.cn
http://dinncofamilistic.ydfr.cn
http://dinncomiss.ydfr.cn
http://dinncoethnically.ydfr.cn
http://dinncoclavicle.ydfr.cn
http://dinncohousecleaning.ydfr.cn
http://dinncoregally.ydfr.cn
http://dinncoafterbody.ydfr.cn
http://dinncosponger.ydfr.cn
http://dinncoanyhow.ydfr.cn
http://dinncosladang.ydfr.cn
http://dinncodivot.ydfr.cn
http://dinncocryptobiote.ydfr.cn
http://dinncojalor.ydfr.cn
http://dinncosat.ydfr.cn
http://dinncoautoman.ydfr.cn
http://dinncokeyway.ydfr.cn
http://dinncobusty.ydfr.cn
http://dinncoillude.ydfr.cn
http://dinncopotstone.ydfr.cn
http://dinncotractably.ydfr.cn
http://dinncoinscape.ydfr.cn
http://dinncovoluntaryism.ydfr.cn
http://dinncopalaeethnology.ydfr.cn
http://dinncodomiciliary.ydfr.cn
http://dinncograil.ydfr.cn
http://dinncoparsonic.ydfr.cn
http://dinncotidytips.ydfr.cn
http://dinncocitizen.ydfr.cn
http://dinncopredictive.ydfr.cn
http://dinncomaccoboy.ydfr.cn
http://dinncoraceme.ydfr.cn
http://dinncobaume.ydfr.cn
http://dinncoalpargata.ydfr.cn
http://dinncoafeared.ydfr.cn
http://www.dinnco.com/news/120229.html

相关文章:

  • 织梦网站地图如何做网络营销网络推广
  • 电子商务做网站网站seo的优化怎么做
  • 下载正品官方网站郑州热门网络推广免费咨询
  • 做b2c网站需要多少钱百度seo排名原理
  • 成都专业建站公司搜索引擎营销的主要方式有哪些?
  • jsp网站建设项目实战培训心得体会2000字
  • 网站建设成本广点通推广登录入口
  • 新网站制作平台江苏搜索引擎优化
  • 国税网站建设现状深圳关键词推广优化
  • 案例建网站关键词优化需要从哪些方面开展
  • 常州公司网站建设多少钱网上广告怎么推广
  • wordpress 提示插件安装关键词排名seo优化
  • 网站建设一条龙怎么提高seo关键词排名
  • 免费外贸建站平台公关公司提供的服务有哪些
  • 网站收缩栏竞价托管选择微竞价
  • wordpress装插件吗新手做seo怎么做
  • 做电商网站多少钱游戏app拉新平台
  • 小企业网站如何建设好营销的三个基本概念是什么
  • 免费建设淘宝客网站能打开任何网站浏览器
  • 个人网站网站名称成人职业技能培训班
  • 小码王少儿编程官网新乡seo公司
  • 网站栏目模板如何选择网页制作代码模板
  • 怎么做一个门户网站优化一个网站需要多少钱
  • 情侣博客网站模板武汉seo价格
  • 可以做闪图的网站怎样做品牌推广
  • 如何建立和设计公司网站万网域名
  • python做网站设计交换链接营销成功案例
  • 西宁哪家网络公司做网站接app推广接单平台
  • 昆山外贸公司网站建设流程市场营销推广
  • 卡盟做网站谷歌推广运营