链式线性表C++ 实现

线性表的链式表示和实现(C++实现) 链式存储结构的特点:用一组任意的存储单元存储线性表的数据元素(可以连续,可不连续的),存放数据元素的结点至少包括两个域(指针域、数据域),也可以包含若干个指针域和数据域。头指针:是指向链表中第一个结点的指针。若链表设有头结点,则头指针所指结点为线性表的头结点;若链表不设头结点,则头指针所指结点为该线性表的首元。顺序表的缺点:进行插入和删除时,需移动大量的元素,存储空间不灵活。头结点:是在首元素结点之前附设的一个结点,其指针指向首元结点。首元结点:是指链表中存储第一个数据元素的结点。取链表中第i个元素的值。 阅读详情

1.头文件

#ifndef _LINK_LIST_H
#define _LINK_LIST_H


template <typename T>
struct LinkListNode
{
	T t;//节点包含的数据
	LinkListNode<T> *next;//指向下一个节点的指针(正好和节点的数据类型一样)
};

//采用模板类,实现链式线性表
template<typename T>
class CLinkList
{
public:
	CLinkList();
	~CLinkList();
	
	//插入一个节点
	int insertNode(T &t,int nPos);

	//获取一个节点
	T * getNode(int nPos);

	//删除一个节点
	T * delNode(int nPos);

	//获取链式线性表的长度
	int getLen();

	//清空线性表
	void Clear();

//如果想被继承,关键字可以改成protect
private:
	int m_nLen;//线性表的长度
	LinkListNode<T> *m_pHead;//头结点
};



#endif //_LINK_LIST_H

2.源文件

#include <iostream>
#include "LinkList.h"
#include "vld.h"

using namespace std;

template<typename T>
CLinkList<T>::CLinkList()
{
	m_pHead=new LinkListNode<T>;
	memset(m_pHead,0,sizeof(LinkListNode<T>));
	m_pHead->next=NULL;
	m_nLen=0;
}

template<typename T>
CLinkList<T>::~CLinkList()
{
	if (m_pHead!=NULL)
	{
		delete m_pHead;
		m_pHead=NULL;
	}
	m_nLen=0;
}

template<typename T>
int CLinkList<T>::insertNode(T &t,int nPos)
{
	if (nPos<0)
	{
		cout<<"insertNode parameter is error";
		return -1;
	}
	LinkListNode<T> *pCurrent=NULL;
	pCurrent=m_pHead;//首先赋值给头节点
	for (int i=0;i<nPos;i++)
	{
		pCurrent=pCurrent->next;
	}

	//把上层应用的t节点缓存到容器中
	LinkListNode<T> *pNode=new LinkListNode<T>;
	memset(pNode,0,sizeof(LinkListNode<T>));
	pNode->t=t;
	pNode->next=NULL;

	//分两步实现加入节点
	pNode->next=pCurrent->next;
	pCurrent->next=pNode;

	m_nLen++;

	return 0;
}

template<typename T>
T* CLinkList<T>::getNode(int nPos)
{
	if (nPos<0||nPos>m_nLen)
	{
		cout<<"getNode() paramerter is error"<<endl;
		return NULL;
	}

	LinkListNode<T> *pCurrent=NULL;
	pCurrent=m_pHead;//首先赋值给头节点
	for (int i=0;i<nPos;i++)
	{
		pCurrent=pCurrent->next;
	}

	//T t=pCurrent->next->t;//这是个临时变量,当返回值是,临时变量被析构掉,出现乱码
	//return &t;
	T *pT=new T;
	memset(pT,0,sizeof(T));
	*pT=pCurrent->next->t;
	cout<<pT<<endl;

	return pT;
}

template<typename T>
int CLinkList<T>::getLen()
{
	return m_nLen;
}

template<typename T>
T* CLinkList<T>::delNode(int nPos)
{
	if (nPos<0||nPos>m_nLen)
	{
		cout<<"delNode() paramerter is error"<<endl;
		return NULL;
	}
	LinkListNode<T> *pCurrent=NULL;
	pCurrent=m_pHead;//首先将当前节点赋给头节点
	for (int i=0;i<nPos;i++)
	{
		pCurrent=pCurrent->next;
	}

	LinkListNode<T> *rect=NULL;
	rect=pCurrent->next;
	T *pT=new T;
	memset(pT,0,sizeof(T));
	if (rect!=NULL)
	{
		*pT=rect->t;
		//删除操作
		pCurrent->next = rect->next; 
		m_nLen--;
		delete rect;//释放内存,因为插入节点的时候是new
	}

	return pT;
}

template<typename T>
void CLinkList<T>::Clear()
{
	//把旧的结点 del掉
	LinkListNode<T> *tmp = NULL;

	while (m_pHead)
	{
		tmp = m_pHead->next;
		delete m_pHead;
		m_pHead = tmp;
	}

	//重新创建
	m_pHead = new LinkListNode<T>;
	m_nLen = 0;
}
3.测试程序

