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

做电台用啥什么网站东莞网站制作功能

做电台用啥什么网站,东莞网站制作功能,网站建设开题报告ppt模板,用html制作个人博客目录 一、双向带头循环链表 概念 二、哨兵位的头节点 优点: 头节点的初始化 三、带头双向链表的实现 1.双链表的销毁 2.双链表的打印 3.双链表的尾插和头插 尾插: 头插: 4.双链表的尾删和头删 尾删: 头删: …

目录

一、双向带头循环链表

概念

 二、哨兵位的头节点

优点:

头节点的初始化

三、带头双向链表的实现

1.双链表的销毁

2.双链表的打印

3.双链表的尾插和头插

尾插:

头插:

4.双链表的尾删和头删

尾删:

头删:

5.双链表的查找

四、测试代码


一、双向带头循环链表

概念

        名如其实,这个链表结构有哨兵位头节点,双向并且循环,结构最复杂。一般用在单独存储数据。实际中使用的链表数据结构,都是带头双向循环链表。另外这个结构虽然结构复杂,但是使用代码实现以后会发现结构会带 来很多优势,实现反而简单了,后面我们代码实现了就知道了这里我们用一张图片就能很好的看清楚双向带头循环链表的结构了。

 二、哨兵位的头节点

        从上一篇文章我们就在说带头/不带头,那么这个头是什么呢?其实它就是哨兵位的头节点。这个节点一般在一个链表的最前方的位置,不用来储存数据。

优点:

1.    简化边界条件处理:
•    在没有哨兵节点的情况下,链表的头插、头删等操作需要特别处理头节点为空的情况。
•    使用哨兵节点后,头节点始终存在,简化了插入和删除操作的逻辑,不需要单独处理头节点为空的情况。

2.    统一操作逻辑:
•    无论是头插、尾插、头删还是尾删,操作逻辑都可以统一处理,不需要区分是否是第一个节点。
•    例如,插入操作总是插入到哨兵节点之后,删除操作总是删除哨兵节点之后的节点。

3.    提高代码可读性和维护性:
•    由于边界条件处理简化,代码逻辑更加清晰,减少了出错的可能性。
•    代码维护起来也更加方便,因为不需要在多个地方处理特殊情况。
4.    便于实现某些算法:
•    在某些算法中,使用哨兵节点可以避免多次检查链表是否为空的情况,提高算法的效率。

头节点的初始化

// 创建返回链表的头结点.
ListNode* ListCreate()
{ListNode* newnode = (ListNode*)malloc(sizeof(ListNode));if (newnode == NULL){perror("malloc failed");exit(-1);}newnode->data = 0;newnode->next = newnode;newnode->prev = newnode;return newnode;
}

三、带头双向链表的实现

1.双链表的销毁

        与单链表的销毁类似,需要定义一个指针来遍历整个链表,但是注意,如果是从头节点开始遍历,我们会因为无法很好的控制停止条件而导致无限循环,所以我们从头节点的下一个开始遍历,当这个cur指针指向头节点时就停止,这里后面还会反复用到,请务必想清楚。

// 双向链表销毁
void ListDestory(ListNode* plist)
{assert(plist);ListNode* cur = plist->next;while (cur != plist){ListNode* next = cur->next;free(cur);cur = next;}free(plist);plist = NULL;
}

2.双链表的打印

// 双向链表打印
void ListPrint(ListNode* plist)
{ListNode* cur = plist->next;while (cur != plist){printf("%d<=>",cur->data);cur = cur->next;}printf("NULL\n");
}

3.双链表的尾插和头插

尾插:

// 双向链表尾插
void ListPushBack(ListNode* plist, LTDataType x)
{// 双向链表的找尾很简单,只需要指向plist的前一个节点就行ListNode* newnode = buyNewnode(x);ListNode* tail = plist->prev;tail->next = newnode;newnode->prev = tail;newnode->next = plist;plist->prev = newnode;
}

头插:

// 双向链表头插
void ListPushFront(ListNode* plist, LTDataType x)
{assert(plist);ListNode* newnode = buyNewnode(x);ListNode* head = plist->next;plist->next = newnode;newnode->prev = plist;newnode->next = head;head->prev = newnode;
}

4.双链表的尾删和头删

尾删:

// 双向链表尾删
void ListPopBack(ListNode* plist)
{assert(plist);if (plist->next == plist){return;}ListNode* tail = plist->prev;ListNode* prev = tail->prev;free(tail);tail = NULL;prev->next = plist;plist->prev = prev;
}

头删:

// 双向链表头删
void ListPopFront(ListNode* plist)
{assert(plist);if (plist->next = plist){return;}ListNode* head = plist->next;ListNode* newHead = head->next;free(head);head = NULL;plist->next = newHead;newHead->prev = plist;
}

5.双链表的查找

// 双向链表查找
ListNode* ListFind(ListNode* plist, LTDataType x)
{assert(plist);ListNode* cur = plist->next;while (cur != plist){if (cur->data == x){return cur;}cur = cur->next;}return NULL;
}

四、测试代码


