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

无法跳转到建设银行网站企业网站建设收费标准

无法跳转到建设银行网站,企业网站建设收费标准,分类信息网站开发报价,做微信平台图片网站双向链表的接口实现#xff08;附图解和源码#xff09; 文章目录双向链表的接口实现#xff08;附图解和源码#xff09;前言一、定义结构体二、接口实现#xff08;附图解源码#xff09;1.初始化双向链表2.开辟新空间3.尾插数据4.尾删数据5.打印双向链表中数据6.头插数…双向链表的接口实现附图解和源码 文章目录双向链表的接口实现附图解和源码前言一、定义结构体二、接口实现附图解源码1.初始化双向链表2.开辟新空间3.尾插数据4.尾删数据5.打印双向链表中数据6.头插数据7.头删数据8.查找结点位置9.在pos位置之前插入10.删除pos位置11.销毁双向链表三、源代码展示1.test.c测试主函数2.List.h接口函数的声明3.List.c接口函数的实现总结前言 本文主要介绍双向链表中增删查改等接口实现结尾附总源码 一、定义结构体 代码如下示例 typedef int LTDataType; typedef struct ListNode {LTDataType data;struct ListNode* prev;struct ListNode* next; }ListNode;二、接口实现附图解源码 这里一共10个接口我会我都会一 一为大家讲解图解源码 1.初始化双向链表 初始化出一个哨兵位的头结点用malloc开辟next和prev都指向自己。具体如下图 代码如下示例 ListNode* ListInit() {ListNode* p (ListNode*)malloc(sizeof(ListNode));if (p NULL){perror(errno);}ListNode* phead p;phead-next phead;phead-prev phead;return phead; }2.开辟新空间 (1)开辟一个链表类型的动态空间将地址给newnode (2)将值放入 newnode 的 data 数据内 (3)将 newnode 的 next 和 prev 都置为NULL 注意1.将malloc开辟空间存到 newnode 里面时参数为结构体所占的字节大小2.对 newnode 进行 NULL 判断 代码如下示例 ListNode* BuyListNode(LTDataType x) {ListNode* p (ListNode*)malloc(sizeof(ListNode));if (p NULL){perror(errno);}ListNode* newNode p;newNode-data x;newNode-next NULL;newNode-prev NULL;return newNode; }3.尾插数据 代码如下示例 void ListPushBack(ListNode* phead, LTDataType x)//尾插数据 {ListNode* tail phead-prev;ListNode* newnode BuyListNode(x);//第一个链接tail-next newnode;newnode-prev tail;//第二个链接phead-prev newnode;newnode-next phead; }4.尾删数据 这里需要两次进行断言 代码如下示例 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; }5.打印双向链表中数据 代码如下示例 void ListPrint(ListNode* phead)//打印数据 {assert(phead);ListNode* cur phead-next;while (cur ! phead){printf(%d , cur-data);cur cur-next;}printf(\n); }6.头插数据 头插数据也是很简单的一个接口链接两次即可如下图 代码如下示例 void ListPushFront(ListNode* phead, LTDataType x)//头插 {assert(phead);ListNode* newNode BuyListNode(x);ListNode* next phead-next;phead-next newNode;newNode-prev phead;newNode-next next;next-prev newNode; }7.头删数据 在头删数据时和尾删数据一样都需要进行两次断言如下图 代码如下示例 void ListPopFront(ListNode* phead)//头删 {assert(phead);assert(phead-next ! phead);ListNode* next phead-next;ListNode* nextNext next-next;phead-next nextNext;nextNext-prev phead;free(next); }8.查找结点位置 这个比较简单和单链表一样直接用cur遍历即可直接上代码 代码如下示例 ListNode* ListFind(ListNode* phead, LTDataType x) {assert(phead);ListNode* cur phead-next;while (cur ! phead){if (cur-data x){return cur;}cur cur-next;}return NULL; }9.在pos位置之前插入 代码如下示例 void ListInsert(ListNode* pos, LTDataType x)//pos位置之前插入 {assert(pos);ListNode* newNode BuyListNode(x);ListNode* posPrev pos-prev;// posPrev newnode posposPrev-next newNode;newNode-prev posPrev;newNode-next pos;pos-prev newNode; }根据ListInsert接口我们可以把头插和尾插进行改版如下图 10.删除pos位置 代码如下示例 void ListErase(ListNode* pos)//删除pos位置 {assert(pos);ListNode* prev pos-prev;ListNode* next pos-next;free(pos);pos NULL;prev-next next;next-prev prev; }11.销毁双向链表 代码如下示例 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; }三、源代码展示 1.test.c测试主函数 代码如下示例 #include list.h void Testlist1() {ListNode* n1 ListInit();ListPushBack(n1, 1);//尾插ListPushBack(n1, 2);//尾插//ListPushBack(n1, 3);//尾插//ListPushBack(n1, 4);//尾插//ListPushBack(n1, 5);//尾插//ListPopFront(n1);//头删//ListPopBack(n1);//尾删//ListPushFront(n1, 0);//头插ListPrint(n1); } void Testlist2() {ListNode* n1 ListInit();ListPushBack(n1, 1);//尾插ListPushBack(n1, 2);//尾插ListPushBack(n1, 3);//尾插ListPushBack(n1, 4);//尾插ListPushBack(n1, 5);//尾插ListNode* p ListFind(n1, 5);printf(%d \n, p-data); } void Testlist3() {ListNode* n1 ListInit();ListPushBack(n1, 1);//尾插ListPushBack(n1, 2);//尾插ListPushBack(n1, 3);//尾插ListPushBack(n1, 4);//尾插ListPushBack(n1, 5);//尾插//ListNode* p ListFind(n1, 5);//ListInsert(p, 0);ListDestory(n1);ListPrint(n1); } int main() {//Testlist1();//Testlist2();Testlist3();return 0; }2.List.h接口函数的声明 代码如下示例 #include stdio.h #include stdlib.h #include assert.h #include errno.h typedef int LTDataType; typedef struct ListNode {LTDataType data;struct ListNode* prev;struct ListNode* next; }ListNode; ListNode* ListInit();//初始化双向链表 void ListPushBack(ListNode* phead, LTDataType x);//尾插 void ListPopBack(ListNode* phead);//尾删 void ListPushFront(ListNode* phead, LTDataType x);//头插 void ListPopFront(ListNode* phead);//头删 void ListPrint(ListNode* phead);//打印 ListNode* ListFind(ListNode* phead, LTDataType x);//查找数据 void ListInsert(ListNode* pos, LTDataType x);//pos位置之前插入 void ListErase(ListNode* pos);//删除pos位置 void ListDestory(ListNode* phead);//销毁双向链表3.List.c接口函数的实现 代码如下示例 #include list.h ListNode* ListInit() {ListNode* p (ListNode*)malloc(sizeof(ListNode));if (p NULL){perror(errno);}ListNode* phead p;phead-next phead;phead-prev phead;return phead; } ListNode* BuyListNode(LTDataType x) {ListNode* p (ListNode*)malloc(sizeof(ListNode));if (p NULL){perror(errno);}ListNode* newNode p;newNode-data x;newNode-next NULL;newNode-prev NULL;return newNode; } void ListPushBack(ListNode* phead, LTDataType x)//尾插数据 {ListNode* tail phead-prev;ListNode* newnode BuyListNode(x);//第一个链接tail-next newnode;newnode-prev tail;//第二个链接phead-prev newnode;newnode-next phead;//ListInsert(phead, x); } void ListPrint(ListNode* phead)//打印数据 {assert(phead);ListNode* cur phead-next;while (cur ! phead){printf(%d , cur-data);cur cur-next;}printf(\n); } 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* newNode BuyListNode(x);ListNode* next phead-next;phead-next newNode;newNode-prev phead;newNode-next next;next-prev newNode;//ListInsert(phead-next, x); } void ListPopFront(ListNode* phead)//头删 {assert(phead);assert(phead-next ! phead);ListNode* next phead-next;ListNode* nextNext next-next;phead-next nextNext;nextNext-prev phead;free(next); } ListNode* ListFind(ListNode* phead, LTDataType x) {assert(phead);ListNode* cur phead-next;while (cur ! phead){if (cur-data x){return cur;}cur cur-next;}return NULL; } void ListInsert(ListNode* pos, LTDataType x)//pos位置之前插入 {assert(pos);ListNode* newNode BuyListNode(x);ListNode* posPrev pos-prev;// posPrev newnode posposPrev-next newNode;newNode-prev posPrev;newNode-next pos;pos-prev newNode; } void ListErase(ListNode* pos)//删除pos位置 {assert(pos);ListNode* prev pos-prev;ListNode* next pos-next;free(pos);pos NULL;prev-next next;next-prev prev; } 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; }总结 以上就是今天要讲的内容本文介绍双向链表的接口实现附图解和源码。 如果我的博客对你有所帮助记得三连支持一下感谢大家的支持
http://www.w-s-a.com/news/630444/