#include <iostream>
#include "LinkList.hpp"
#include <string>

using namespace std;

typedef struct _Teacher
{
	char sName[64];
	int nAge;
}Teacher;

int main()
{
	Teacher t1,t2,t3;
	memset(&t1,0,sizeof(Teacher));
	memset(&t2,0,sizeof(Teacher));
	memset(&t3,0,sizeof(Teacher));
	t1.nAge=10;
	strcpy(t1.sName,"小李");

	t2.nAge=11;
	strcpy(t2.sName,"小张");

	t3.nAge=12;
	strcpy(t3.sName,"小刘");

	CLinkList<Teacher> list;

	list.insertNode(t1,0);
	list.insertNode(t2,1);
	list.insertNode(t3,2);

	int nLen=list.getLen();
	cout<<"共"<<nLen<<"节点"<<endl;

	for (int i=0;i<nLen;i++)
	{
		Teacher *pTeacher=list.getNode(i);
		if (pTeacher!=NULL)
		{
			cout<<pTeacher->sName<<"  "<<pTeacher->nAge<<endl;
			delete pTeacher;
			pTeacher=NULL;
		}
		else
		{
			cout<<"获取节点指针为空"<<endl;
		}
	}

	while (list.getLen()>0)
	{
		Teacher *pTeacher=list.delNode(0);
		if (pTeacher!=NULL)
		{
			cout<<"删除节点:"<<pTeacher->sName<<"  "<<pTeacher->nAge<<endl;
			delete pTeacher;
		}
		
	}

	 nLen=list.getLen();
	cout<<"共"<<nLen<<"节点"<<endl;

	for (int i=0;i<nLen;i++)
	{
		Teacher *pTeacher=list.getNode(i);
		if (pTeacher!=NULL)
		{
			cout<<pTeacher->sName<<"  "<<pTeacher->nAge<<endl;
		}
		else
		{
			cout<<"获取节点指针为空"<<endl;
		}
	}

   return 0;
}



