11-数据结构-双链表的创建-输出-初始化-插入-删除

2023-11-14

问题:

        双链表的创建-输出-初始化-插入-删除

思路:

  1. 搞清楚双链表是怎么样的,多了一个前指针。
  2. 此外每次链接的时候,都是先连接好后面的再连接前面的。

直接看代码吧:

代码如下:

#include <stdio.h>
#include <malloc.h>
typedef struct dnode  //创建双链表 
{
	int data;
	dnode *next,*prior;
	
}dnode,*dlinklist;
bool inidnode(dlinklist &l) //初始化双链表 
{
	if(l==NULL)
	return false;
	l=(dlinklist)malloc(sizeof(dnode));
	l->next=NULL;
	l->prior=NULL;
	return true;
}
bool insertdlist(dnode *l,dnode *s) //在l结点后插入结点s 
{
	if(l==NULL)
	return false;
	s->next=l->next;  //s指针域指向l的后继节点 
	if(l->next!=NULL) //若l后继节点不是空的,则进行下面操作 (防止出现尾部) 
		l->next->prior=s;  //给l后继节点的前指针域链接到s 
	s->prior=l;         //然后链接前面的,给s的前指针域连接到l 
	l->next=s;          //再给l的后指针域连接到s 
	return true;
} 
dlinklist creatdlist(dlinklist &l)  //创建双链表 
{
	l=(dlinklist)malloc(sizeof(dnode));
	l->next=NULL;
	l->prior=NULL;
	dnode* s;
	int x;
	scanf("%d",&x);
	while(x!=9999)
	{
		s=(dnode*)malloc(sizeof(dnode));
		s->data=x;
		s->next=l->next;
		if(l->next!=NULL)
		l->next->prior=s;
		s->prior=l;
		l->next=s;
		scanf("%d",&x);
	}
	
	return l;
}
bool deletedlist(dnode *p)//删除p结点的后继节点 
{
	if(p==NULL)
	return false;
	dnode *q=p->next;   //q表示所需要删除的p的后继节点 
	p->next=q->next;
	if(q->next!=NULL)
	{
		q->next->prior=p;
	}
	free(q); 
}
void destorydlist(dlinklist &l)
{
	while(l->next!=NULL)
	deletedlist(l);
	free(l);
}
void printfdlist(dlinklist &l)  //输出双链表 
{
	dnode* s;
	s=l->next;//s指针指向l的第一个结点    
	while(s!=NULL)
	{
		printf("%d",s->data);
		s=s->next;//从s处往后遍历
		// s=s->prior;   //从s处往前遍历 
	}
}
int main()
{
	
	dlinklist l;
	l=creatdlist(l);
	printfdlist(l);
	destorydlist(l);
	printfdlist(l);//此时销毁掉了l,因此为脏数据 
	return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

11-数据结构-双链表的创建-输出-初始化-插入-删除 的相关文章

随机推荐

  • java.lang.NoSuchMethodError: org.apache.curator.framework.api.CreateBuilder.creatingParentsIfNeeded(...

    1 错误信息 java lang NoSuchMethodError org apache curator framework api CreateBuilder creatingParentsIfNeeded Lorg apache cu
  • shell无限死循环

    学习shell脚本 练习脚本时 每次测试脚本都需要重新打开文件 为了方便就想到了死循环 想到shell脚本是基于C语言和C 编写的 顺着想法试了一通C循环方法 没对一个 经过网上大佬们的文章学习 学习到了while循环和for循环 记录一下
  • 九、基本数据类型-浮点类型

    如果 我们 创建了 一个浮点类型的变量 那么 这个变量 就可以用来 存储 浮点类型的数据 也就是 含有小数数位的数据 如果 一个数字 含有 小数点 以及 后面的数位 那么 这个数字 就属于 浮点类型 如果 小数点前面 或者 后面的数位 是
  • Java8对list排序(正序倒序)

    话不多说直接上干货 这里我写了一个list数组里边add了三个Order实体 我的ucId price qty都是int类型 第一个实例 我对price进行从小到大的排序 我的price是int类型 显然这里的第一种方式已经给出提示了 让使
  • Matlab实现Bi-Kmeans算法(每行代码标注详细注解)

    逐行代码讲解Bi Kmeans算法的原理及其实现 后续将更新该算法的进一步优化的代码的讲解 目录 一 什么是Kmeans 算法 二 bi kmeans算法原理 三 bi kmeans算法代码解析 四 总结 一 什么是Kmeans 算法 K
  • 动态规划 Leetcode 322 Coin Change(零钱兑换)

    题目 给定不同面额的硬币 coins 和一个总金额 amount 编写一个函数来计算可以凑成总金额所需的最少的硬币个数 如果没有任何一种硬币组合能组成总金额 返回 1 链接 中文版 https leetcode cn com problem
  • mysql启动命令

    1 查看mysql版本 方法一 status 方法二 select version 2 Mysql启动 停止 重启常用命令 a 启动方式 1 使用 service 启动 root localhost service mysqld start
  • 清华大学,AIGC发展研究,162页PDF

    点击上方 Python与机器智能 选择 星标 公众号 第一时间获取价值内容 收集不宜 我将资料免费分享在我的星球 后续也将会持续更新 欢迎大家加入我的这个 AIGC与GPT 知识星球 价格便宜 目前已有近130人 作为一个大厂算法工程师和机
  • C++ 封装 类

    封装 可以达到 对外提供接口 屏蔽数据 对内开放数据 比如我们用struct封装的类 即知其接口 又可以直接访问其内部数据 这样却没有达到信息隐蔽的功效 而class则提供了这样的功能 屏蔽内部数据 对外开放接口 struct中所有行为和属
  • 渣硕2020暑期实习面经

    春招也基本结束了 拿了点offer 因为一开始就没有准备找区块链方向岗位 所以准备的还是研发岗 简历写了一些分布式 所以分布式理论问的也蛮多 感觉形势蛮严峻的 好多厂貌似都不开放暑期实习了 个人比较遗憾的就是微软笔试时候浏览器没搞好 导致没
  • 错误使用 network/subsasgn>network_subsasgn (line 550) net.IW{1,1} must be a 16-by-19 matrix. 出错 network

    该代码为基于PSO和BP网络的预测 清空环境 clc clear 读取数据 load CHE2 mat 节点个数 inputnum 17 hiddennum 16 outputnum 1 训练数据和预测数据 input train inpu
  • mysql 集群 一主两从环境测试,MHA主备切换

    目录 前言 1 相关安装文件 2 虚拟机 mysql数据库安装 2 1 安装VMware 15 以及 linux 操作系统 2 2 安装mysql数据库 2 2 1安装环境准备 2 2 2 mysql 数据库安装 2 3 克隆centos虚
  • Cmake零基础教程——常用语法命令

    编译选项 在cmake脚本中 设置编译选项有两种方式 1 可以通过add compile options命令 2 也可以通过set命令修改CMAKE CXX FLAGS或CMAKE C FLAGS 存在即合理 那么使用这两种方式存在怎样的区
  • ssh和ftp登录的几种方式

    ssh登录的几种方式 本文为https www bilibili com video av755468030 笔记 1 密码账号登录 ssh p 1234 name 目标ip p 为指定端口 name为用户名 2 使用公钥私钥登录 获取指定
  • IDEA中javaweb项目导入外部jar包

    IDEA中javaweb项目导入外部jar包 打开Project Structure 选中Modules 选择Dependencies 点击 选择要导入的jar包或jar包文件夹 选中要使用的jar包或jar包文件夹 点击ok 如果只是按照
  • excel导出功能

    安装excel所需依赖和按需加载 由于 Export2Excel不仅依赖js xlsx还依赖file saver和script loader 所以你先需要安装如下命令 npm install xlsx file saver S npm in
  • React传参和定义变量

    react 声明变量 react传参
  • 学习linux内核的经典书籍介绍

    有关内核的书籍可以用汗牛充栋来形容 不过只有一些经典的神作经住了考验 首先是5本久经考验的神作 个人概括为 2 1 2 第一个2是指2本全面讲解内核的书 中间的1指1本讲解驱动开发的书 后面的2则指2本有关内核具体子系统的书 你是否想到了某
  • vscode 静态语法检测插件C/C++ Advanced Lint,ubuntu20.04安装clang、cppcheck

    远程环境 ubuntu20 04 本地开发环境 windows 11 开发IDE vscode 一 ubuntu20 04安装clang 安装llvm apt get install llvm 2 安装clang apt get insta
  • 11-数据结构-双链表的创建-输出-初始化-插入-删除

    问题 双链表的创建 输出 初始化 插入 删除 思路 搞清楚双链表是怎么样的 多了一个前指针 此外每次链接的时候 都是先连接好后面的再连接前面的 直接看代码吧 代码如下 include