#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
typedef int DataType;
class Item{
public:
DataType data;
Item* next;
Item(){
next=0;
}
};
class Link{
public:
Item* head;
Link(){head=0;}
~Link(){DeleteAll();}
void Initiate();
void DeleteAll();
void HeadCreate(int n);
void TailCreate(int n);
void HeadCreateWithHead(int n);
void TailCreateWithHead(int n);
int Length();
Item* LocateWithData(DataType x);
Item* LocateWithNum(int i);
DataType Get(int i);
bool Insert(DataType x,int i);
bool Delete(int i);
void Print();
};
void Link::Initiate(){
DeleteAll();
head=0;
}
//从表尾到表头建立单链表
void Link::HeadCreate(int n){
DeleteAll();
Item* s,* p;
p=0;
for(int i=1;i<=n;i++){
s=new Item();
cin>>s->data;
s->next=p;
p=s;
}
head=p;//表头不一定是节点结构
}
//从表头到表尾建立单链表
void Link::TailCreate(int n) {
Item* s,* r,* p;
DeleteAll();
p=0;
for(int i=1;i<=n;i++){
s=new Item();
cin>>s->data;
s->next=0;
if(0==p)p=r=s;
else{
r->next=s;//不是一个节点的指针能有next么? 但是他指向节点(含有next
r=s;
}
}
head=p;
}
//从表尾到表头建立单链表(带有空白头节点)
void Link::HeadCreateWithHead(int n) {
Item* s,*p;
DeleteAll();
p=new Item();//应该是这个不一样了
p->next=0;
for(int i=1;i<=n;i++){
s=new Item();
cin>>s->data;
s->next=p->next;
p->next=s;
}
head=p;
}
//从表头到表尾建立单链表( 带有空白头节点)
//对于带空白头节点的单链表在空表和非空表的运算处理基本一致了
void Link::TailCreateWithHead(int n){
Item* s,*r,*p;
DeleteAll();
p=new Item();//note!!!
p->next=0;
r=p;
for(int i=1;i<=n;i++){
s=new Item();
cin>>s->data;
r->next=s;
r=s;
}
r->next=0;
head=p;
}
//求表长
int Link::Length(){
int len;
Item* p;
len=0;
p=head->next;
while(p) {
len++;
p=p->next;
}
return len;
}
//查找操作(1)按序号查找
Item* Link::LocateWithNum(int i) {
int j=1;
Item* p;
if(0==i) return head;
p=head->next;
while(p&&j<i){
p=p->next;
j++;
}
if(j==i)return p;
return 0;
}
//查找操作(2)按值查找
Item* Link::LocateWithData(DataType x){
Item* p;
p=head->next;
while(p&&p->data!=x)p=p->next;
return p;
}
//读取第i个位置上的元素值
DataType Link::Get(int i) {
int j;
Item* p;
j=1;
p=head->next;
while((j<i)&&p) {
j++;
p=p->next;
}
if((0==p)||(j>i))return 0;
else return p->data;
}
//前插节点
bool Link::Insert(DataType x,int i) {
Item* p,* s;
p=LocateWithNum(i-1);
if(0==p)return false;
s=new Item();
s->data=x;
s->next=p->next;
p->next=s;
return true;
//插入操作如果是按序号来插入的话则是On效率,如果给定某指针后面则是o1效率
//删除运算不论给出的是序号或者还是指针
//都是要遍历一遍找出前驱,因为用调换某指针后面和某指针的位置 再删除
//的话如果碰上该节点是最后一个节点则不能成功运行
//所以删除操作都是On效率
}
//删除节点
bool Link::Delete(int i) {
int j;
Item* p=LocateWithNum(i-1);
Item* q;
if(0==p)return false;
q=p->next;
if(q){
p->next=q->next;
delete q;
q=0;
return true;
}
}
//打印
void Link::Print(){
Item* p;
p=head->next;
while(p){
cout<<p->data<<endl;
p=p->next;
}
}
//删除所有节点
void Link::DeleteAll(){
Item* p=head,*q;
while(p){
q=p->next;
delete p;
p=q;
}
}
int main(){
return 0;
}相关推荐
数据结构单链表试验(1)
基本要求] (1)建立带表头结点的单链表; (2)输出单链表中所有结点的数据域值; (3)输入x,y在第一个数据域值为x的结点之后插入结点y,若无结点x,则在表尾插入结点y; (4)输入k,删除单链表中所有的结点k,并输出被删除结点的个数。
单链表的定义
在前面的文章中,我们系统的介绍了线性表的顺序存储实现——顺序表。紧接着我们要介绍线性表的链式存储实现——链表。而链表中又有许多的链表:这一篇文章中,我们先来介绍单链表。要想知道什么是单链表,我们就可以使用我们学习过的顺序表来对比学习(对比学习有助于你的记忆,使用学习过的知识去学习未知的知识,也未尝不是一种好方法)我们都知道顺序表是申请一大块连续的区域,并且使用物理地址相邻的方法来表示逻辑上的相邻。而链表逻辑上相邻的元素在内存中可以是不相邻存放的。那么如果链表中的元素在内存中不是相邻存放的,那我们如何知道下一
Linux 隐藏进程
这种方式属于DKoM(Direct Kernel Object Manipulation)攻击方式了,即直接内核对象操作技术。关于第一种hook方式可以参考上一篇文章。最后推荐一个rootkit工具。
单链表的定义(数据结构与算法)
单链表是一种常见的数据结构,用于存储元素的序列。它由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的引用(指针)。单链表中的节点之间通过指针连接起来,形成一个线性结构。单链表是一种简单但灵活的数据结构,常用于实现队列、堆栈和图等其他高级数据结构。
波束管理 Beam Management
Beam Management in 5G NR 波束管理,是5G NR中基于信道质量来动态选择每个UE和gNB之间以什么方向和频率的波束beam来进行通信。 背景 5G NR(New Radio)支持非常高的数据速率和更低的延迟。5G NR支持FR1和FR2频段,FR1为亚6 GHz(450至6000 MHz);FR2为毫米波段(24.25 GHz至52.6 GHz)。 由于毫米波频带使用非常高的频率,因此会导致传播损耗和其他损耗。为了补偿损失,在这种频率下定向通信是必不可少的。
Nginx反向代理HTTPS服务报错排查:The plain HTTP request was sent to HTTPS port
在Web服务架构中,反向代理是连接客户端与后端应用的关键组件,它通过转发请求实现负载均衡和安全隔离。其工作原理涉及监听端口、解析协议头部,并根据配置将请求路由至上游服务器。这一机制的技术价值在于提升系统可扩展性、简化部署,并增强安全性。在HTTPS场景下,代理服务器需正确处理SSL/TLS终止与传递,若配置不当,常引发协议不匹配问题。例如,当Nginx将解密后的HTTP请求转发至期待HTTPS的后端,或客户端直接向SSL端口发送明文请求时,便会出现经典报错“The plain HTTP request wa
单链表详解(C语言版)
本文介绍单链表的定义、常用操作、优化和使用的注意点等内容。
勒索病毒c语言源代码,勒索病毒原理解析
一、编程思路什么是勒索病毒:遍历你电脑上所有文件,并且用加密算法加密,然后把加密秘钥发送到自己邮箱里,弹出窗口。工具:操作系统API,加密算法思路:1.程序设计 思路规划清楚1.1 加密单个文件1.2 遍历文件系统并加密文件2.工程实现: 编程3.测试上线 :、测试欢迎加入学习群【892643663】,获取全套免费C/C++企业实战级课程资源(素材+源码+视频)和编译大礼包二、代码解析//文件遍...
数据结构——单链表
单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) +指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。
Matplotlib图片尺寸调整全攻略:从figsize到savefig的实战技巧
在数据可视化与科学计算中,图形尺寸控制是影响图表可读性与专业度的基础环节。其核心原理在于协调逻辑尺寸(英寸)与物理输出(像素)的映射关系,这直接决定了信息呈现的清晰度与布局合理性。从技术价值看,精准的尺寸控制能提升图表在不同媒介(如学术论文、报告、网页)中的适配性,避免显示不全、模糊失真等常见问题。在应用场景上,无论是Jupyter Notebook中的交互探索、自动化报告的批量生成,还是满足严格出版要求的插图制作,都需要掌握对应的尺寸调整策略。本文聚焦于matplotlib中的figsize参数、rcPa
YOLOv8【第十章:多任务扩展深度篇·第18节】不规则工业缺陷分割——针对划痕、裂纹的 Seg 模型调优!
🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。
【数据结构】单链表--List
概念:链表是一种物理存储结构上非连续非顺序的存储结构,但链表在逻辑上是连续的,顺序的,而数据元素的逻辑顺序是通过链表中的指针连接次序实现的。
学Simulink--基于Simulink的无迹卡尔曼滤波(UKF)目标跟踪仿真建模示例
本文详细介绍了基于Simulink的无迹卡尔曼滤波(UKF)目标跟踪仿真建模方法。首先分析了UKF相比EKF在强非线性场景下的优势,包括无线性化误差、计算效率高和鲁棒性强等特点。接着阐述了UKF的核心原理,重点讲解了无迹变换(UT)的三个关键步骤:Sigma点生成、非线性传播和加权统计重构。文章还详细说明了二维机动目标的状态向量定义、非线性状态转移模型和雷达观测模型。 在Simulink实现部分,提供了完整的建模步骤和核心代码,包括目标运动模型、雷达传感器模型和UKF算法模块的实现。通过蛇形机动场景的仿真实
线性单链表的存储及基本操作(整理)
教科书:严奶奶的《数据结构(C语言版)》 参考代码:高一凡的《数据结构》算法实现和解析 /*****************线性链表的单链表存储结构*************** ******************制作人:Guosam************************* *****************时间:2015/5/20*******************
Windows上MSYS2的安装和使用
MSYS2这个工具我是越用越喜欢,很多东西放在Linux上如鱼得水但是放在Windows上就没那么好用,比如ffmpeg,opencv等直接引用就行了,这个工具真的很省事。接下来带你们看看它的妙用。1、好好研究确实妙用无穷。
jre9下载 jdk9
(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】
algo2-3-1.c 利用无头结点的单链表结构处理教科书图2.1(学生健康登记表)
/* algo2-6.c 利用无头结点的单链表结构处理教科书图2.1(学生健康登记表) */ #include"c1.h" #define NAMELEN 8 /* 姓名最大长度 */ #define CLASSLEN 4 /* 班级名最大长度 */ typedef struct { char name[NAMELEN+1]; /* 包括'\0' */ long
怀旧版电脑GBC模拟器
再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。
线性表的静态单链表存储结构
// c2-3.h 线性表的静态单链表存储结构(见图2.23) #define MAX_SIZE 100 // 链表的最大长度 typedef struct { ElemType data; int cur; }component,SLinkList[MAX_SIZE]; // algo2-7.cpp 教科书中图2.10静态链表示例 // 第1个结点的位置在[0].cur中。成员cur的值为0
OV9734 DATASHEET,完整规格书
OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等
visio安装包
Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。
【数据结构】单链表
顺序表将元素存储在物理上连续空间中,优势是访问任意位序元素的时间复杂度为O(1),但在插入删除元素时,需要搬移大量元素,时间复杂度为O(n),且空间满了,需要扩容,扩容也是有一定的代价的。所以大佬就又发明了链式结构来存储线性表。顺序存储:把逻辑上相邻的数据元素存放在一段连续物理存储单元中,数据元素之间的逻辑关系可以由物理存储关系体现。链式存储:逻辑上相邻的数据元素存储在任意的一组物理存储单元中,数据元素之间的逻辑关系用指针来表示。
单链表实现学生健康登记表(第二章 P18)
/* 利用单链表结构处理教科书图2.1(学生健康登记表) */ typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */ typedef int Boolean; /* Boolean是布尔类型,其值是TRUE或FALSE */ #include<malloc.h> /* malloc()等 */ #include<...
数据结构练习1.线性单链表
/后插入(节点名、位置、值),成功1,失败0。练习方法:先什么都不看,写完后公示代码,再优化、修改,最后公示尽力优化后的代码。Node* init(void)//建立只有头节点的单链表,返回头节点地址。if (sit > N->data) {//若指定位置大于链表长度。= NULL) {//挨个打印,直到结束。if (N->next == NULL) {//若为空表。if (head == NULL) {//建表失败。
单链表-数据结构
用数组模拟单链表.
Java实现单链表
Java实现单链表 原理 参考课本即可 功能 长度 获取第n个节点,n的范围[0,n) 尾端添加 插入到第k个节点前,k的范围[0,n] 移除第n个节点 移除某个节点,参数为Node 转换为String,格式 1,2,3,…,n 反转 获取中间节点:快慢指针 是否存在环:快慢指针 结构 class MyList class Node:内部类 N...
数据结构学习(C++)——线性链式结构总结(代后记)【2】
在开始写这些文章之前,我曾经有个想法,能不能以单链表为基础,完成所有的线性链式结构?实践证明,是可以的,就像你看到的这样。我做这个尝试的起因是,看不惯现在教科书凌乱的结构:罗列了一大堆ADT或者是templat class,好像这些都要你去记似的。殊不知,只有提取共性,突出个性,才能更明显的表现出各种数据结构的差异,显示数据结构的进化发展的过程,看出变化的内在需求。借用《C++沉思录》作者的一句话
单链表学生成绩管理系统
/*程序说明: 程序是由单链表实现的学生成绩管理系统,主要功能有输入/查找/删除/修改/排序/显示学生成绩; 输入功能由带头结点的单链表实现,并且使用前插法输入学生信息; 输入功能可以实现插入学生信息的功能,所以无需再专门写一个插入的函数; 删除/修改学生信息要用到查找功能,所以将查找与删除/修改功能写到一起; 查找功能使用顺序查找遍历整个单链表; 使
数据结构精讲:单链表从零到精通,一文搞定所有核心操作与高频考点
本文全面解析单链表数据结构,涵盖核心概念、关键操作实现及高频考点。单链表通过分散节点存储数据,每个节点包含数据和指向下一个节点的指针。相比顺序表,单链表插入/删除效率更高(O(1)),但随机访问需要O(n)时间。 文章重点讲解了二级指针的必要性:当需要修改头指针本身时,必须传递二级指针。详细实现了创建节点、打印、头插/尾插、头删/尾删等核心操作,并针对每种操作的特殊边界情况(空表/单节点/头尾节点)给出解决方案。 关键实现技巧包括:使用临时游标保护原头指针、头插尾插的顺序控制、双指针法找前驱节点、先存后删的
判断栈是否为空_python基于列表或单链表实现栈及其简单应用
栈是一种容器,可存入数据元素、访问数据元素、删除元素等。存入栈中的元素之间没有任何具体关系,只有到来的时间先后顺序,在这里没有元素的位置以及元素的前后顺序等概念。栈的基本特性保证,在任何时间可以访问,删除的元素就是在之前最后存入的那个元素,因此栈确定了一种默认的元素访问顺序,访问时无需其他信息。栈定义的操作包括:栈的创建、判断栈是否为空、将元素压入栈中、从栈中弹出元素并将其返回、以及访问最后的入栈...
6223



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



