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

厦门免费自助建站模板淘宝联盟里的网站推广怎么做

厦门免费自助建站模板,淘宝联盟里的网站推广怎么做,成都医疗seo整站优化,手机网站根目录数据结构 | 带头双向循环链表专题 前言 前面我们学了单链表#xff0c;我们这次来看一个专题带头的双向循环链表~~ 文章目录 数据结构 | 带头双向循环链表专题前言带头双向循环链表的结构实现双向链表头文件的定义创建节点哨兵位初始化尾插尾删头插头删打印查找指定位置前插入…数据结构 | 带头双向循环链表专题 前言 前面我们学了单链表我们这次来看一个专题带头的双向循环链表~~ 文章目录 数据结构 | 带头双向循环链表专题前言带头双向循环链表的结构实现双向链表头文件的定义创建节点哨兵位初始化尾插尾删头插头删打印查找指定位置前插入删除指定位置销毁链表List.hList.c 带头双向循环链表的结构 注意这里的“带头”跟前面我们说的“头节点”是两个概念实际前面的在单链表阶段称呼不严 谨但是为了同学们更好的理解就直接称为单链表的头节点。带头链表里的头节点实际为“哨兵位”哨兵位节点不存储任何有效元素只是站在这里“放哨 的” 哨兵位存在的意义 遍历循环链表避免死循环。 每个节点有三部分内容 保存数据的val保存下一个节点的地址next指针保存前一个节点的地址prev指针 实现双向链表 我们需要实现以下功能 头文件的定义 List.h #pragma once #includestdio.h #includestdlib.h #includeassert.h// 带头双向循环链表增删查改实现 typedef int LTDataType; typedef struct ListNode {LTDataType _val;struct ListNode* _next;struct ListNode* _prev; }ListNode;//哨兵位初始化 ListNode* ListInit();// 创建返回链表的头结点. ListNode* ListCreate(LTDataType* x); // 双向链表销毁 void ListDestory(ListNode* pHead); // 双向链表打印 void ListPrint(ListNode* pHead); // 双向链表尾插 void ListPushBack(ListNode* pHead, LTDataType x); // 双向链表尾删 void ListPopBack(ListNode* pHead); // 双向链表头插 void ListPushFront(ListNode* pHead, LTDataType x); // 双向链表头删 void ListPopFront(ListNode* pHead); // 双向链表查找 ListNode* ListFind(ListNode* pHead, LTDataType x); // 双向链表在pos的前面进行插入 void ListInsert(ListNode* pos, LTDataType x); // 双向链表删除pos位置的节点 void ListErase(ListNode* pos);创建节点 malloc一个节点然后让新节点的next和prev赋值为空将值给了val最后返回空间 ListNode* ListCreate(LTDataType* x) {ListNode* newnode (ListNode*)malloc(sizeof(ListNode));if (newnode NULL){perror(malloc fail!\n);exit(-1);}newnode-_val x;newnode-_next NULL;newnode-_prev NULL;return newnode; }哨兵位初始化 这里我们初始化成-1代表是哨兵位然后让前驱指针和next指针指向自己 ListNode* ListInit() {ListNode* pHead ListCreate(-1);pHead-_next pHead;pHead-_prev pHead;return pHead; }尾插 void ListPushBack(ListNode* pHead, LTDataType x) {assert(pHead);ListNode* tail pHead-_prev;ListNode* newnode ListCreate(x);// phead tail newnodetail-_next newnode;newnode-_prev tail;newnode-_next pHead;pHead-_prev newnode; }尾删 void ListPopBack(ListNode* pHead) {assert(pHead);assert(pHead-_next ! pHead);ListNode* tail pHead-_prev;ListNode* tailprev tail-_prev;free(tail);tailprev-_next pHead;pHead-_prev tailprev; }头插 void ListPushFront(ListNode* pHead, LTDataType x) {assert(pHead);ListNode* cur pHead-_next;ListNode* newnode ListCreate(x);pHead-_next newnode;newnode-_prev pHead;newnode-_next cur;cur-_prev newnode; }头删 void ListPopFront(ListNode* pHead) {assert(pHead);assert(pHead-_next ! pHead);ListNode* first pHead-_next;ListNode* second first-_next;pHead-_next second;second-_prev pHead;free(first);first NULL; }打印 void ListPrint(ListNode* pHead) {ListNode* tail pHead-_next;printf(哨兵位-);while (tail ! pHead){printf(%d-, tail-_val);tail tail-_next;}printf(NULL\n); }查找 ListNode* ListFind(ListNode* pHead, LTDataType x) {assert(pHead);ListNode* cur pHead-_next;while (cur ! pHead){if (cur-_val x){return cur;}cur cur-_next;}return NULL; }指定位置前插入 void ListInsert(ListNode* pos, LTDataType x) {assert(pos);ListNode* newnode ListCreate(x);ListNode* prev pos-_prev;prev-_next newnode;newnode-_prev prev;pos-_prev newnode;newnode-_next pos; }删除指定位置 void ListErase(ListNode* pos) {assert(pos);ListNode* prev pos-_prev;ListNode* next pos-_next;prev-_next next;next-_prev prev;free(pos);pos NULL; }销毁链表 void ListDestory(ListNode* pHead) {assert(pHead);ListNode* cur pHead-_next;while (cur ! pHead){ListNode* next cur-_next;free(cur);cur next;}free(pHead);pHead NULL; }List.h #pragma once#includestdio.h #includestdlib.h #includeassert.h #includestdbool.htypedef int LTDataType;typedef struct ListNode {LTDataType val;struct ListNode* next;struct ListNode* prev; }LTNode;//初始化哨兵位 LTNode* LTInit(); //创建节点 LTNode* LTcreate(LTDataType x); //销毁 void LTDestroy(LTNode* phead); //打印 void LTPrint(LTNode* phead); //判断是否为空 bool LTEmpty(LTNode* phead); //尾插 void LTPushBack(LTNode* phead, LTDataType x); //尾删 void LTPopBack(LTNode* phead); //头插 void LTPushFront(LTNode* phead, LTDataType x); //头删 void LTPopFront(LTNode* phead); //指定位置插入 void LTInsert(LTNode* pos, LTDataType x); //指定位置删除 LTNode* LTErase(LTNode* pos); //查找 LTNode* LTFind(LTNode* phead, LTDataType x);List.c #define _CRT_SECURE_NO_WARNINGS 1#includeList.h//初始化哨兵位 LTNode* LTInit() {LTNode* phead LTcreate(-1);phead-next phead;phead-prev phead;return phead; } //创建节点 LTNode* LTcreate(LTDataType x) {LTNode* newnode (LTNode*)malloc(sizeof(LTNode));if (newnode NULL){perror(malloc fail!\n);exit(-1);}newnode-next NULL;newnode-prev NULL;newnode-val x;return newnode; } //销毁 void LTDestroy(LTNode* phead); //打印 void LTPrint(LTNode* phead) {assert(phead);printf(哨兵位-);LTNode* cur phead-next;while (cur ! phead){printf(%d-, cur-val);cur cur-next;}printf(\n); } //判断是否为空 bool LTEmpty(LTNode* phead) {assert(phead);return phead-val 0; }//尾插 void LTPushBack(LTNode* phead, LTDataType x) {assert(phead);LTNode* newnode LTcreate(x);LTNode* tail phead-prev;tail-next newnode;newnode-prev tail;newnode-next phead;phead-prev newnode; }//尾删 void LTPopBack(LTNode* phead) {assert(phead);LTNode* tail phead-prev;LTNode* tailprev tail-prev;free(tail);tail NULL;tailprev-next phead;phead-prev tailprev; } //头插 void LTPushFront(LTNode* phead, LTDataType x) {assert(phead);LTNode* newnode LTcreate(x);LTNode* cur phead-next;phead-next newnode;newnode-prev phead;cur-prev newnode;newnode-next cur; } //头删 void LTPopFront(LTNode* phead) {assert(phead);LTNode* first phead-next;LTNode* second first-next;free(first);phead-next second;second-prev phead; }//查找 LTNode* LTFind(LTNode* phead, LTDataType x) {assert(phead);LTNode* cur phead-next;while (cur ! phead){if (cur-val x){return cur;}cur cur-next;}return NULL; }//指定位置的前面插入 void LTInsert(LTNode* pos, LTDataType x) {assert(pos);LTNode* newnode LTcreate(x);LTNode* posprev pos-prev;posprev-next newnode;newnode-prev posprev;newnode-next pos;pos-prev newnode;} //指定位置删除 LTNode* LTErase(LTNode* pos) {assert(pos);LTNode* posprev pos-prev;LTNode* posnext pos-next;free(pos);posprev-next posnext;posprev posprev; }顺序表和双向链表的分析 不同点顺序表链表单链表存储空间上物理上一定连续逻辑上连续但物理上不一定连续随机访问支持O(1)不支持O(N)任意位置插入或者删除元素可能需要搬移元素效率低O(N)只需修改指针指向插入动态顺序表空间不够时需要扩容没有容量的概念应用场景元素高效存储频繁访问任意位置插入和删除频繁 好了双向链表就到这里结束了有用的话点个赞吧~~
http://www.hkea.cn/news/14468925/

