c语言 双向链表增删修查,手写双链表,并实现增删改查
手写双链表,并实现增删改查
public class DoublyLinkedListT {
// 一个空的头节点
private final Node head = new Node(null);
@Getter
private int size = 0;
public DoublyLinkedList() {
head.pre = head;
head.next = head;
}
@SafeVarargs
public final void addAll(T... data) {
if (data == null) return;
for (T datum : data) {
add(datum);
}
}
public void add(T datum) {
head.pre.next = new Node(datum, head.pre, head);
head.pre = head.pre.next;
head.pre.next = head;
size++;
}
public void remove(int index) {
remove(getNode(index));
}
private void remove(Node node) {
node.next.pre = node.pre;
node.pre.next = node.next;
size--;
}
public void remove(T datum) {
Node i = head.next;
while (i != head) {
if (i.data == datum) {
remove(i);
break;
}
i = i.next;
}
}
public void set(int index, T data) {
getNode(index).setData(data);
}
public int indexOf(T datum) {
Node i = head.next;
int index = 0;
while (i != head) {
if (i.data == datum) {
break;
}
i = i.next;
index++;
}
if (index = size)
return -1;
return index;
}
public T get(int index) {
return getNode(index).data;
}
private Node getNode(int index) {
if (index = size)
throw new IndexOutOfBoundsException("size:" + size + "。index:" + index);
Node node = head;
while (index = 0) {
node = node.next;
index --;
}
return node;
}
@Override
public String toString() {
Node i = head.next;
StringBuilder builder = new StringBuilder();
while (i != head) {
builder.append(" ").append(i.data).append(" ");
i = i.next;
}
return "DoublyLinkedList{ " + builder.toString() + " }";
}
@Data
@NoArgsConstructor
@AllArgsConstructor
private class Node {
private T data;
private Node pre;
private Node next;
public Node(T data) {
this.data = data;
}
public Node(T data, Node pre) {
this.data = data;
this.pre = pre;
}
}
}
单元测试:
class DoublyLinkedListTest {
@Test
void addAll() {
DoublyLinkedListInteger list = new DoublyLinkedList();
list.addAll(1,2,3);
System.out.println(list.toString());
}
@Test
void add() {
DoublyLinkedListInteger list = new DoublyLinkedList();
list.add(3);
System.out.println(list.toString());
}
@Test
void remove() {
DoublyLinkedListInteger list = new DoublyLinkedList();
list.addAll(1,2,3);
list.remove(0);
System.out.println(list.toString());
}
@Test
void testRemove() {
DoublyLinkedListInteger list = new DoublyLinkedList();
Integer i1 = new Integer(1), i2 = new Integer(2);
list.addAll(i1, i2);
list.remove(new Integer(1));
System.out.println(list.toString());
}
@Test
void set() {
DoublyLinkedListInteger list = new DoublyLinkedList();
list.addAll(1,2,3);
list.set(0, 11);
System.out.println(list.toString());
}
@Test
void indexOf() {
DoublyLinkedListInteger list = new DoublyLinkedList();
Integer i1 = new Integer(1), i2 = new Integer(2);
list.addAll(i1, i2);
System.out.println(list.indexOf(new Integer(1)));
}
@Test
void get() {
DoublyLinkedListInteger list = new DoublyLinkedList();
Integer i1 = new Integer(1), i2 = new Integer(2);
list.addAll(i1, i2);
System.out.println(list.get(0));
}
@Test
void getSize() {
DoublyLinkedListInteger list = new DoublyLinkedList();
list.addAll(1,2,3);
System.out.println(list.toString());
System.out.println(list.getSize());
}
}
手写双链表,并实现增删改查 相关文章
30 Spring Cloud使用Turbine实现集群监控
前面我们实现了对单个服务实例的监控,当然在实际应用中,单个实例的监控数据没有多大的价值,我们更需要的是一个集群系统的监控信息,这时我们就需要 Turbine。 Turbine 是用来监控集群的,通过它来汇集监控信息,并将聚合后的信息提供给 Hystrix Dashboard
vue springboot 实现excel导出
实现excel 导出 一、需求 实现 excel 的导出 二、技术 选用 easypoi 官网: https://gitee.com/lemur/easypoi#http://doc.wupaas.com/docs/easypoi/easypoi-1c0u4mo8p4ro8 三、实现 1、前端 el-button type="success" @click="handleExport"导出i class="el-
手写单链表,并实现元素逆置
public class SinglyLinkedListT { // 一个空的头节点 private final Node head = new Node(null); private Node tail = head; @SafeVarargs public final void addAll(T... data) { if (data == null) return; for (T datum : data) { tail.next = new Node
QEMU中VIRTIO实现
http://39.107.46.219/qemu%E8%99%9A%E6%8B%9F%E5%8C%96%E5%AE%89%E5%85%A8%EF%BC%88%E4%BA%8C%EF%BC%89/ VIRTIO设备 ? 了解QEMU和KVM交互的知道,客户机的IO操作通过KVM处理后再交由QEMU,反馈也如此。这种纯软件的模拟IO设备,增加了IO的延迟。 ? 而Virtio
redis6.0.5之zset阅读笔记3--跳跃列表(zskiplist)之代码实现2-范围相关函数
***********************************************************************************************/* Struct to hold a inclusive/exclusive range spec by score comparison. */通过数值比较 用来保持 闭/开区间 范围确定typedef struct { double min, m
写一个计算器,实现加减乘除功能,并且能够循环接收新数据,通过用户交互实现
1 //写一个计算器,实现加减乘除功能,并且能够循环接收新数据,通过用户交互实现 2 3 import java.util.Scanner; 4 5 public class Demo07 { 6 public static void main(String[] args) { 7 Scanner scanner = new Scanner(System.in); 8 while (scanner.ha
26 Spring Cloud使用Hystrix实现容错处理
创建一个新的Maven项目 hystrix-feign-demo,增加 Hystrix 的依赖 dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-starter-netflix-hystrix/artifactId/dependency 在启动类上添加 @EnableHystrix 或者 @EnableCircuitBreaker
Vue中使用animate.css库
先来看一个例子,要实现的效果是文字弹跳放大在缩小显现和隐藏: !DOCTYPE htmlhtml lang="en"head meta charset="UTF-8" title在vue中使用Animate.css库/title link rel="stylesheet" href="../animate.css" script src="../vue.js"/script style @keyframe
【转载】python实现高质量PDF转PNG
换工作了,要转移党组织关系,然后介绍信pdf不知道为什么打印出来是乱码,所以没办法需要转成图片格式。 wps需要收费,嗨格式需要收费,无奈使用python大法了。 转载知乎链接:https://zhuanlan.zhihu.com/p/102742847 1、安装第三方包 pip install fitzpip
MyBatis-Plus 如何实现连表查询
MyBatis-Plus 如何实现连表查询 项目地址: gitee github 安装 在项目中添加依赖,依赖已经包含了mybatis-plus-boot-starter3.4.2 依赖后无需再次引入mybatis-plus dependency groupIdcom.github.yulichang/groupId artifactIdmybatis-plus-join/artifactId ve
c语言 双向链表增删修查,手写双链表,并实现增删改查相关推荐
- c语言实现双链表的基本操作—增删改查
//初始化 Node*InitList() {Node*head=(Node*)malloc(sizeof(Node));if(NULL==head){printf("内存分配失败!&quo ...
- Mybaits:凡人修仙秘籍——第二话:MyBatis 的增删改查
目录 一.创建用户.角色和权限表 二.创建实体类 三.使用XML方式 四.select用法--单表查询 1.配置UserMapper 2.写出对应的接口类 3.关于userMa ...
- 学习手扎20190313——dick操作(增删改查)
dick # 数据类型划分:可变数据类型,不可变数据类型 # 不可变数据类型:元祖 bool int str 可哈希 # 可变数据类型:list dick set 不可哈希# 增删改查dic1 = { ...
- 单链表LinkedList的增删改查
数组作为数据存储结构有一定的缺陷.在无序数组中,搜索性能差,在有序数组中,插入效率又很低(插入位置后面的元素需要集体后移),而且这两种数组的删除效率(集体前移)都很低,并且数组在创建后,其大小是固定了 ...
- thinkphp连mysql增删改查_ThinkPHP5.1框架数据库链接和增删改查操作示例
本文实例讲述了ThinkPHP5.1框架数据库链接和增删改查操作.分享给大家供大家参考,具体如 本文实例讲述了ThinkPHP5.1框架数据库链接和增删改查操作.分享给大家供大家参考,具体如下: 一. ...
- python增删改查人名管理_python3字典列表的增删改查(名片管理系统函数版)
1.列表的增删改查 增加:有三种添加方式(append.insert.extend) #append:把添加的内容直接添加到列表的末尾 a=[1,2,3] a.append('abc') print( ...
- java mongodb 增删改查_java操作mongodb:基本的增删改查
java操作mongodb的代码,包含基本的增删改查操作 获取数据库连接工具类 package com.liuc.db;import java.net.UnknownHostException;imp ...
- flask对mysql数据库增删改查_Flask学习(三) - Flask-SQLAlchemy对数据库增删改查
Flask-SQLAlchemy对数据库增删改查 安装 pip install flask-sqlalchemy 具体不多说了,主要是对数据库进行简单的增删改查,上代码,看注释 @app.route( ...
- php连接数据库实现增删改查,PHP连接数据库,实现最基本的增删改查(面向过程)
在我们把PHP的环境搭建好以后,我们来看一下怎样通过PHP连接MySQL数据库,以及怎样实现最基本的增删改查.其它就不多说了,直接上代码吧. 1.PHP连接MySQL数据库 1 2 3 4 5 6 7 ...
最新文章
- python 导出mysql 视图_【Python基础】mysql数据库视图是什么
- C++对象的动态建立
- C语言*运算符和运算符
- Chapter5_Speaker_Verification
- 纯手工打造漂亮的垂直时间轴,使用最简单的HTML+CSS+JQUERY完成100个版本更新记录的华丽转身!...
- 我的计时软件TimeDogV13
- 介绍两个office软件的插件,很好用——SaveAsPDFandXPS.exe和OfficeTab
- unity零基础学习
- 网页如何实现平均分成左右两部分
- unity制作子弹击砖块过程分析
- linux安全工具(RKHunter)
- Android搭建无线调试环境
- 薅羊毛!企业微信自动加好友工具免费使用机会!
- 李兴华课程 java学习笔记
- 云存储和网盘有何区别
- 英文论文审稿意见汇总
- groovy if 判断字符串_Groovy快速入门看这篇就够了
- python之python3.x版本用urllib爬虫出现的module 'urllib' has no attribute 'urlopen'与urllib.error.HTTPError: HTT
- 目前就常用计算机类型,CAD-CAM练习题
- 串口数据可视化工具(Serial Studio)使用