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

青岛建设网站的公司门户网站推广怎么做

青岛建设网站的公司,门户网站推广怎么做,云建站淘宝客,网站开发的技术有一日不见,如三月兮!接下来与我一起创建单链表吧! 目录 单链表的结构: 创建单链表: 增加结点: 插入结点: 删除结点: 打印单链表: 单链表查找: 单链表…

一日不见,如三月兮!接下来与我一起创建单链表吧!

目录

单链表的结构:

创建单链表:

增加结点:

插入结点:

删除结点:

打印单链表:

单链表查找:

单链表指定位置插入:

单链表指定位置删除:

答疑解惑:

结语:


单链表的结构:

单链表有不带头单向不循环,和带头单向非循环两种类型,我们将探索的是不带头单向不循环的链表;它有两种结构:逻辑结构和物理结构,如下图:

因为物理结构便于理解,所以我们参照它来进行代码书写,物理结构中我们访问的都是地址,所以我们会使用指针,且蓝色所指表示它们两的地址相同!

创建单链表:

首先我们要定义一个结构体,然后我们要访问数值,所以会定义一个整型变量,为了找下一个数值的地址,我们还需创建一个指针

typedef int SLTDataType;
typedef struct SListNode
{SLTDataType data;struct SListNode* next;//方便查找下一个结点
}SLTNode;

增加结点:

因为每次插入,都需要书写一个代码,为了节省空间,我们将它包装成一个函数,方便我们进行调用

SLTNode* Buynewnode(SLDataType x)
{SLTNode* newnode = (SLTNode*)malloc(sizeof(SLTNode));//开辟空间if(newnode == NULL)//判断是否开辟成功{perror("malloc fail");return;}newnode->data = x;//将数据赋值newnode->next = NULL;return newnode;//返回地址
}

插入结点:

头插:

首先将一开始头的数据地址赋给新的结点的下一个(newnode->next)地址,再将头指针变为新结点

void SLTPushFront(SLTNode** pphead,SLTDataType x)
{assert(pphead);SLTNode* newnode = Buynewnode(x);newnode->next = *pphead;*pphead = newnode;
}

尾插:

首先判断链表是否为空的情况,若为空,则将新结点赋给头结点即可,如果不是,再进行找尾,当找到尾时,将新结点的地址赋给tail的下一个。

void SLTPushBack(SLTNode** pphead, SLTDataType x)
{assert(pphead);SLTNode* newnode = Buynewnode(x);//判断是否为空if(*pphead == NULL){*pphead = newnode;}else{//找尾while(tail->next != NULL){tail = tail->next;}tail->next = newnode;//链接新结点}
}

删除结点:

头删:

先判断链表是否为空,若不为空,将第二个的数据地址赋给头指针即可,但我们怎么找到第二个的数据地址呢?我们可以先将头指针赋给一个指针进行保存,再将创建的指针找到其下一个的地址(即第二个数据的地址)赋给头指针,在释放第一个结点的地址即可。

void SLTPopFront(SLTNode** pphead)
{assert(pphead);assert(*pphead);SLTNode* begin = *pphead;//保存头指针*pphead = begin->next;free(begin)//释放第一个结点的空间begin = NULL;
}

尾删:

首先判断单链表是否为空,其次判断一下是否只有一个结点,若只有一个,直接将头指针释放置空即可,剩下的情况我们只要找到尾将它删除即可,有人想偷懒,将上面的找尾代码拷贝,然后将其置空,果真这么简单吗?会导致什么结果呢?又该怎么处理呢?

如果将tail置空,会使前一个结点的下一个指针变为野指针,tail置空是将局部变量置空,而非将结构体变量置空,若要改变这个情况,我们再定义一个结构体指针,找到tail的前面一个头结点,再将其下一个置空就行了

void SLTPopBack(SLTNode** pphead)
{//为空assert(pphead);assert(*pphead);//只有一个结点if((*pphead)->next == NULL){free(*pphead);*pphead = NULL;}else{SLTNode* prev = NULL;SLTNode* tail = *pphead;//找尾while(tail->next != NULL){prev = tail;//找到tail前一个结点tail = tail->next;}//释放掉尾结点free(tail)tail = NULL;prev->next = NULL;}
}

打印单链表:

将头指针赋值给一个指针变量,这样可以防止头指针被覆盖(这个作用这里体现不明显),然后循环遍历就OK了

void SLTPrint(SLTNode* phead)
{SLTNode* begin = phead;//循环遍历while(begin){printf("%d->", begin->data);begin = begin->next;}printf("NULL\n");
}

单链表查找:

将头指针赋值给一个指针变量,然后遍历,用if语句判断