数据结构——线性表——链式存储结构——C++实现线性表 链式存储结构C++实现篇:主要实现了线性表的定义、初始化、显示、增、删结点、查找结点操作。 切记亲力亲为,动手实践写代码 main.cpp /*************************************************************************** * @file main.cpp 阅读详情

相关推荐

C++实现链式线性表的类方式详细教程

节点是链式线性表的基本单元,它通过指针与其他节点相连,形成一个链表。在C++中,节点通常由一个类来实现。节点的数据成员包含两部分:存储数据的部分和链接其他节点的部分。下面是一个典型的节点类定义:private:int data;// 存储数据部分Node* next;// 链接其他节点的部分public:// 构造函数、析构函数以及其他成员函数的声明将放在公有部分其中,data成员用于存储链表节点的实际数据,类型可以是整型、浮点型、字符型或用户定义的复杂类型。next。

weixin_34535286的博客 743

线性表(C++)

数据结构与算法--线性表的各项操作(C++)

weixin_63198483的博客 4500

C++实现的链式线性表设计与操作

在数据结构的世界里,线性表是基础中的基础。它代表了一系列有序的数据项,这些项之间是线性的,亦即它们之间存在一对一的关系。线性表可以通过两种方式实现:顺序存储和链式存储。其中,链式存储以其动态灵活的特点,让数据结构的操作有了更多可能。在链表中,每个节点包含数据和一个或多个指向其他节点的引用(通常称为指针)。节点是链表的基本单位,它的定义直接决定了链表的性能和灵活性。节点的设计应当遵循最小化原则,即只包含必要的数据和指针。同时,节点需要能够适应不同的数据类型,这通常通过使用泛型编程技术来实现。

weixin_42300144的博客 412

数据结构——线性表(C++)

数据结构在逻辑结构上分为线性和非线性,例如链表、顺序表、串、数组都是线性的,他们的特点就是一对一,而非线性结构比如图和二叉树,他们的对应关系是一对多、多对多,这里介绍线性表的顺序表和链表、循环链表和双向链表,还有双向循环链表。链表尤其重要,很多结构都是以链表作为基础的,比如栈和队列。先写头文件,然后是功能实现的cppprivate:int length;return;i < n;

dahulihuli的博客 1640

基于C++实现(控制台)链式存储结构的线性表

设计思路:遍历链表,如果当前节点的数据与寻找的元素相等,且next节点不为NULL,则将next节点的data值赋给next_e;设计思路:遍历链表,如果当前节点的next结点数据与所寻找的元素相等,则将当前节点的data值赋给pre_e;设计思路:创建一个新节点q,把e的值赋给q->data,从表头结点开始遍历链表i个节点,如果i值超出范围则返回ERROR;设计思路:创建一个节点q用于存储删除节点的值,从表头结点开始遍历链表i个节点,如果i值超出范围则返回ERROR;设计思路:开辟一个表头结点的空间;

神仙别闹的自留地 738

Oracle Primavera P6实战手册:从入门到精通的企业项目管理秘籍

本文详细介绍了Oracle Primavera P6在企业项目管理中的实战应用,从环境配置到高级进度控制技巧,帮助用户从入门到精通。通过WBS设计、资源优化和情景模拟等核心功能,提升项目管理效率。特别适合需要处理复杂项目和多团队协作的企业用户。

weixin_29235923的博客 254

数据结构——线性表(C++)

线性表一、线性表的定义二、线性表的抽象数据类型三、线性表的顺序存储1. 顺序存储定义2.顺序存储的实现方式四、线性表的链式存储五、其他线性表参考 一、线性表的定义 线性表:零个或多个数据元素的有限序列。 线性表是最常用且是最简单的一种数据结构。形如:A1、A2、A3….An这样含有有限的数据序列,我们就称之为线性表。 线性表包括顺序表和链表。 顺序表(其实就是数组)里面元素的地址是连续的, 链表里面节点的地址不是连续的,是通过指针连起来的。 二、线性表的抽象数据类型 线性表的抽象数据类型定义如下: ADT

DaMercy的博客 1263

手把手教你解锁TI MSPM0G3507开发板(2025新版,附XDS110接线图)

本文详细解析了2025版TI MSPM0G3507开发板的解锁方法,针对新版硬件中BSL引脚的电路设计变化提供了精准接线方案和UniFlash软件配置步骤。通过实测数据和专业指导,帮助开发者解决芯片锁定问题,确保调试接口正常响应。

weixin_42696271的博客 807

C++版数据结构-----线性表

数据结构线性表,析构函数未实现

Johnor的博客 1199

逐飞vs龙邱:英飞凌miniwiggler仿真器硬件接口差异全解析(附拆机对比图)

本文通过拆解对比逐飞与龙邱两家厂商的英飞凌miniwiggler仿真器,详细解析了其硬件接口的核心差异。重点分析了Type-C接口的取舍、DAP调试协议(SWD)的支持、电源设计(跳线帽vs拨码开关)以及工艺用料,为嵌入式开发者与智能车竞赛选手提供了清晰的选型参考和实际应用建议。

weixin_29189003的博客 113

脑影像分析入门:如何用一般线性模型(GLM)处理fMRI数据?

本文为神经影像研究入门者详细解析了如何运用一般线性模型(GLM)处理fMRI数据。文章从GLM的核心原理出发,逐步拆解了从实验设计、构建稳健设计矩阵、模型估计与统计推断,到高阶分析及多重比较校正的全流程,并指出了常见陷阱与结果解读要点,是掌握fMRI数据分析基础的关键指南。

weixin_29091445的博客 400

C++线性表

线性表是一种最简单、最基本也是最常用的线性结构。在线性结构中,数据元素之间存在一个对一个的线性关系,数据元素“一个接一个地排列”。在一个线性表中,数据元素的类型是相同的,或者说,线性表是由同一类型的数据元素构成的。在实际问题中,线性表的例子很多,如学生自然情况信息表、工资信息表等都是线性表。线性表是具有相同数据类型的n(n≥0)个数据元素的有限序列,通常记为:(a1,a2, …, ai-1, ai, ai+1, …, an)。其中,n为数据元素个数,称为表长。当n=0时称为空表。

m0_51415606的博客 1237

C++链式线性表的代码实现

C++链式线性表的代码实现 1.结构体定义 typedef struct Node { ElemType data; //单链表中的数据域 struct Node *next; //单链表的指针域 }Node, *LinkList;//LinkList为指向结构体Node的指针 2.单链表的初始化 单链表的初始化——构造一个空表。下面是代码: int InitList(...

Wannna的博客 985

同源策略与跨域

前言:最近业务上前端同学多次联系说访问腾讯云cos资源的时候因为跨域的问题访问不到。大致看了下腾讯云关于设置跨域访问的教程,按照前端同学给的域名等选项就给配了,而且测试下来也是好的。但是呢一直不知道什么是跨域这里就做一个简单的学习记录。 一、同源策略 同源策略(Same Origin Policy)是一种约定,它是浏览器最核心也是最基本的安全功能。同源策略会阻止一个域的javascrip脚本和另一个域的内容进行交互,是用于隔离潜在恶意文件的关键安全机制;关于这一点我们后面会举例说明。...

mijichui2153的博客 1万+

swl安装无法与服务器建立链接,如何解决?

🏆本文收录于《全栈Bug调优(实战版)》专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!! 备注:部分问题/疑难杂症搜集于互联网。

**My Coding Family** 2076

线性表的链式表示和C++实现

◦链表 ◦链表是由一系列叫做结点(node)的对象连 接起来的数据结构。一般来说,结点之间用 指针来连接。 ◦链表结点类(linkNode)由两部分组成: 存储元素值的element域; 存储结点指针的next域; ◦链表类由多个链表结点构成,不同于顺序表的 连续存储,这些链表结点离散分布在存储空间 中,通过链表结点的指针进行连接。 ◦链表类的数据元素包含链表的首尾结点以及当 前结点的指针,通过指针来访问链表中的所有 元素。 #include<iostream

qq_62715089的博客 307

[deprecated]第四章:TTM分析: 4.2.1 存储分配ttm_bo_validate功能实现分析

ttm_bo_validate是TTM框架中负责验证和调整BufferObject物理内存分配的核心函数,主要用于显存管理。该函数通过placement参数判断BO是否需要迁移或重新分配资源,完成内存分配、迁移及缓存策略调整等操作。实现流程包括资源释放、兼容性检查、迁移保护、新资源分配、迁移实现等步骤,支持多跳迁移和临时缓冲区。典型应用于显存溢出迁移、缓存策略调整、驱动初始化等场景,确保BO始终处于预期状态。

图形/计算GPU的驱动与虚拟化技术分享园地 845

线性表的链式存储 单链表C++实现

数据结构与算法 浙江大学 2.1线性表的链式存储 C语言实现 #include<iostream> using namespace std; typedef int ElementType; // ElementType 可定义为任意类型 typedef struct LNode* List; //template<class ElementType> struct LNode { ElementType Data; List Next; }; // Li

qq_35547879的博客 1218

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

C++实现线性表的链式存储结构(单链表)

C++实现线性表的链式存储结构(单链表)       线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的。也就是说,这些数据元素可以存储在未被使用的内存的任意位置。       链式存储结构中:存储数据元素信息的域称为...

cloudYun的博客 2198

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

大话数据结构之线性表--链式存储结构单链表的c++实现

目录数据结构之链表 数据结构之链表

JM-Nie的博客 816

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

数据结构,运用线性表的链式表示和实现 ,c++语言

该代码为运用线性表的链式结构,实现数据的增删查等操作,希望对你们有帮助 #include using namespace std; #define OVERFLOW -1//定义OVERFLOW为-1 #define OK 1 #define ERROR -2 typedef int ElemType; typedef int Status; typedef struct LNode { //这个...

renhuoyishi99的博客 1030

线性表的链式存储及其接口函数C++类实现

 http://blog.youkuaiyun.com/hongkangwl/article/details/21883231 首先通过结构体建立每个节点 [cpp] view plain copy print? "font-size: 18px;"> struct node //链表节点  {      node* ptrnext;      

JK198310的专栏 955

链式线性表的c++实现

//FILE: List.h //CLASS PROVIDED: List(线性表的链式储存结构) // //CONSTRUCTOR for the List class: //List(); //后置条件:建立头结点 // //void GetElem_L(int i, int &e); //前置条件:下标i在长度范围之内 //后置条件:若下标i在长度范围之内,则将下标i对应的元素赋值给e,否则

geekword的专栏 685

C++实现线性表的顺序存储与链式存储

实验一 线形表 一、 实验目的 掌握线性表的逻辑结构特性以及在计算机内的两种存储结构。 掌握线性表的基本操作在两种存储结构上的实现,其中以链表的操作为侧重点。 会灵活运用线性表结构解决某些实际问题。 二、 实验内容 1. 线性表顺序存储结构下基本操作的实现(初始化、赋值、取值、插入、删除、归并等)。 2. 线性表链式存储结构下基本操作的实现(初始化、建表、取值、插入、删除、归并等)。 3. 使用链...

wmx1117的博客 1342

【数据结构C/C++】详解线性表之链式与顺序存储结构增删改查的实现方式(附代码)

文章目录前言一、顺序存储结构1:建立一个包含数组的结构体2:获得元素(从数组中获取所需元素)3:插入元素4:删除元素二、链式存储结构(方法1)1.创建承载数据的载体2:创建链表2.显示链表数据3:删除链表数据4:插入数据二、链式存储结构(方法2)1:结构体创建2:创建链表3:删除链表4:获取元素5:插入元素6:删除元素推荐学习网站 前言 链表,作为数据结构中非常重要的一种算法,有着诸多用途,因此写下本文记录自己的学习过程。 参考书籍《大话数据结构第二版》 一、顺序存储结构 我们知道,数组最大的特点就.

Zhangsama1的博客 8399
上一篇: 链式线性表实现
下一篇: C++ Trace和assert 的使用
ToConnection
博客等级 码龄16年 4粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值