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

人防工程做资料的网站网络营销百科

人防工程做资料的网站,网络营销百科,搜索引擎优化工具有哪些,东莞网站建设模具1. 双向链表的结构 注意:这里的“带头”跟单链表的“头结点”是两个概念,实际上在单链表阶段称呼不太严谨,但是为了更好地理解就直接称为单链表的头结点。带头链表里的头结点,实际为“哨兵位”,哨兵位结点不存储任何有…

1. 双向链表的结构

注意:这里的“带头”跟单链表的“头结点”是两个概念,实际上在单链表阶段称呼不太严谨,但是为了更好地理解就直接称为单链表的头结点。带头链表里的头结点,实际为“哨兵位”,哨兵位结点不存储任何有效元素,只是站在这里“放哨的”。

哨兵位”存在的意义:

遍历循环链表避免死循环。

2. 双向链表的实现

2.1 双向链表结构体

typedef int LTDataType;
// 定义双向链表节点的结构
typedef struct ListNode
{LTDataType data;struct ListNode* next;struct ListNode* prev;
}LTNode;

2.2 申请结点

// 申请节点
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;
}

2.3 初始化

// 初始化
void LTInit(LTNode** pphead)
{// 给链表创建一个哨兵位*pphead = LTBuyNode(-1);
}

2.4 链表的销毁

// 销毁
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;
}

2.5 链表的打印

// 打印
void LTPrint(LTNode* phead)
{LTNode* pcur = phead->next;while (pcur != phead){printf("%d->", pcur->data);pcur = pcur->next;}printf("\n");
}

2.6 链表的尾插

// 尾插
void LTPushBack(LTNode* phead, LTDataType x)
{assert(phead);LTNode* newNode = LTBuyNode(x);// 旧的尾结点就是phead->prev// 先让新的尾结点的前指针指向旧的尾结点newNode->prev = phead->prev;newNode->next = phead;	// 再让新的尾结点的下一级指针指向头结点(哨兵位)// 旧的尾结点下一级指针指向新的尾结点phead->prev->next = newNode;phead->prev = newNode;	// 再让头结点(哨兵位)的下一级指针指向新的尾结点
}

2.7 链表的头插

// 头插
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;	// 头结点的下一级指针指向新的结点// 这样也是可行的phead->next = newNode;	// 头结点的下一级指针指向新的结点newNode->next->prev = newNode;	// 指向头结点的下一级指针的结点的下一级指针指向新的结点}

2.8 链表的尾删

// 尾删
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;
}

2.9 链表的头删

// 头删
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;
}

2.10 链表查找数据

// 查找数据
LTNode* LTFind(LTNode* phead, LTDataType x)
{LTNode* pcur = phead->next;while (pcur != phead){if (pcur->data == x){return pcur;}pcur = pcur->next;}// 没有找到return NULL;
}

2.11 在pos位置之后插入数据

// 在 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;
}

2.12 删除pos结点

// 删除 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;
}

http://www.dinnco.com/news/51243.html

相关文章:

  • 网站建设生意怎么样漯河seo推广
  • 动易 手机网站seo文章排名优化
  • 厦门广告公司网站建设环球资源外贸平台免费
  • 公司自己的网站怎样做东莞百度快速优化排名
  • 网站建设通常用到哪些编程七牛云
  • 苹果的网站怎么做的吗站长工具怎么关闭
  • 寻花问柳专做男人的网站网站推广投放
  • 如何粘贴网站统计代码百度搜索优化
  • 企业展厅图片商品关键词怎么优化
  • wordpress css版本号重庆搜索引擎seo
  • 怎么用抓爬工具做网站会计培训班一般收费多少
  • 网站建设的3个基本原则搜索引擎数据库
  • 做网站通常用的软件市场营销毕业论文
  • 嘉兴网站建设公司seo综合查询工具可以查看哪些数据
  • 怎么建立一个网站平台高考加油可免费投放广告的平台
  • 投资 网站 源码百度竞价查询
  • 跨境电商开发公司网站优化推广费用
  • 领卷网站如何做代理百度人工客服电话多少
  • 石家庄网站建站南宁seo网站排名优化公司
  • 河南国安建设集团有限公司信息网站百度最怕哪个投诉电话
  • 建设宣传网站的必要性百度指数特点
  • 做黄页网站要告我百度网站提交入口网址
  • 网站备案时间周期一般多久网络营销的推广方式
  • 做b2c网站社区公司网站制作流程
  • 互联网系统名称湖南网站seo
  • 在哪里购买虚拟空间建设网站最近新闻摘抄50字
  • 济南营销网站制作公司哪家好生意参谋指数在线转换
  • 需要建设网站的原画培训班一般学费多少
  • 三亚网站定制平台推广策略都有哪些
  • 全国工商企业查询平台seo优化专员