SLTNode* SLTFind(SLTNode* phead, SLTDataType x)
{SLTNode* cur = phead;while(cur){if(cur->data == x){//找到返回return cur;}cur = cur->next;}return NULL;
}

单链表指定位置插入:

我们先定义一个指针变量,用来找我们指定插入的位置地址,找到这个指针变量的前一个位置的地址,再将新结点的地址赋给前一个的下一个地址(next),再将指针变量赋给新节结点的下一个地址

void SLTInsert(SLTNode** pphead, SLTNode* pos, SLTDataType x)
{assert(pos);//判断pos是否为空assert(pphead);SLTNode* newnode = Buynewnode(x);if(*pphead == pos){newnode->next = pos;*pphead = newnode//将新结点赋给头指针}else{SLTNode* prev = *pphead;//找到pos前面一个地址while(prev->next != pos){prev = prev->next;}prev->next = newnode;newnode->next = pos;}
}

单链表指定位置删除:

我们先定义一个指针变量,用来找我们指定插入的位置地址,找到这个指针变量的前一个位置的地址,再将指定位置的下一个,赋给前一个位置的下一个,再将指定位置释放置空

void SLTErase(SLTNode** pphead, SLTNode* pos)
{assert(pos);//判断pos是否为空assert(pphead);//只有一个结点if(*pphead == pos){*pphead = pos->next;free(pos);pos = NULL;}else{SLTNode* prev = *pphead;//找pos前一个位置while(prev->next != pos){prev = prev->next;}prev->next = pos->next;free(pos);//释放指定位置空间pos = NULL;}
}

答疑解惑:

为什么要传二级指针? 因为要修改结构体指针,所以要用二级指针,比如修改变量,用一级指针修改才行!

什么时候用assert?当一个变量一定不为空时,则用assert,比如插入数据时,*pphead可以为空,所以不用断言,亦或者打印时,也可以打印空数据,所以也不用断言。

结语:

谢谢大家观看!期待下次见面哦!


文章转载自:

http://4bDVTJPt.bpmdn.cn
http://9F5zUOPX.bpmdn.cn
http://7z8JRXIa.bpmdn.cn
http://TmQJ1WRp.bpmdn.cn
http://5lfUvMqm.bpmdn.cn
http://MaBmnnwl.bpmdn.cn
http://ezeu2ANH.bpmdn.cn
http://nVjT22IR.bpmdn.cn
http://yX1xVS5M.bpmdn.cn
http://Rm72yX4m.bpmdn.cn
http://Qnh0EO9V.bpmdn.cn
http://gKKlHgub.bpmdn.cn
http://A0sw3hhC.bpmdn.cn
http://VfcDlSst.bpmdn.cn
http://Yp7VaFf8.bpmdn.cn
http://yix1d5zr.bpmdn.cn
http://n7Cl8EGQ.bpmdn.cn
http://3zBkCHAd.bpmdn.cn
http://MK1HQkit.bpmdn.cn
http://TT4UqUug.bpmdn.cn
http://pfRKVhTT.bpmdn.cn
http://2UI2ydN2.bpmdn.cn
http://cjT9EMhw.bpmdn.cn
http://lQzffMdL.bpmdn.cn
http://YVCqr8aq.bpmdn.cn
http://EQEiAXRQ.bpmdn.cn
http://GmA0MjNn.bpmdn.cn
http://rk5Fi5ZB.bpmdn.cn
http://5eHxy07f.bpmdn.cn
http://XP70lUzL.bpmdn.cn
http://www.dtcms.com/wzjs/722856.html

相关文章:

  • 南阳网站建设制作价格曲阜网站建设百度开户
  • 网站模板如何修改域名快站app
  • 网站版权信息修改宣传片策划拍摄制作公司
  • 帝国做的网站怎么上传杭州有哪些软件公司
  • 肃宁做网站价格泰安信誉好的网络推广公司
  • 网站建设捌金手指花总十七网站如何合理建设seo
  • 阿里云服务器可以做商业网站维纳斯式束腰Wordpress
  • 网站目录结构说明wordpress中如何添加面包屑
  • 免费照片的网站模板免费下载义乌购网站做代销怎么样
  • 孝感公司做网站wordpress阅读量没改
  • 网站建设贰金手指下拉贰拾dedecms大气金融企业网站模板免费下载
  • 做游戏和做网站哪个难网站的制作方法
  • 新买的服务器怎么做网站室内装修设计软件app
  • 网站 建设意见牌具做网站
  • 小说网站怎么做词iis 做网站
  • 门户网站通俗理解智能建站系统cms
  • 网上做兼职正规网站网站视频源码地址
  • 泰安网站优化简单的手机app制作流程
  • 乔拓云建站平台西安到北京
  • 网站如何推广行业网站建设项目进度计划书
  • 电子商务网站开发 pdf移动互联网开发大作业
  • 小程序推广网站个人网站开发要多久
  • 网站建设主要工作流程西安设计工作室
  • 网络违法犯罪举报网站网页设计板式网站
  • 小型网站用typescript南阳专业网站建设价格
  • 网站可以做充值吗北京丰台网站建设
  • 西安巨久科技网站建设校园网站建设培训稿
  • 网站建设在医院的作用百度app浏览器下载
  • 有服务器了怎么做网站营销型网站建设市场分析
  • wordpress个人网站后台登陆西安网站制作顶尖公司