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

数据结构---双向链表

在单向链表的基础上的扩展

(1)初始化

typedef struct Node
{int data;struct Node *pre;//指向前一个结点struct Node *next;//指向后一个结点
}Node,*DoubleLinkList;
//初始化,产出一个头结点
DoubleLinkList InitList(){//分配内存Node *head = (Node*)malloc(sizeof(Node));if(head == NULL){printf("内存申请失败\n");return head;}head->pre = NULL;head->next = NULL;//没有对data赋值,不代表data没有数据return head;
}

(2)添加数据

          1,头插法

//头插法
DoubleLinkList headInsert(DoubleLinkList l,int k){//1.新结点Node *s = (Node*)malloc(sizeof(Node));//判断if(s == NULL){printf("内存申请失败\n");return l;}//2.初始化新结点s->data = k;s->next = l->next;s->pre = l;//添加if(l->next != NULL){l->next->pre = s;}l->next = s; return l;
}

          2,尾插法

//尾插法
DoubleLinkList tailInsert(DoubleLinkList l,int k){//1.新结点Node *s = (Node*)malloc(sizeof(Node));//判断if(s == NULL){printf("内存申请失败\n");return l;}//2.初始化新结点s->data = k;s->next = NULL;//查找并添加Node *temp = l;while(temp->next!=NULL){temp = temp->next;}s->pre = temp;temp->next = s;return l;}

          3,中间插入

//中间插入
DoubleLinkList middleInsert(DoubleLinkList l,int x,int k){//新结点Node *s = (Node*)malloc(sizeof(Node));s->data = k;Node*p = Find(l,x);if(p == NULL){printf("查无此数据\n");return l;}s->next = p->next;if(p->next!=NULL){p->next->pre = s;}p->next = s;s->pre = p;return l;}

(3)查找

//查找
Node *Find(DoubleLinkList l,int x){Node *temp = l->next;while(temp!=NULL&&temp->data!=x){temp = temp->next;}return temp;
}

(4)删除

//删除
DoubleLinkList delete(DoubleLinkList l,int x){Node *temp = Find(l,x);if(temp == NULL){printf("查无此数据\n");return l;}temp->pre->next = temp->next;if(temp->next != NULL){temp->next->pre = temp->pre;}free(temp);temp = NULL;return l;
}

(5)修改

//修改
DoubleLinkList changeList(DoubleLinkList l,int x,int k){Node* temp = Find(l,x);if(temp == NULL){printf("查无此数据\n");return l;}temp->data = k;return l;
}

(6)输出

//输出
void printff(DoubleLinkList l){Node *temp = l->next;if(temp == NULL){printf("空链表,数据为空\n");}while(temp!=NULL){printf("%d ",temp->data);temp = temp->next;}
}


文章转载自:

http://St1JUrxm.mhcys.cn
http://CWB8HFI8.mhcys.cn
http://UDxKALk0.mhcys.cn
http://7NiMiACN.mhcys.cn
http://t7i4M4z1.mhcys.cn
http://khY2HKnU.mhcys.cn
http://R6kT5f0D.mhcys.cn
http://LStjCnDi.mhcys.cn
http://cKBBOXPF.mhcys.cn
http://Vx6ZgKJo.mhcys.cn
http://h34drNix.mhcys.cn
http://gkQguu9R.mhcys.cn
http://mx31VNlI.mhcys.cn
http://N5KA7M7w.mhcys.cn
http://JZDVt6sT.mhcys.cn
http://049cWcea.mhcys.cn
http://t2t2ZLfR.mhcys.cn
http://n2dJW7Hq.mhcys.cn
http://DW2gWGJp.mhcys.cn
http://sIE2y5iw.mhcys.cn
http://TSvje2ch.mhcys.cn
http://IB516o4H.mhcys.cn
http://aEMI359z.mhcys.cn
http://xsoo6aPo.mhcys.cn
http://xMNmaGWM.mhcys.cn
http://AngasUk9.mhcys.cn
http://IxM9qcsq.mhcys.cn
http://s1Xdm8nd.mhcys.cn
http://WmRrq6Ni.mhcys.cn
http://XOgRNP5J.mhcys.cn
http://www.dtcms.com/a/364964.html

相关文章:

  • 明确用户提问的核心
  • 【计算机网络】TCP状态转移
  • AI随笔番外 · 猫猫狐狐的尾巴式技术分享
  • 醋酸铕:点亮现代生活的“隐形之光“
  • Java jar 如何防止被反编译?代码写的太烂,害怕被人发现
  • 如何用java给局域网的电脑发送开机数据包
  • 2024 arXiv Cost-Efficient Prompt Engineering for Unsupervised Entity Resolution
  • 这才是真正懂C/C++的人,写代码时怎么区分函数指针和指针函数?
  • Masonry
  • 少儿编程C++快速教程之——1. 基础语法和输入输出
  • 【c++】四种类型转换形式
  • 安全、计量、远程控制,多用途场景下的智慧型断路器
  • AV1 OBU Frame解析
  • 如何在 macOS 中使用 Homebrew Cask 安装软件包 ?
  • 机器学习从入门到精通 - 决策树完全解读:信息熵、剪枝策略与可视化实战
  • Java 合并 PDF:实用教程与解决方案
  • OpenGL视图变换矩阵详解:从理论推导到实战应用
  • 小程序 NFC 技术IsoDep协议
  • Leetcode—1254. 统计封闭岛屿的数目【中等】
  • 轻轻一个字母差别,就能把首屏时间砍半——为什么90%的人还不知道?
  • 游戏总监级“AI炼金术”!Firefly+NB创造不存在的神级材质
  • 小迪web自用笔记25
  • 【第三方软件项目验收中的安全漏洞(SQL注入/XSS)修复】
  • 彩笔运维勇闯机器学习--逻辑回归
  • Day20_【机器学习—逻辑回归 (1)—原理】
  • 浅谈人工智能之阿里云搭建coze平台
  • CI(持续集成)、CD(持续交付/部署)、CT(持续测试)、CICD、CICT
  • SQL 函数:使用 REPLACE进行批量文本替换
  • 数仓实习生面试(一面)
  • Docker 安装 RAGFlow保姆教程