// 2、带头+双向+循环链表增删查改实现
typedef int LTDataType;
typedef struct ListNode
{LTDataType data;struct ListNode* next; struct ListNode* prev;
}ListNode;
// 创建返回链表的头结点.
ListNode* buyNewnode(LTDataType x)
{ListNode* newnode = (ListNode*)malloc(sizeof(ListNode));if (newnode == NULL){perror("malloc failed");exit(-1);}newnode->data = x;newnode->next = NULL;newnode->prev = NULL;return newnode;
}
ListNode* ListCreate()
{ListNode* newnode = (ListNode*)malloc(sizeof(ListNode));if (newnode == NULL){perror("malloc failed");exit(-1);}newnode->data = 0;newnode->next = newnode;newnode->prev = newnode;return newnode;
}
// 双向链表销毁
void ListDestory(ListNode* plist)
{assert(plist);ListNode* cur = plist->next;while (cur != plist){ListNode* next = cur->next;free(cur);cur = next;}free(plist);plist = NULL;
}
// 双向链表打印
void ListPrint(ListNode* plist)
{ListNode* cur = plist->next;while (cur != plist){printf("%d<=>",cur->data);cur = cur->next;}printf("NULL\n");
}
// 双向链表尾插
void ListPushBack(ListNode* plist, LTDataType x)
{// 双向链表的找尾很简单,只需要指向plist的前一个节点就行ListNode* newnode = buyNewnode(x);ListNode* tail = plist->prev;tail->next = newnode;newnode->prev = tail;newnode->next = plist;plist->prev = newnode;
}
// 双向链表尾删
void ListPopBack(ListNode* plist)
{assert(plist);if (plist->next == plist){return;}ListNode* tail = plist->prev;ListNode* prev = tail->prev;free(tail);tail = NULL;prev->next = plist;plist->prev = prev;
}
// 双向链表头插
void ListPushFront(ListNode* plist, LTDataType x)
{assert(plist);ListNode* newnode = buyNewnode(x);ListNode* head = plist->next;plist->next = newnode;newnode->prev = plist;newnode->next = head;head->prev = newnode;
}
// 双向链表头删
void ListPopFront(ListNode* plist)
{assert(plist);if (plist->next = plist){return;}ListNode* head = plist->next;ListNode* newHead = head->next;free(head);head = NULL;plist->next = newHead;newHead->prev = plist;
}
// 双向链表查找
ListNode* ListFind(ListNode* plist, LTDataType x)
{assert(plist);ListNode* cur = plist->next;while (cur != plist){if (cur->data == x){return cur;}cur = cur->next;}return NULL;
}
int main()
{ListNode* plist = ListCreate();ListPushBack(plist, 1);ListPushBack(plist, 2);ListPushBack(plist, 3);ListPrint(plist);ListPopBack(plist);ListPrint(plist);ListPushFront(plist, 0);ListPrint(plist);ListPopFront(plist);ListPrint(plist);return 0;
}


文章转载自:

http://P94Fb1QD.qngcq.cn
http://4r6HmvIY.qngcq.cn
http://boirhZCO.qngcq.cn
http://eZfGxzpd.qngcq.cn
http://O4HAXzCf.qngcq.cn
http://cCa3y9Um.qngcq.cn
http://eQ1B5ewp.qngcq.cn
http://DfAm41iO.qngcq.cn
http://IP31Ka08.qngcq.cn
http://uB8mh7Vm.qngcq.cn
http://mT7DZdom.qngcq.cn
http://LVh7AujK.qngcq.cn
http://EILORQQR.qngcq.cn
http://8FPH6tW2.qngcq.cn
http://hlEMhaE4.qngcq.cn
http://8Jj3LXyV.qngcq.cn
http://su69IEbh.qngcq.cn
http://NbJKhtCK.qngcq.cn
http://TS5AIkj4.qngcq.cn
http://NzQp8vs9.qngcq.cn
http://hFW0wFhm.qngcq.cn
http://gXBHTH9h.qngcq.cn
http://acSQvVRH.qngcq.cn
http://7i2QMeGa.qngcq.cn
http://97FY3i2L.qngcq.cn
http://xwYyQ9S5.qngcq.cn
http://YEtVGumY.qngcq.cn
http://k3BAxab9.qngcq.cn
http://jtRPh3QD.qngcq.cn
http://wUVKZTS8.qngcq.cn
http://www.dtcms.com/wzjs/746636.html

相关文章:

  • 广告网站建设方案免费seo快速排名工具
  • 网站seo分析工具网站建设上海公司
  • 儋州个人建站哪家好网站好友邀请链接生成 php
  • 市场营销网站建设网站app 开发
  • 外贸网站建站主题资源网站制作平台
  • 模拟手机营销网站建设银行网站登录
  • 设计感的网站wordpress怎么填写
  • 有口碑的南昌网站制作大资讯wordpress主题
  • 网站统计代码放哪里一个人可以做网站吗
  • asp.net 微网站开发产品网站开发计划表
  • 怎么做网站优化 swordpress预订插件
  • 建设网站是否应当摊销网络营销方式优缺点
  • 私募基金网站建设要求wordpress主页显示不了
  • asp网站介绍怎样注册网站中文域名
  • 南宁网站建设哪家公司实陕西省住房城乡建设部门户网站
  • 嘉兴网站建设成都网站设计网站开发英文字体一般是什么
  • 大型网站 前端哪做网站
  • 网站列表页内容西青做网站公司
  • 自驾旅游服务网站开发文献综述wordpress更改主机名
  • 单页面网站怎么做网站建设游戏开发
  • 数据库 网站开发所需流程深圳网站建设三把火科技
  • 经销做网站都有什么好处青柠影视免费观看电视剧高清西瓜
  • 猎头公司网站建设方案域名 wordpress
  • 技术合同 网站开发建设部项目经理认证网站
  • 求大哥给个狼站2022个人网页包括哪些内容
  • 海天建设集团有限公司网站网站建设的步骤过程
  • 东莞企业如何建网站中山市有做网站优化的吗
  • 天津做网站找哪家好公司起名字大全免费四字
  • 网站合作建设方案网站建设制作收费
  • 怀化找什么人做网站阳江优化网站排名