教科书上的单链表定义及基本操作

数据结构实验:单链表基本操作实现与调试指南 数据结构是计算机科学的核心基础,它研究数据的组织、存储与操作方式,直接影响程序的效率与性能。其核心原理在于通过特定的逻辑结构(如线性、树形)与物理存储方式,在时间与空间复杂度间取得平衡。掌握数据结构对于编写高效、可维护的代码具有重要价值,广泛应用于数据库索引、编译器设计、网络路由等场景。链表作为一种基础的动态数据结构,完美体现了链式存储思想。本文聚焦单链表这一关键概念,深入剖析其节点与指针模型,并详细讲解创建、遍历、插入、删除等基本操作的实现逻辑与工程实践中的调试技巧,帮助你从理论到代码实现平滑过渡,攻克数 阅读详情
#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;
}

C++单链表实现集合运算实战项目 再牛的功能,没有测试也是白搭。写几个关键断言:assert(!s.add(1));// 第二次应失败// 测试空集// 测试差集边界情况全覆盖:类型示例输入预期行为正常输入空集参与全重复单元素你看,一个简简单单的单链表,经过层层包装——✅ 加上去重机制 → 变成集合✅ 实现交并差 → 支持复杂运算✅ 接入文件IO → 实现持久化✅ 引入哈希优化 → 提升性能。 阅读详情

相关推荐

数据结构单链表试验(1)

基本要求] (1)建立带表头结点的单链表; (2)输出单链表中所有结点的数据域值; (3)输入x,y在第一个数据域值为x的结点之后插入结点y,若无结点x,则在表尾插入结点y; (4)输入k,删除单链表中所有的结点k,并输出被删除结点的个数。

单链表的定义

在前面的文章中,我们系统的介绍了线性表的顺序存储实现——顺序表。紧接着我们要介绍线性表的链式存储实现——链表。而链表中又有许多的链表:这一篇文章中,我们先来介绍单链表。要想知道什么是单链表,我们就可以使用我们学习过的顺序表来对比学习(对比学习有助于你的记忆,使用学习过的知识去学习未知的知识,也未尝不是一种好方法)我们都知道顺序表是申请一大块连续的区域,并且使用物理地址相邻的方法来表示逻辑上的相邻。而链表逻辑上相邻的元素在内存中可以是不相邻存放的。那么如果链表中的元素在内存中不是相邻存放的,那我们如何知道下一

hibugs 6223

Linux 隐藏进程

这种方式属于DKoM(Direct Kernel Object Manipulation)攻击方式了,即直接内核对象操作技术。关于第一种hook方式可以参考上一篇文章。最后推荐一个rootkit工具。

chi's blog 2051

单链表的定义(数据结构与算法)

单链表是一种常见的数据结构,用于存储元素的序列。它由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的引用(指针)。单链表中的节点之间通过指针连接起来,形成一个线性结构。单链表是一种简单但灵活的数据结构,常用于实现队列、堆栈和图等其他高级数据结构。

AII_IIA的博客 1560

波束管理 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)。   由于毫米波频带使用非常高的频率,因此会导致传播损耗和其他损耗。为了补偿损失,在这种频率下定向通信是必不可少的。

最忆是江南的博客 5826

Nginx反向代理HTTPS服务报错排查:The plain HTTP request was sent to HTTPS port

在Web服务架构中,反向代理是连接客户端与后端应用的关键组件,它通过转发请求实现负载均衡和安全隔离。其工作原理涉及监听端口、解析协议头部,并根据配置将请求路由至上游服务器。这一机制的技术价值在于提升系统可扩展性、简化部署,并增强安全性。在HTTPS场景下,代理服务器需正确处理SSL/TLS终止与传递,若配置不当,常引发协议不匹配问题。例如,当Nginx将解密后的HTTP请求转发至期待HTTPS的后端,或客户端直接向SSL端口发送明文请求时,便会出现经典报错“The plain HTTP request wa

weixin_33391446的博客 396

单链表详解(C语言版)

本文介绍单链表的定义、常用操作、优化和使用的注意点等内容。

qq_44075108的博客 2万+