相关文章:

  • 福州交通建设投资集团网站手机网站管理
  • 土特产网站平台建设微信网页版网址是多少
  • 深圳网站建设合同网站建设维护需要懂哪些知识
  • 好的设计教程网站企业免费网站优化方案
  • 怎么自创网站ps怎么在dw上做网站
  • 重庆彼客的网站是谁家做的创意家装设计公司
  • 企业网站需要多大空间百度地图排名怎么优化
  • 和拓者设计吧类似的网站邢台做网站改版
  • vue.js做的网站做网站优化的话术
  • 佛山网站建设优势海外网站推广优化专员
  • 专业网站建设价格分析怎么自己做推广网站
  • 什么是网站上线检测中文域名是网站名称吗
  • 制作个网站多少钱关键词的优化和推广
  • 有哪些网站建设方案专业手机网站设计
  • 哪个行业最喜欢做网站常德市网络科技有限公司
  • 设计商城商务网站dell网站设计特色
  • 网上商城网站设计和实现青岛做网站建设多少钱
  • 做模板网站的公司客户网站留言
  • 洛阳洛龙区网站建设互联网最赚钱的行业
  • 广西网站制作公司社交营销
  • 网站建设四个阶段的流程华为云服务器官网入口
  • 网站建设制作要学什么南京江宁网站建设
  • 可建网站电商怎么做如何从零开始视频
  • 网站建设的信息安全防范技术怎样做婚庆网站
  • 南昌 网站制作网站建设最安全的宽度
  • 网站上怎样做超链接最新百度关键词排名
  • ps怎么做网站界面设计c 网站开发代码
  • 苏州做网站优化公司哪家好郑州营销策划公司排行榜
  • 黑群辉建设个人网站个人备案号 可以做游戏网站吗
  • 南充城市建设投诉网站1000个关键词