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

网站的百度快照如何做深圳网络推广哪家

网站的百度快照如何做,深圳网络推广哪家,网络宣传的方法,个人注册公司需要哪些材料哈喽铁子们,这里是博主鳄鱼皮坡。这篇文章将分享交流双向链表的相关知识,下面正式开始。 1. 双向链表的结构 注意:这里的“带头”跟前面我们说的“头节点”是两个概念,实际前面的在单链表阶段称呼不严 谨,但是为了老…

哈喽铁子们,这里是博主鳄鱼皮坡。这篇文章将分享交流双向链表的相关知识,下面正式开始。

1. 双向链表的结构

注意:这里的“带头”跟前面我们说的“头节点”是两个概念,实际前面的在单链表阶段称呼不严
谨,但是为了老铁们更好的理解就直接称为单链表的头节点。
带头链表里的头节点,实际为“哨兵位”,哨兵位节点不存储任何有效元素,只是站在这⾥“放哨
的”。而“哨兵位”存在的意义: 遍历循环链表避免死循环。

2. 双向链表的实现

以尾插为例:

第一步:assert(phead); 防止为空。

第二步:创建新节点,和单链表一样用LTBuyNode()函数即可。

第三步:先将新节点指向原链表,由双向链表的特性,我们就不需要像单链表一样遍历去找。newnode->prev即为上图的d3。

       (1) newnode->prev = phead->prev;先将新节点的头部指向原链表的最后一个节点,即d3。

       (2) newnode->next = phead;而后将新节点的尾部指向原链表的哨兵位。

第四步:将原链表相应的位置指向新节点

       (1)phead->prev->next = newnode;原链表的最后节点尾部指向新节点

       (2)phead->prev = newnode;原链表的哨兵位头部指向新节点

//尾插
void LTPushBack(LTNode* phead, LTDataType x)
{assert(phead);LTNode* newnode = LTBuyNode(x);//phead phead->prev newnodenewnode->prev = phead->prev;newnode->next = phead;phead->prev->next = newnode;phead->prev = newnode;
}

只要理清楚双向链表节点的指向关系,之后和单链表结构相似。

双链表的代码如下: 

//List.c
#include"List.h"void LTPrint(LTNode* phead)
{LTNode* pcur = phead->next;while (pcur != phead){printf("%d->", pcur->data);pcur = pcur->next;}printf("\n");
}//申请节点
LTNode* LTBuyNode(LTDataType x)
{LTNode* node = (LTNode*)malloc(sizeof(LTNode));if (node == NULL){perror("malloc fail!");exit(1);}node->data = x;node->next = node->prev = node;return node;
}
//初始化
//void LTInit(LTNode** pphead)
//{
//	//给双向链表创建一个哨兵位
//	*pphead = LTBuyNode(-1);
//}
LTNode* LTInit()
{LTNode* phead = LTBuyNode(-1);return phead;
}//尾插
void LTPushBack(LTNode* phead, LTDataType x)
{assert(phead);LTNode* newnode = LTBuyNode(x);//phead phead->prev newnodenewnode->prev = phead->prev;newnode->next = phead;phead->prev->next = newnode;phead->prev = newnode;
}//头插
void LTPushFront(LTNode* phead, LTDataType x)
{assert(phead);LTNode* newnode = LTBuyNode(x);//phead newnode phead->nextnewnode->next = phead->next;newnode->prev = phead;phead->next->prev = newnode;phead->next = newnode;
}//尾删
void LTPopBack(LTNode* phead)
{//链表必须有效且链表不能为空(只有一个哨兵位)assert(phead && phead->next != phead);LTNode* del = phead->prev;//phead del->prev deldel->prev->next = phead;phead->prev = del->prev;//删除del节点free(del);del = NULL;
}//头删
void LTPopFront(LTNode* phead)
{assert(phead && phead->next != phead);LTNode* del = phead->next;//phead del del->nextphead->next = del->next;del->next->prev = phead;//删除del节点free(del);del = NULL;
}LTNode* LTFind(LTNode* phead, LTDataType x)
{LTNode* pcur = phead->next;while (pcur != phead){if (pcur->data == x){return pcur;}pcur = pcur->next;}//没有找到return NULL;
}//在pos位置之后插入数据
void LTInsert(LTNode* pos, LTDataType x)
{assert(pos);LTNode* newnode = LTBuyNode(x);//pos newnode pos->nextnewnode->next = pos->next;newnode->prev = pos;pos->next->prev = newnode;pos->next = newnode;
}//删除pos节点
void LTErase(LTNode* pos)
{//pos理论上来说不能为phead,但是没有参数phead,无法增加校验assert(pos);//pos->prev pos pos->nextpos->next->prev = pos->prev;pos->prev->next = pos->next;free(pos);pos = NULL;
}void LTDesTroy(LTNode* phead)
{assert(phead);LTNode* pcur = phead->next;while (pcur != phead){LTNode* next = pcur->next;free(pcur);pcur = next;}//此时pcur指向phead,而phead还没有被销毁free(phead);phead = NULL;
}
//List.h
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>//定义节点的结构
//数据 + 指向下一个节点的指针
typedef int SLTDataType;typedef struct SListNode {SLTDataType data;struct SListNode* next;
}SLTNode;void SLTPrint(SLTNode* phead);//尾插
void SLTPushBack(SLTNode** pphead, SLTDataType x);
//头插
void SLTPushFront(SLTNode** pphead, SLTDataType x);
//尾删
void SLTPopBack(SLTNode** pphead);
//头删
void SLTPopFront(SLTNode** pphead);//查找
SLTNode* SLTFind(SLTNode* phead, SLTDataType x);//在指定位置之前插入数据
void SLTInsert(SLTNode** pphead, SLTNode* pos, SLTDataType x);
//在指定位置之后插入数据
void SLTInsertAfter(SLTNode* pos, SLTDataType x);//删除pos节点
void SLTErase(SLTNode** pphead, SLTNode* pos);
//删除pos之后的节点
void SLTEraseAfter(SLTNode* pos);//销毁链表
void SListDesTroy(SLTNode** pphead);

 3. 顺序表和双向链表的优缺点分析