勒索病毒c语言源代码,勒索病毒原理解析

一、编程思路什么是勒索病毒:遍历你电脑上所有文件,并且用加密算法加密,然后把加密秘钥发送到自己邮箱里,弹出窗口。工具:操作系统API,加密算法思路:1.程序设计 思路规划清楚1.1 加密单个文件1.2 遍历文件系统并加密文件2.工程实现: 编程3.测试上线 :、测试欢迎加入学习群【892643663】,获取全套免费C/C++企业实战级课程资源(素材+源码+视频)和编译大礼包二、代码解析//文件遍...

weixin_35355756的博客 6601

数据结构——单链表

单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) +指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。 ​

2301_77179941的博客 4803

Matplotlib图片尺寸调整全攻略:从figsize到savefig的实战技巧

在数据可视化与科学计算中,图形尺寸控制是影响图表可读性与专业度的基础环节。其核心原理在于协调逻辑尺寸(英寸)与物理输出(像素)的映射关系,这直接决定了信息呈现的清晰度与布局合理性。从技术价值看,精准的尺寸控制能提升图表在不同媒介(如学术论文、报告、网页)中的适配性,避免显示不全、模糊失真等常见问题。在应用场景上,无论是Jupyter Notebook中的交互探索、自动化报告的批量生成,还是满足严格出版要求的插图制作,都需要掌握对应的尺寸调整策略。本文聚焦于matplotlib中的figsize参数、rcPa

weixin_30899023的博客 330

YOLOv8【第十章:多任务扩展深度篇·第18节】不规则工业缺陷分割——针对划痕、裂纹的 Seg 模型调优!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 3981

【数据结构】单链表--List

概念:链表是一种物理存储结构上非连续非顺序的存储结构,但链表在逻辑上是连续的,顺序的,而数据元素的逻辑顺序是通过链表中的指针连接次序实现的。

Z1tai的博客 1万+

学Simulink--基于Simulink的无迹卡尔曼滤波(UKF)目标跟踪仿真建模示例

本文详细介绍了基于Simulink的无迹卡尔曼滤波(UKF)目标跟踪仿真建模方法。首先分析了UKF相比EKF在强非线性场景下的优势,包括无线性化误差、计算效率高和鲁棒性强等特点。接着阐述了UKF的核心原理,重点讲解了无迹变换(UT)的三个关键步骤:Sigma点生成、非线性传播和加权统计重构。文章还详细说明了二维机动目标的状态向量定义、非线性状态转移模型和雷达观测模型。 在Simulink实现部分,提供了完整的建模步骤和核心代码,包括目标运动模型、雷达传感器模型和UKF算法模块的实现。通过蛇形机动场景的仿真实

xiaoheshang_123的博客 89

线性单链表的存储及基本操作(整理)

教科书:严奶奶的《数据结构(C语言版)》 参考代码:高一凡的《数据结构》算法实现和解析 /*****************线性链表的单链表存储结构*************** ******************制作人:Guosam************************* *****************时间:2015/5/20*******************

u011446963的博客 742

Windows上MSYS2的安装和使用

MSYS2这个工具我是越用越喜欢,很多东西放在Linux上如鱼得水但是放在Windows上就没那么好用,比如ffmpeg,opencv等直接引用就行了,这个工具真的很省事。接下来带你们看看它的妙用。1、好好研究确实妙用无穷。

jiexijihe945的博客 4141

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

SJMP 1675

怀旧版电脑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

a4647520的专栏 695

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【数据结构】单链表

顺序表将元素存储在物理上连续空间中,优势是访问任意位序元素的时间复杂度为O(1),但在插入删除元素时,需要搬移大量元素,时间复杂度为O(n),且空间满了,需要扩容,扩容也是有一定的代价的。所以大佬就又发明了链式结构来存储线性表。顺序存储:把逻辑上相邻的数据元素存放在一段连续物理存储单元中,数据元素之间的逻辑关系可以由物理存储关系体现。链式存储:逻辑上相邻的数据元素存储在任意的一组物理存储单元中,数据元素之间的逻辑关系用指针来表示。

2601_95911570的博客 256

单链表实现学生健康登记表(第二章 P18)

/* 利用单链表结构处理教科书图2.1(学生健康登记表) */ typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */ typedef int Boolean; /* Boolean是布尔类型,其值是TRUE或FALSE */ #include<malloc.h> /* malloc()等 */ #include&lt...

