class Node(object):
"""定义节点"""
def __init__(self, obj):
self.data = obj
self.next = None
class CycleLinkList(object):
"""单向循环链表"""
def __init__(self):
self._head = None
def is_empty(self):
"""是否为空"""
return self._head is None
def length(self):
"""单向循环链表的 长度"""
cur = self._head
if cur is None:
return 0
count = 1
while cur.next != self._head:
count += 1
cur = cur.next
return count
def travel(self):
"""单向循环链表 遍历"""
cur = self._head
if cur is None:
print()
while cur.next != self._head:
print(cur.data, end=" ")
cur = cur.next
# 打印尾节点
print(cur.data)
def add(self, obj):
"""单向循环链表 头插法"""
node = Node(obj)
cur = self._head
if cur is None:
node.next = node
while cur.next != self._head:
cur = cur.next
node.next = self._head
cur.next = node
self._head = node
def append(self, obj):
"""单向循环链表 尾插法"""
node = Node(obj)
cur = self._head
if cur is None:
node.next = node
while cur.next != self._head:
cur = cur.next
cur.next = node
node.next = self._head
def insert(self, index, obj):
"""单向循环链表 插入"""
assert isinstance(index, int)
if index <= 0:
self.add(obj)
elif index >=self.length():
self.append(obj)
else:
# 说明是在中间插入
node = Node(obj)
cur = self._head
for i in range(index - 1):
cur = cur.next
node.next = cur.next
cur.next = node
def remove(self, obj):
"""单向循环链表 移除"""
cur = self._head
if cur is None:
raise ValueError("%s does not exist" % obj)
# 如果是单个节点
if cur.next == self._head:
if cur.data == obj:
self._head = None
else:
raise ValueError("%s does not exist" % obj)
# 难点: 删除的是头结点
if cur.data == obj:
# 遍历找到尾节点
while cur.next != self._head:
cur = cur.next
cur = self._head.next
self._head = self._head.next
# 对于c程序老说, 这里还有做一个内存回收
while cur.next != self._head:
pre = cur
cur = cur.next
if cur.data == obj:
pre.next = cur.next
break
else:
raise ValueError("%s does not exist" % obj)
def search(self, obj):
"""单向循环链表 范围查询"""
cur = self._head
if cur is None:
return False
while cur.next != self._head:
if cur.data == obj:
return True
cur = cur.next
else:
if cur.data == obj:
return True
else:
return False
def reverse(self):
"""单向循环链表 反转"""
# TODO 此坑待填
if __name__ == '__main__':
cll = CycleLinkList()
print(cll.is_empty()) # True
print(cll.length()) # 0
cll.add(100)
print(cll.is_empty()) # False
print(cll.length()) # 1
cll.travel() # 100
cll.add(200)
print(cll.length()) # 2
cll.travel() # 200 100
cll.add(300)
cll.travel() # 300 200 100
cll.append(400)
cll.travel() # 300 200 100 400
cll.insert(0, 500)
cll.travel() # 500 300 200 100 400
cll.insert(10, 600)
cll.travel() # 500 300 200 100 400 600
cll.insert(2, 700)
cll.travel() # 500 300 700 200 100 400 600
cll.remove(500)
cll.travel() # 300 700 200 100 400 600
cll.remove(600)
cll.travel() # 300 700 200 100 400
cll.remove(200)
cll.travel() # 300 700 100 400
print(cll.search(100)) # True
print(cll.search(800)) # False
相关推荐
爬虫等数据去重方案: 摘要算法 Simhash 布隆过滤器
1. 去重的应用场景和基本原理 1.1 场景引入思考: 1.防止发送重复的请求 2.防止保存重复的数据 原理:一致, 对二进制字符串去重 1.2 基本原理: 思考: 明确 数据构成类型(字符串, 数字 , 对象, 特殊字符…) ==> 来制定去重方案 判断依据: 什么样的数据算作重复数据? 总结: 根据给定的 [判断依据] 和 [去重容器], 将原始数据逐一进行判断, 判...
各类链表判空条件
——> 转自原博客 1.单链表 带头结点: 分析: 带有头节点的链表若为空,只需要整条链表只剩一个头节点 [这是和不带头节点的链表的一个很大的区别(不带头结点的链表若要为空,整个链表不能存在一个结点)], 怎样使带头节点的链表只剩一个头节点呢? 只需要第一个存储数据的节点不存在即可,即头节点的后继结点不存在即可 所以只需要头节点的next指针域不存在即可(实质上使指向NULL) 所以 带头点的单链表的判空条件为 head->next=NULL 不带头结点: 分析: 若要不带头结点的链表为空,
单链表基本操作:建立链表,判空,求表长等
实现单链表的基本操作:建立链表,判空,求表长等
判断链表为空的三种情况
(1)带头结点单链表:head->next==NULL; (2)带头结点循环链表:head->next==head; (3)不带头结点单链表:head==NULL;
ubuntu安装eigen3.3.7
查看已安装版本: gedit /usr/include/eigen3/Eigen/src/Core/util/Macros.h 或 gedit /usr/local/include/eigen3/Eigen/src/Core/util/Macros.h 卸载先前版本: sudo updatedb locate eigen3 得到eigen库的位置 卸载: sudo rm -rf /usr/include/eigen3 /usr/lib/cmake/eigen3 ...
从零到一:用ROS2和Gazebo搭建Franka机械臂仿真环境(避坑指南)
本文详细介绍了如何使用ROS2和Gazebo从零开始搭建Franka机械臂的仿真环境,包括环境准备、ROS2包安装、控制器配置及常见问题解决方案。特别针对关节位置控制等核心功能提供了实用代码示例和避坑指南,帮助开发者高效构建机器人算法验证平台。
数据结构之循环链表
普通单双链表和循环单双链表的区别;循环单双链表的基本操作(定义,初始化,插入,删除,判空)
海康视觉平台VisionMaster实战入门:从通讯配置到工具应用
本文为海康VisionMaster视觉平台实战入门指南,详细介绍了从软件安装准备、与PLC等外部设备的通讯配置,到匹配定位、测量、畸变矫正等核心工具的应用方法。通过实战案例拆解,帮助工程师快速掌握如何搭建完整的机器视觉检测与引导定位系统,实现工业自动化项目落地。
【C语言】基本数据结构-单链表
本文主要描述了链表的优势,以及支持操作的具体使用。
【LangChain编程:从入门到实践】实现多模态代理
【LangChain编程:从入门到实践】实现多模态代理 关键词:LangChain, 多模态代理, 自然语言处理, 机器学习, 知识图谱, 对话系统, 代码生成, AI代理 1. 背景介绍 随着人工智
MATLAB点云处理(八):为点云添加高斯噪声
本文对如何借助MATLAB,为点云添加高斯噪声做出了说明,并给出实现代码。
数据结构——双向链表
尾结点的下一个是头结点,头结点的前一个是尾结点。对于尾插,可以看成在尾结点后插入,也可以看成在头结点(head)前插入,因为head的前驱结点就是尾。next是一个地址,=是赋值,改变指针的指向就是修改结构体内指针的值,也就是修改地址。初始化双链表就是开辟一个头结点并返回,只有一个结点时,链表的前一个和后一个都是自己。pos是一个结构体指针,插入是在pos前插入,删除就直接删除pos位置的结点。头删,即删除第一个结点,也就是头结点的下一个,但是不包括头结点。销毁时,遍历链表释放其余结点后,在释放头结点。
基于STM32、HAL库的MCP4013T-103E/CH 数字电位器驱动程序设计
define MCP4013_I2C_ADDR (0x5F << 1) // HAL库使用7位地址左移1位,或直接使用0xBE/0xBF。#include "i2c.h" // 包含你的I2C初始化相关的头文件,例如由CubeMX生成的 i2c.h。大于127的值会被截断。// MCP4013的读操作:主机发起读取请求,从机返回当前滑片位置的一个字节。// 使用HAL_I2C_Master_Transmit直接发送数据。// 使用HAL_I2C_Master_Receive读取一个字节。
【数据结构】链表 详解
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn)和O(1)
以 DeleteRestrictions 与 inlineDelete 为核心的 Fiori Elements 表格删除机制全解
SAP Fiori elements 中删除操作的设计与实现涉及多维度考量。框架默认依据 OData 元数据判断删除能力,通过 DeleteRestrictions 注解实现行级条件控制(deletable-path)。表格支持两种删除模式:工具栏集中删除与响应式表格行内删除,但二者不建议混用。关键约束包括:行内删除仅适用于 Responsive Table,且与多选功能互斥。配置需遵循三层架构:后端能力注解、前端表格形态和运行时交互。设计上强调禁用优于隐藏的可用性原则,并需保持列表页与对象页的删除体验一致
AgentScope Java 2.0 项目实战:使用AgentScope Builder 构建企业级多租户 AI Agent 平台
本文基于 AgentScope Builder 源码深度分析,系统讲解多租户 AI Agent 构建平台的完整开发流程。涵盖 Spring Boot 3.x + WebFlux 后端架构、React 18 + TypeScript 前端实现、HarnessAgent 运行时、CompositeFilesystem 多租户隔离、SSE 流式对话、6 种 IM 渠道接入(钉钉/飞书/企微/GitHub/GitLab)、Git 与 Nacos 技能市场、JWT 认证、Docker Sandbox 隔离等核心技术。
Python单向链表操作
Python单向链表操作
C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片
基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正
java list 最后一个_怎样获取list集合中的最后一个对象中的值
展开全部指令:list.get(list.size()-1);C语言中List的含义:链表是一种物理存储单元上非连续、非顺32313133353236313431303231363533e78988e69d8331333365646263序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分...
OV9734 DATASHEET,完整规格书
OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等
假人有限元模型
假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用
单向不循环链表(创建、遍历、增、删、查找、判空)
# coding: utf-8 # 链表节点 class Node(object): def __init__(self, item): self.item = item self.next = None # 单向不循环链表 class LinkList(object): def __init__(self): self._h...
IEM模型,地表粗糙度模拟
利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟
链表的常用算法(创建,判空,遍历…
链表的常用算法 # include # include # include //结构体 typedef struct Node { int data; struct Node * Next; }NODE, * PNODE; //函数声明 PNODE creat_list(void);//创建链表 void is_empty(PNODE);//判断链表是否为空 void traverse_li
如何判断一个链表是否为空?
L为指向表头结点的指针,分别写出带有头结点的单链表、单项循环链表和双向循环链表判空的条件单链表 NULL==L->next单向循环 L==L->next双向循环 L==L->next&&L==L->prior...
单链表为空的判定条件
带头结点的单链表head为空的判定条件是()。 A.head==NULL B.head->next==NULL C.head->next==head D.head!=NULL 正确答案:B 解析:若单链表带头结点,那么判定它为空的条件是head->next==NULL;若单链表不带头结点,那么判定它为空的条件则是head==NULL。 ...
彻底搞清链表的判空条件
声明:以下头指针都是指向链表的第一个结点(有头节点就指向头结点,没有头节点就指向第一个存储数据的结点),并且默认一下头结点的数据域不存储数据信息 1、单链表 无头结点 分析:带有头节点的链表若为空,只需要整条链表只剩一个头节点,这是和不带头节点的链表的一个很大的区别(不带头结点的链表若要为空,整个链表不能存在一个结点),怎样使带头节点的链表只剩一个头节点呢?只需要第一个存储数据的节点不存在即可,即头节点的后继结点不存在即可,所以只需要头节点的next指针域不存在即可(实质上使指向NULL),所以带头点的
单循环链表的初始化和判空
#include<stdio.h> #include<stdlib.h> #define OVERFLOW -2 #define FALSE 0 #define TRUE 1 #define OK 1 #define ERROR 0 typedef int Status; //链表元素的数据类型 typedef struct { char name[20]; flo...
python求单链表的长度_2019.9.17-单向循环链表:遍历+求长度+添加元素(完整代码)...
# coding:utf-8class Node(object):"""節點0"""def __init__(self, elem):self.elem = elemself.next = None# node = None(100)class SingleLinkList(object):"""單向循環鏈表"""def __init__(self, node=None):self.__head ...
Python+图解:实现数据结构中单链表的头插法和尾插法
用Python实现数据结构的头插法和尾插法 1.链表结构 # -*- coding:utf-8 -*- import random as rd class Node(): def __init__(self, value, next=None): self.value = value self.next = next 2.头插法 #头插法 def creatlist_head(n...
2177



被折叠的 条评论
为什么被折叠?



