c语言实现 双链表的操作——头插法、尾插法、查找、插入、删除

2023-05-16

双链表的插入操作:

#include <stdio.h>
#include<malloc.h>
typedef struct DNode {
	int data;
	struct DNode* prior, * next;
}DNode, * DLinkList;

//-------头插法---------
DLinkList insert_head(DLinkList DL) {
	DL = (DLinkList)malloc(sizeof(DNode));
	DL->next = NULL;	DL->prior = NULL;
	DLinkList s;
	int x;	scanf_s("%d", &x);
	while (x != -1) {
		s = (DLinkList)malloc(sizeof(DNode));
		s->data = x;
		s->next = DL->next;
		//插入第一个结点不需要此操作
		if (DL->next != NULL) {
			DL->next->prior = s;
		}
		DL->next = s;
		s->prior = DL;
		scanf_s("%d", &x);
	}

	return DL;
}

//-------尾插法---------
DLinkList insert_rear(DLinkList DL) {
	DL = (DLinkList)malloc(sizeof(DNode));
    //需要一个指针r始终指向尾结点
	DLinkList s, r = DL;		int x;
	DL->prior = NULL;
	scanf_s("%d", &x);
	while (x != -1) {
		s = (DLinkList)malloc(sizeof(DNode));
		s->data = x;
		r->next = s;
		s->prior = r;
		r = s;
		scanf_s("%d", &x);
	}
	//!!!!!!最后别忘了把r的next指针指向NULL
	r->next = NULL;

	return DL;
}

void printDNode(DLinkList DL) {
	DLinkList p = DL->next;
	while (p) {
		printf("%d\n", p->data);
		p = p->next;
	}
}
// 1 2 3 -1
int main() {
	DNode n;
	//DLinkList DL = insert_head(&n);
	DLinkList DL = insert_rear(&n);
	printDNode(DL);

	return 0;
}

 双链表按序号查找元素:

DLinkList findByID(DLinkList DL, int i) {
	//查找第i个位置的元素,从0开始
	DLinkList p=DL->next;
	int j = 0;
	if (i < 0) return NULL;
	while ( p && j < i) {
		p = p->next;
		j++;
	}
	return p;
}

int main() {
	DNode n;
	DLinkList DL = insert_rear(&n);
	printDNode(DL);

	DLinkList search = findByID(DL, 2);
	printf("a[i]=%d", search->data);
	return 0;
}

在链表中第i个位置插入元素:

void insertByID(DLinkList DL, int i, int x) {
	//在第i个位置插入x,下标从0开始;
	DLinkList s = DL;
	DLinkList p;	//指向要插入的结点
	p = (DLinkList)malloc(sizeof(DNode));
	p->data = x;
	if (i < 0)		return;
	int j = 0;
	while (j < i) {
		s = s->next;
		j++;
	}
	p->next = s->next;
	s->next -> prior = p;
	s->next = p;
	p->prior = s;

}

int main() {
	DNode n;
	DLinkList DL = insert_rear(&n);

	insertByID(DL, 0, 100);
	printDNode(DL);
	return 0;
}

 或者利用findByID()函数找出第i-1个元素,并把他的指针返回给s

void insertByID(DLinkList DL, int i, int x) {
	//在第i个位置插入x,下标从0开始;
	DLinkList s;
	if (i == 0) s = DL;
	else s = findByID(DL, i - 1);
	DLinkList p;	//指向要插入的结点
	p = (DLinkList)malloc(sizeof(DNode));
	p->data = x;
	if (i < 0)		return;

	p->next = s->next;
	s->next -> prior = p;
	s->next = p;
	p->prior = s;

}

删除第i个元素:

void deleteByID(DLinkList DL, int i) {
	//删除第i个元素,从0开始计数
	DLinkList p;
	if (i == 0)	p = DL;
	else p = findByID(DL, i - 1);
	DLinkList q = p->next;
	//删除元素不存在
	if (q == NULL)	return;
	//假如删除最后一个结点,则不需要此操作
	if(q->next!=NULL)
		q->next->prior = p;
	p->next = q->next;
	free(q);

}

