双链表的创建、测长、打印、插入和删除

2024-04-07 06:48

本文主要是介绍双链表的创建、测长、打印、插入和删除,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

内容RT,实现代码如下所示:

#include <iostream>
#include <stdio.h>
#include <string>using namespace std;typedef struct student
{int data;struct student *next;struct student *pre;
}dnode;// 建立双链表
dnode *creat()
{dnode *head, *p, *s;int x, cycle = 1;head = new dnode;p = head;while (cycle){cout << "Please input data for dnode : ";cin >> x;if (x != 0){s = new dnode;s->data = x;cout << x << endl;p->next = s;s->pre = p;p = s;} else{cycle = 0;}}head = head->next;head->pre = NULL;p->next = NULL;//cout << "Head data of dnode is " << head->data << endl;return head;
}//链表插入
dnode *Insert(dnode *head, int num)
{dnode *p0, *p1;p0 = new dnode;p0->data = num;p1 = head;while (p0->data > p1->data && p1->next != NULL){p1 = p1->next;}if (p0->data <= p1->data){if (p1 == head)// 头节点插入{p0->next = p1;p1->pre = p0;head = p0;} else//中间结点插入{p1->pre->next = p0;p0->next = p1;p0->pre = p1->pre; // 遗忘点p1->pre = p0;}} else// 尾部插入结点{p1->next = p0;p0->pre = p1;p0->next = NULL;}return head;
}// 双链表删除
dnode *del(dnode *head, int num)
{dnode *p1;p1 = head;while (num != p1->data && p1->next != NULL){p1 = p1->next;}if (p1->data == num){if (p1 == head)//首结点 head head->next {head = head->next;head->pre = NULL;delete p1;} else{if (p1->next == NULL)// 尾节点 p1->pre  p1  NULL{p1->pre->next = NULL;delete p1;} else//中间结点{p1->next->pre = p1->pre;p1->pre->next = p1->next;delete p1;}}} else{cout << "Please check out the data !" << endl;}return head;
}// 打印双链表
void PrintDL(dnode *head)
{dnode *p = head;int l = 0;while (p != NULL){p = p->next;l++;}cout << "The length of dnode is " << l << endl;p = head;for (int i = 0; i < l; i++){cout << "The dnode data is " << p->data << endl;p = p->next;}}int main()
{cout << "****创建双链表****" << endl;dnode *head = creat();cout << endl;cout << "****双链表测长和打印****" << endl;PrintDL(head);cout << endl;cout << "***双链表插入数据***" << endl;cout << "Please input the int data for ins operate : ";int Indata1 = 0;cin >> Indata1;head = Insert(head, Indata1);PrintDL(head);cout << endl;cout << "***双链表删除数据***" << endl;cout << "Please input the int data for del operate : ";int Indata2 = 0;cin >> Indata2;head = del(head, Indata2);PrintDL(head);cout << endl;return 0;
}

1.头结点插入和删除


2.中间结点插入和删除


3.尾结点插入和删除


这篇关于双链表的创建、测长、打印、插入和删除的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/881910

相关文章

Spring创建Bean的八种主要方式详解

《Spring创建Bean的八种主要方式详解》Spring(尤其是SpringBoot)提供了多种方式来让容器创建和管理Bean,@Component、@Configuration+@Bean、@En... 目录引言一、Spring 创建 Bean 的 8 种主要方式1. @Component 及其衍生注解

MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据

MySQL 临时表创建与使用详细说明

《MySQL临时表创建与使用详细说明》MySQL临时表是存储在内存或磁盘的临时数据表,会话结束时自动销毁,适合存储中间计算结果或临时数据集,其名称以#开头(如#TempTable),本文给大家介绍M... 目录mysql 临时表详细说明1.定义2.核心特性3.创建与使用4.典型应用场景5.生命周期管理6.注

mybatisplus的逻辑删除过程

《mybatisplus的逻辑删除过程》:本文主要介绍mybatisplus的逻辑删除过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录myBATisplus的逻辑删除1、在配置文件中添加逻辑删除的字段2、在实体类上加上@TableLogic3、业务层正常删除即

MySQL的触发器全解析(创建、查看触发器)

《MySQL的触发器全解析(创建、查看触发器)》MySQL触发器是与表关联的存储程序,当INSERT/UPDATE/DELETE事件发生时自动执行,用于维护数据一致性、日志记录和校验,优点包括自动执行... 目录触发器的概念:创建触www.chinasem.cn发器:查看触发器:查看当前数据库的所有触发器的定

MybatisPlus中removeById删除数据库未变解决方案

《MybatisPlus中removeById删除数据库未变解决方案》MyBatisPlus中,removeById需实体类标注@TableId注解以识别数据库主键,若字段名不一致,应通过value属... 目录MyBATisPlus中removeBypythonId删除数据库未变removeById(Se

创建springBoot模块没有目录结构的解决方案

《创建springBoot模块没有目录结构的解决方案》2023版IntelliJIDEA创建模块时可能出现目录结构识别错误,导致文件显示异常,解决方法为选择模块后点击确认,重新校准项目结构设置,确保源... 目录创建spChina编程ringBoot模块没有目录结构解决方案总结创建springBoot模块没有目录

Java实现预览与打印功能详解

《Java实现预览与打印功能详解》在Java中,打印功能主要依赖java.awt.print包,该包提供了与打印相关的一些关键类,比如PrinterJob和PageFormat,它们构成... 目录Java 打印系统概述打印预览与设置使用 PageFormat 和 PrinterJob 类设置页面格式与纸张

MySQL逻辑删除与唯一索引冲突解决方案

《MySQL逻辑删除与唯一索引冲突解决方案》本文探讨MySQL逻辑删除与唯一索引冲突问题,提出四种解决方案:复合索引+时间戳、修改唯一字段、历史表、业务层校验,推荐方案1和方案3,适用于不同场景,感兴... 目录问题背景问题复现解决方案解决方案1.复合唯一索引 + 时间戳删除字段解决方案2:删除后修改唯一字

IntelliJ IDEA2025创建SpringBoot项目的实现步骤

《IntelliJIDEA2025创建SpringBoot项目的实现步骤》本文主要介绍了IntelliJIDEA2025创建SpringBoot项目的实现步骤,文中通过示例代码介绍的非常详细,对大家... 目录一、创建 Spring Boot 项目1. 新建项目2. 基础配置3. 选择依赖4. 生成项目5.