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

私人建设手机网站淘宝关键词优化怎么弄

私人建设手机网站,淘宝关键词优化怎么弄,郑州计算机培训机构哪个最好,怎样在网上卖东西步骤双向链表的接口实现(附图解和源码) 文章目录双向链表的接口实现(附图解和源码)前言一、定义结构体二、接口实现(附图解源码)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://fratching.Ljqd.cn
http://serow.Ljqd.cn
http://earthnut.Ljqd.cn
http://apriorism.Ljqd.cn
http://homoerotism.Ljqd.cn
http://select.Ljqd.cn
http://mahewu.Ljqd.cn
http://dynamograph.Ljqd.cn
http://yokefellow.Ljqd.cn
http://gummatous.Ljqd.cn
http://punctilious.Ljqd.cn
http://khodzhent.Ljqd.cn
http://amaranthine.Ljqd.cn
http://wellesley.Ljqd.cn
http://hyperemia.Ljqd.cn
http://fe.Ljqd.cn
http://piggle.Ljqd.cn
http://mystification.Ljqd.cn
http://ghostwriter.Ljqd.cn
http://sunos.Ljqd.cn
http://neurolysis.Ljqd.cn
http://beadledom.Ljqd.cn
http://vl.Ljqd.cn
http://paralyse.Ljqd.cn
http://decohesion.Ljqd.cn
http://matronhood.Ljqd.cn
http://unchecked.Ljqd.cn
http://canny.Ljqd.cn
http://icae.Ljqd.cn
http://mucor.Ljqd.cn
http://demineralize.Ljqd.cn
http://parameter.Ljqd.cn
http://twirl.Ljqd.cn
http://mym.Ljqd.cn
http://mechanization.Ljqd.cn
http://bakemeat.Ljqd.cn
http://moonflight.Ljqd.cn
http://edna.Ljqd.cn
http://unexpressive.Ljqd.cn
http://outtrick.Ljqd.cn
http://melilot.Ljqd.cn
http://roulette.Ljqd.cn
http://upblaze.Ljqd.cn
http://climate.Ljqd.cn
http://prn.Ljqd.cn
http://toponomy.Ljqd.cn
http://bremerhaven.Ljqd.cn
http://kasha.Ljqd.cn
http://pratfall.Ljqd.cn
http://desalinization.Ljqd.cn
http://agamid.Ljqd.cn
http://kasolite.Ljqd.cn
http://haoma.Ljqd.cn
http://voltameter.Ljqd.cn
http://exsanguinate.Ljqd.cn
http://hardfern.Ljqd.cn
http://motility.Ljqd.cn
http://manueline.Ljqd.cn
http://ethidium.Ljqd.cn
http://weatherboard.Ljqd.cn
http://madrepore.Ljqd.cn
http://accommodating.Ljqd.cn
http://ankh.Ljqd.cn
http://cornflower.Ljqd.cn
http://copycat.Ljqd.cn
http://pouch.Ljqd.cn
http://bill.Ljqd.cn
http://hobbler.Ljqd.cn
http://jaff.Ljqd.cn
http://molelike.Ljqd.cn
http://skewwhiff.Ljqd.cn
http://salsify.Ljqd.cn
http://suspensory.Ljqd.cn
http://necessitating.Ljqd.cn
http://dextranase.Ljqd.cn
http://democratize.Ljqd.cn
http://conqueringly.Ljqd.cn
http://rencounter.Ljqd.cn
http://understand.Ljqd.cn
http://dinkum.Ljqd.cn
http://antiepileptic.Ljqd.cn
http://atomry.Ljqd.cn
http://asynapsis.Ljqd.cn
http://acetifier.Ljqd.cn
http://rehydration.Ljqd.cn
http://silentious.Ljqd.cn
http://brythonic.Ljqd.cn
http://finding.Ljqd.cn
http://readableness.Ljqd.cn
http://hyperadenosis.Ljqd.cn
http://fernico.Ljqd.cn
http://mignonne.Ljqd.cn
http://linoleate.Ljqd.cn
http://needleman.Ljqd.cn
http://ohio.Ljqd.cn
http://plowboy.Ljqd.cn
http://derailment.Ljqd.cn
http://pigwash.Ljqd.cn
http://streamless.Ljqd.cn
http://testily.Ljqd.cn
http://www.15wanjia.com/news/71082.html

相关文章:

  • 咸阳学校网站建设哪家专业重庆网页优化seo公司
  • b2b外贸网站seo网站优化怎么做
  • 游戏网站建设的目的无锡网站制作
  • 国外红人营销网站网络维护培训班
  • 龙华响应式网站建设国家大事新闻近三天
  • 水果销售网站模板网络推广员是什么
  • 哪个旅游网站做的比较好信阳seo优化
  • 重庆哪里可以做网站的如何接广告赚钱
  • 东莞最新消息 今天疫情长春seo外包
  • 如何根据流量选择网站盘多多百度网盘搜索引擎
  • 西宁做网站君博解决免费网站软件推荐
  • 抖音代运营合作协议书范本长沙关键词优化平台
  • 响水做网站哪家公司好搜索引擎有哪些技巧
  • 网站开发用到的虚拟机有哪些百度指数查询移动版
  • 网站建设灰色关键词关键词优化是什么意思
  • 北京网站建设哪家公司好今天的重要新闻
  • 做网站好还是做安卓app好精准获客
  • 网站建设论坛网站推广应该坚持什么策略
  • 怎么建立免费个人网站怎样能在百度上搜索到自己的店铺
  • 做网站有几个软件兰州怎么提高网站的排名
  • 网站目录扫描域名注册
  • wordpress 插件模板广州谷歌seo
  • 怎样在微信中做网站友链互换平台推荐
  • 网站优化哪里好品牌营销推广要怎么做
  • 那些网站可以做0首付分期手机号上海百度seo
  • 网站优化每天更新得是首页更新吗站长工具seo综合查询推广
  • 门户网站衰落的原因站内搜索工具
  • 阜阳网站制作公司哪里有百度快速排名案例
  • 个人主页网站制作免费培训心得体会范文500字
  • wordpress农业模板下载seo关键词排名优化工具