int main() {
	DNode n;
	DLinkList DL = insert_rear(&n);
	printf("-----delete-----\n");
	deleteByID(DL, 0);
	printDNode(DL);

	return 0;
}

 

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

c语言实现 双链表的操作——头插法、尾插法、查找、插入、删除 的相关文章

  • 开发技术-Error: Invalid or corrupt jarfile

    1 现状 xff1a 正常的发代码 xff0c 传到服务器后启动报错 奇了怪了 xff0c 怎么会报这个错 xff0c 也没改什么东西 比较了一下jar包 xff0c 发现服务器上的jar包小了 按理说通过xftp上传不会出现这个情况 2
  • CoreData的外键关联

    创建工程时勾选Use Core Data自动生成以下方法 AppDelegate h span class hljs preprocessor import span class hljs title lt UIKit UIKit h gt
  • 方向梯度直方图(Histogram Of Gradient)详解

    特征描述子 Feature Descriptor 特征描述子就是图像的表示 xff0c 抽取了有用的信息 xff0c 丢掉了不相关的信息 通常特征描述子会把一个w h 3 宽高3 xff0c 3个channel 的图像转换成一个长度为n的向
  • 第五周 D - 滑动窗口

    题目描述 ZJM 有一个长度为 n 的数列和一个大小为 k 的窗口 窗口可以在数列上来回移动 现在 ZJM 想知道在窗口从左往右滑的时候 xff0c 每次窗口内数的最大值和最小值分别是多少 例如 xff1a 数列是 1 3 1 3 5 3
  • Nextcloud基本使用方法

    下载和安装 Nextcloud 客户端 客户端可以在这里下载https nextcloud com install xff0c 您可以选择 Desktop 或者 Mobile 如果您是 Windows 用户 xff0c 可以直接点击这个链接
  • 一本通题解——1437:扩散

    题目链接 一本通OJ xff1a http ybt ssoier cn 8088 problem show php pid 61 1437 我的OJ xff1a http 47 110 135 197 problem php id 61 4
  • Ubuntu使用命令行配置WIFI

    事情起因 前面几天 xff0c 办公室切换网络 xff0c 导致老网络断线 今天办公地点调整了网络结构 xff0c 我的一个放在办公室拥有公网 IP 的 Ubuntu 18 04 服务器连接的内网 WIFI 发生变化 xff0c 需要用命令
  • 洛谷U149013题解

    洛谷U149013题解 前言题目解析逼死人的暴力正经的解析第一个程序第二个程序第三个程序第四个程序第五个程序第六个程序第七个程序第八个程序PS第九 十个程序 题解 结语 前言 今天我突发奇想 xff0c 在洛谷上创建了一道题目 xff0c
  • Codeforces游玩攻略

    Codeforces游玩攻略 1 简介2 网址3 使用1 主界面2 社区3 比赛名字颜色比赛种类比赛流程关于Codeforces赛制 xff1a 如何读懂排行榜Rating 4 题解 最后鸣谢 1 简介 Codeforces是全球最著名的在
  • MySQL连接不了本地服务器原因

    1 运行进入数据库报错 xff1a Could not acquire management access for administration RuntimeError Target host is configured as Windo
  • springboot、SpringCloud 常见版本版本介绍

    官方版本号 xff08 2023年5月6日 xff09 Spring Boot 版本说明 Spring Boot的版本号分析 xff1a Spring Boot的版本以数字表示 例如 xff1a Spring Boot 2 4 1 RELE
  • 热点账户及解决方案

    百度安全验证 我们经常听到一个概念 热点账户 xff0c 可能很多人不陌生什么是热点账户 xff0c 但是对如何解决热点账户问题并没有系统性的完整的思路 事物总是发展的 xff0c 事物所处的场景也是在不断变化的 xff0c 基于有限的经验
  • 笔记:vue 打包忽略部分文件检查。

    在需要 忽略的文件中加入 eslint disable 1 js 文件 首行直接加入 eslint disable 2 vue文件 script 中加入 eslint disable 3 配置文件进行配置 看大佬文章 vue中指定文件或文件
  • 公有云相关概念——region和AZ、VPC、安全组、公有云网络架构

    https www cnblogs com yunjisuanchengzhanglu p 16164376 html 一 region和az region xff08 区域 xff09 xff1a 一个region可以理解为一个大的独立的
  • Java四大引用详解:强引用、软引用、弱引用、虚引用

    Java四大引用详解 xff1a 强引用 软引用 弱引用 虚引用 java 软引用 mikechen的互联网架构的博客 CSDN博客 1 Java引用 从JDK 1 2版本开始 xff0c 对象的引用被划分为4种级别 xff0c 从而使程序
  • 延时队列方案选择及优缺点分析

    1 前言 https juejin cn post 6987233263660040206 在电商 支付等领域 xff0c 往往会有这样的场景 xff0c 用户下单后放弃支付了 xff0c 那这笔订单会在指定的时间段后进行关闭操作 订单关闭
  • 定时任务方案的正确选取

    在电商 支付等领域 xff0c 往往会有这样的场景 xff0c 用户下单后放弃支付了 xff0c 那这笔订单会在指定的时间段后进行关闭操作 xff0c 细心的你一定发现了像某宝 某东都有这样的逻辑 xff0c 而且时间很准确 xff0c 误
  • Redis教程总结

    Redis redis 时间轮 夜猫吃夜宵的博客 CSDN博客 一 Redis特性 快 为什么快 xff1f 基于内存操作 xff0c 操作不需要跟磁盘交互 本身就是k v结构 xff0c 类似hashMap xff0c 所以查询速度接近O
  • Shiro和Spring Security对比(3)

    https www cnblogs com hanease p 15906339 html 1 两个基本的概念 安全实体 xff1a 系统需要保护的具体对象数据权限 xff1a 系统相关的功能操作 xff0c 例如基本的CRUD 1 2 S
  • springboot整合邮箱功能一(实战)

    背景介绍 邮件发送其实是一个非常常见的需求 xff0c 用户注册 xff0c 找回密码 校验码等地方 如果使用短信还需缴费 这里发送者邮箱选用了163邮箱 1 pom xml文件的引用 lt xml version 61 34 1 0 34