不同点
顺序表
链表(单链表)
存储空间上
物理上⼀定连续
逻辑上连续,但物理上不⼀定连续
随机访问
⽀持O(1)
不⽀持:O(N)
任意位置插⼊或者删除元素
可能需要搬移元素,效率低O(N)
只需修改指针指向
插⼊
动态顺序表,空间不够时需要扩容
没有容量的概念
应⽤场景
元素⾼效存储+频繁访问
任意位置插⼊和删除频繁

在接下来我们将会学习利用实现贪吃蛇小游戏等有意思的东西,如果本篇有不理解的地方,欢迎私信我或在评论区指出,期待与你们共同进步。创作不易,望各位大佬一键三连!

http://www.tj-hxxt.cn/news/53509.html

相关文章:

  • 高端品牌网站建设廊坊网络推广优化公司
  • 怎么做百度提交入口网站今日新闻头条热点
  • 资料下载网站建设如何获取网站的seo
  • 信息分类网站建设做网站公司排名
  • cms网站开发毕设营销咨询师
  • 哪些网站可以做微信信息发布平台推广有哪些
  • 免费做网站公司百度竞价托管费用
  • 网站建设联系电话网站品牌推广策略
  • 南宁网站制作费用怎么做电商
  • 梵克雅宝seo网站推广全程实例
  • wordpress最好选择seop
  • 嘉兴秀洲区建设局网站无锡seo公司哪家好
  • 兰州企业网络推广优化福建seo
  • 医院门户网站模板下载济南百度seo
  • h5网站开发中心杭州百度推广代理公司哪家好
  • 图书网站建设费用明细南宁百度快速优化
  • 茌平网站开发百度最新收录方法
  • 延边网站建设百度应用平台
  • 河北建设工程信息网发信息收费吗seo网站优化服务合同
  • 江门网站建设技术托管郑州网站营销推广
  • 贵阳做网站多少钱搜索引擎推广的三种方式
  • 固安建设行政主管部门官方网站seo推广软件哪个好
  • 源码屋整站源码产品品牌策划方案
  • edu域名网站中国女排联赛排名
  • 西安做网站 怎样备案seo关键词优化公司
  • 电子商务网站设计电商运营平台
  • 坂田网站建设方案金城武重庆森林经典台词
  • 制作好的网页怎么变成网站代运营一家店铺多少钱
  • 怎么做校园表白网站临沂网站建设公司哪家好
  • h5手机网站制作认识网络营销