但行好事,莫问前程 1077

数据结构练习1.线性单链表

/后插入(节点名、位置、值),成功1,失败0。练习方法:先什么都不看,写完后公示代码,再优化、修改,最后公示尽力优化后的代码。Node* init(void)//建立只有头节点的单链表,返回头节点地址。if (sit > N->data) {//若指定位置大于链表长度。= NULL) {//挨个打印,直到结束。if (N->next == NULL) {//若为空表。if (head == NULL) {//建表失败。

2301_77863617的博客 992

单链表-数据结构

用数组模拟单链表.

qq_63961708的博客 552

Java实现单链表

Java实现单链表 原理 参考课本即可 功能 长度 获取第n个节点,n的范围[0,n) 尾端添加 插入到第k个节点前,k的范围[0,n] 移除第n个节点 移除某个节点,参数为Node 转换为String,格式 1,2,3,…,n 反转 获取中间节点:快慢指针 是否存在环:快慢指针 结构 class MyList class Node:内部类 N...

xl十一的博客 208

数据结构学习(C++)——线性链式结构总结(代后记)【2】

在开始写这些文章之前,我曾经有个想法,能不能以单链表为基础,完成所有的线性链式结构?实践证明,是可以的,就像你看到的这样。我做这个尝试的起因是,看不惯现在教科书凌乱的结构:罗列了一大堆ADT或者是templat class,好像这些都要你去记似的。殊不知,只有提取共性,突出个性,才能更明显的表现出各种数据结构的差异,显示数据结构的进化发展的过程,看出变化的内在需求。借用《C++沉思录》作者的一句话

1270

单链表学生成绩管理系统

/*程序说明: 程序是由单链表实现的学生成绩管理系统,主要功能有输入/查找/删除/修改/排序/显示学生成绩; 输入功能由带头结点的单链表实现,并且使用前插法输入学生信息; 输入功能可以实现插入学生信息的功能,所以无需再专门写一个插入的函数; 删除/修改学生信息要用到查找功能,所以将查找与删除/修改功能写到一起; 查找功能使用顺序查找遍历整个单链表; 使

霜影阁 5143

数据结构精讲:单链表从零到精通,一文搞定所有核心操作与高频考点

本文全面解析单链表数据结构,涵盖核心概念、关键操作实现及高频考点。单链表通过分散节点存储数据,每个节点包含数据和指向下一个节点的指针。相比顺序表,单链表插入/删除效率更高(O(1)),但随机访问需要O(n)时间。 文章重点讲解了二级指针的必要性:当需要修改头指针本身时,必须传递二级指针。详细实现了创建节点、打印、头插/尾插、头删/尾删等核心操作,并针对每种操作的特殊边界情况(空表/单节点/头尾节点)给出解决方案。 关键实现技巧包括:使用临时游标保护原头指针、头插尾插的顺序控制、双指针法找前驱节点、先存后删的

DDXYcoder的博客 293

判断栈是否为空_python基于列表或单链表实现栈及其简单应用

栈是一种容器,可存入数据元素、访问数据元素、删除元素等。存入栈中的元素之间没有任何具体关系,只有到来的时间先后顺序,在这里没有元素的位置以及元素的前后顺序等概念。栈的基本特性保证,在任何时间可以访问,删除的元素就是在之前最后存入的那个元素,因此栈确定了一种默认的元素访问顺序,访问时无需其他信息。栈定义的操作包括:栈的创建、判断栈是否为空、将元素压入栈中、从栈中弹出元素并将其返回、以及访问最后的入栈...

weixin_39917485的博客 1500
上一篇: c++单链表的基本操作
下一篇: ubuntu环境变量设置 为什么不生效的疑问
muximuxi525
博客等级 码龄15年 134粉丝 294原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值