随机推荐

  • Apache Camel简介

    Apache Camel简介 abinge89的博客 CSDN博客 1 什么是Camel 1 1 来源 Camel项目开始于2007年初 xff0c 虽然年轻 xff0c 但它已经是一个成熟的开源项目 xff0c 基于自由的Apache 2
  • springboot整合邮箱功能二(普通邮件, html邮件, thymleaf邮件)

    SpringBoot整合Email发送邮件 空 白 xfffd 的博客 CSDN博客 https www cnblogs com erlou96 p 16878192 html label1 5 1 准备工作 1 1 qq邮箱设置 本文默认
  • MySQL中Truncate用法详解

    MySQL中Truncate用法详解 Mysql 脚本之家 前言 xff1a 当我们想要清空某张表时 xff0c 往往会使用truncate语句 大多时候我们只关心能否满足需求 xff0c 而不去想这类语句的使用场景及注意事项 本篇文章主要
  • cesium 移除实体方法

    问题 xff1a cesium 移除entity 后 xff0c viewer entities values没有任何entity时 xff0c 图层上还会显示 解决方法 xff1a 无效方法 1 模拟代码 viewer entities
  • 时间轮算法在Netty和Kafka中的应用

    1 时间轮算法 时间轮算法 xff08 Time Wheel Algorithm xff09 是一种高效的定时器实现方式 xff0c 主要用于高并发下的定时任务调度 它利用了循环数组的思想 xff0c 将时间轴分成一个一个的时间槽 xff0
  • RabbitMQ事务概述

    RabbitMQ支持事务 transaction xff0c RabbitMQ中与事务机制有关的方法有三个 xff1a txSelect txCommit 以及txRollback xff08 1 xff09 txSelect用于将当前ch
  • 消息队列原理和应用场景简介

    一 消息队列的场景 异步处理流量控制服务解耦发布订阅高并发缓冲 1 1 异步处理 主要场景 xff1a 短信通知 终端状态推送 App推送 用户注册等 秒杀系统为例 更快速返回结果 xff1b 减少等待 xff0c 实现并发处理 xff0c
  • 消息队列-ZeroMQ

    一 吞吐量和延时性 二 ZeroMQ解决传统网络编程的问题 调用的socket接口较多 xff1b TCP是一对一的连接 xff1b 一对多 xff0c reactor模式编程需要关注很多socket细节问题 xff1b 不支持跨平台编程
  • SpringSecurity登录原理(源码级讲解

    SpringSecurity登录原理 xff08 源码级讲解 xff09 简书 一 简述 首先会进入UsernamePasswordAuthenticationFilter并且设置权限为null和是否授权为false xff0c 然后进入P
  • Spring Security生命周期简述

    Spring Security系列 Spring Security生命周期之起源 springsecurity生命周期 马各马它的博客 CSDN博客 Spring Security系列 Spring Security生命周期之诞生 spri
  • @Import注解详解

    64 Import注解详解 中年危机的老男人的博客 CSDN博客 一 64 Import注解提供了三种用法 64 Import一个普通类 spring会将该类加载到spring容器中 64 Import一个类 xff0c 该类实现了Impo
  • Spring Security简单身份认证配置(thymleaf,密码加密,JDBC,LDAP)

    Spring Security系列 Spring Security简单身份认证配置 二 websecurityconfig login post 马各马它的博客 CSDN博客 一 认证 登录 流程 引用spring boot starter
  • 系统编程__2__父子进程的创建和回收

    系统编程 这里写的是对于小白来说更多的了解系统编程的文章 xff0c 有写的不对的地方还恳请各位大佬指出错误 xff0c 小编一定会多多采纳 手动多谢 那么 xff0c 上一次我们稍微了解了一下关于系统编程的一些主要内容 没有看到的童鞋还请
  • MobaXterm工具

    1 登录 1 1 远程登录 1 1 1 内建命令行模式 1 点击图标 xff0c 在弹出的窗口中选择SSH连接 xff0c 然后填入Remote host IP及用户名 2 点击确认后输入密码即可 1 1 2 Gnome模式 类似VNC 1
  • window bat cmd 获取cpu 利用率(使用率) 方式收集

    window bat cmd 获取cpu 利用率 使用率 跟 性能计数器一致 xff0c 方式收集 1 typeperf 1秒一输出 typeperf 34 processor total processor time 34 若是只要执行一
  • pytesseract提取识别图片中的文字

    目录 1 获取tesseract版本号 2 获取语言包列表 3 识别图片中的文字 4 获取图片中文字的详细信息 5 识别图片中的文字和位置 6 识别osd信息 7 识别并生成xml文件 避坑指南 xff1a pytesseract是对Tes
  • python中的鸭子类型

    浅层理解 走路像鸭子 xff0c 说话像鸭子 xff0c 它就是鸭子 深层理解 指的是面向对中 xff0c 子类不需要显示的继承某个类 xff0c 只要有某个的方法和属性 xff0c 那我就属于这个类 编程语言中的鸭子类型说明 假设有个鸭子
  • Ubuntu 使用 du 查看某个文件夹大小

    在 Ubuntu 系统中 xff0c 你可以使用 du 命令来查看文件夹的大小 例如 xff0c 如果你想查看文件夹 var log 的大小 xff0c 你可以使用如下的命令 xff1a du sh var log 其中 xff0c s 选
  • istio 负载均衡功能验证

    前提 xff1a 可参考官网文档进行前期工作 xff1a https istio io latest zh docs setup getting started 1 K8S 集群已经部署了 istio 2 已部署了官网 bookinfo 相
  • c语言实现 双链表的操作——头插法、尾插法、查找、插入、删除

    双链表的插入操作 xff1a include lt stdio h gt include lt malloc h gt typedef struct DNode int data struct DNode prior next DNode