相关文章:

  • 君山区建设局网站风铃微网站怎么做
  • 购物网站销售管理合肥网络推广平台
  • 网站建设规划书txt微盘注册帐号
  • 小说网站开发实训报告企业网盘收费标准
  • mvc网站开发医疗医院网站建设
  • 天津市建设厅官方网站wordpress设置404
  • 贵阳好的网站建设免费正能量网站下载ww
  • 免费学习的网站平台自建站seo如何做
  • 海南三亚做网站公众号版面设计创意
  • 学校网站建设目的与意义合肥网页定制
  • 网站查询地址网站建设与维护费用
  • 做网站哪些软件比较好合肥外贸网站建设公司
  • 建网站需要哪些条件专业网站设计报价
  • 定制网站开发技术化妆品的网站布局设计图片大全
  • 网站模糊设计发布产品的免费平台有哪些
  • 网站建站什么目录桂林网站建设内容
  • 光明新区城市建设局网站长沙营销型网站制作费用
  • 网站建设制度制定wordpress主题哥
  • 门户网站的种类php网站开发实训心得
  • 流程图制作网页网络优化seo
  • 个人公益网站怎么制作wordpress flat theme
  • 做营销型网站的公司篇高端网站愿建设
  • 五莲网站建设维护推广凡科做网站的方法
  • 山东省住房建设厅网站首页网站文章更新怎么通知搜索引擎
  • 商务网站的可行性分析包括大流量网站 优化
  • 推广网站有效的方法网站数据统计
  • 自建视频网站WordPress数据库添加管理员
  • 新民电商网站建设价格咨询网站建设高效解决之道
  • 做网站需要哪些步骤网站设计介绍
  • 物流网站制作目的国外中文网站排行榜单