C++模版编程——单链表的实现

C++模版类实现单链表 单链表是一种基本的数据结构,它由一系列节点组成,每个节点都包含存储数据的值和一个指向列表中下一个节点的指针。如果当前节点是列表的最后一个节点,则该指针为null。单链表的实现原理;类的设计、封装;设计抽象类list并让单链表继承自list,是为了和顺序表、双链表配合,利用(纯)虚函数实现多态。通过使用C++模板,我们创建了一个灵活且类型无关的单链表数据结构。这样的实现使得单链表能够适应不同类型的数据存储需求,极大地增强了代码的复用性和扩展性。 阅读详情

代码的注释还是很清晰的,就不说废话了。

直接上代码:

#pragma once
#include <assert.h>
#include <iostream>
using std::cout;
using std::endl;
//单链表模板类
template<class T>
class CList
{
public:
	//类方法接口
	enum{begin=0,end=-1};
	typedef struct _LIST
	{
		_LIST* pNext;//指向下一个元素
		T data;//数据域
	}LIST,*PLIST;
	explicit CList(const T s[],const int n);
	explicit CList();
	CList<T>& operator=(const CList<T>& l);//默认赋值操作符
	bool operator==(const CList<T>& l);//重载等于操作符
	friend bool operator==(const LIST& l1,const LIST& l2)
	{
		if((l1.data==l2.data))
			return true;
		return false;
	}
	virtual~ CList();
	//打印链表元素
	void Show()const;
	//获取元素数目
	int GetLength()const;
	//获取第index 个元素
	T GetAt(const int& index)const;
	T operator[](int index)const;
	//在第index个元素前插入元素t,插入末尾时约定index=-1
	void Insert(const T& t,const int& index=end);//默认情况下,在链表末尾插入
	void Insert(const T s[],const int count,const int& index=end);//在第index个元素前插入count个元素
	//删除索引为index 的元素
	void Delete(const int& index);
	//删除从index开始的n个元素,当n大于index开始的元素数目之和时,删除后面所有的
	void Delete(const int& index,const int& n);
	//删除索引为index1和index2之间的所有元素
	void DeleteBetween(const int& index1,const int& index2);//index1和index2之间大小不用限定
	//删除链表中所有元素
	void DeleteAll();
	//获取链表所有元素,存在数组中
	void GetData(T s[])const;
	//获取链表中最大元素
	T GetMaxData()const;
	//获取链表中最小元素
	T GetMinData()const;
	//对链表进行排序
	void SortList();
	//链表逆置
	void InverseList();
	//链表是否为空
	bool IsEmpty()const;
	//替换索引为index处的元素值
	void Replace(const T& t,const int& index);
	//用数组s[]中的count个元素替换index开始的count个节点的值
	void Replace(const T s[],const int& index,const int& count);
	//从pos开始查找,默认从第一个位置,按先后顺序查找元素值,返回索引值,没有找到返回-1,找到即停止
	int Find(const T& t,const int pos=begin);
	//从末尾开始查找,没找到返回-1
    int FindLastOf(const T& t,const int pos=end);
	//获取两个变量中大的一个
	inline int GetMax(const int& a,const int& b)const;
	//获取两个变量中小的那个
	inline int GetMin(const int& a,const int& b)const;
protected:
	void Release();//释放所有内存空间
	//释放index开始的所有内存空间
	void Release(const int& index);
	//释放index1到index2之间元素的内存空间
	void Release(const int& index1,const int& index2);
	//创建一个链表链接S[]内所有元素,返回首地址
	LIST* CreateList(const T s[],const int& count)const
	{
		assert(count>0);
		PLIST p1=new LIST;//第一个节点
		p1->data=s[0];
		PLIST temp=p1;
		for(int i=1;i<count-1;++i)
		{
			PLIST p=new LIST;
			p->data=s[i];
			temp->pNext=p;
			temp=p;
		}
		PLIST tail=new LIST;
		tail->data=s[count-1];
		temp->pNext=tail;
		tail->pNext=NULL;
		return p1;
	}
	//返回第index(从0开始索引)个元素的地址,默认值-1,返回头指针地址
	LIST* GetAddr(const int& index=-1)
	{
		assert(index>=-1&&index<m_iLength);
		if(index==-1)
			return pHeader;
		PLIST p=pHeader->pNext;
		for(int i=0;i<index;++i)
			p=p->pNext;
		return p;
	}
	//交换元素值
	inline void Swap(LIST* p1,LIST* p2)const;
	//快速排序算法
	int Partition(int low,int high);
	void QSort(int low,int high);
	void QuickSort();
private:
	//类属性
	PLIST pHeader;//指向数据域缓冲区首地址,data存放链表长度
	int m_iLength;//元素数目
};
//实现类方法
template<class T>
CList<T>::CList():pHeader(NULL),m_iLength(0)
{
	pHeader=new LIST;
	pHeader->pNext=NULL;
	pHeader->data=(T)0;
}
template<class T>
CList<T>::CList(const T s[], const int n):pHeader(NULL),m_iLength(n)
{
	assert(n>=0);
	pHeader=new LIST;
	pHeader->data=(T)0;
	pHeader->pNext=CreateList(s,n);
}
template<class T>
void CList<T>::Release()
{
	PLIST p=pHeader;
	while(p)
	{
		PLIST temp=p->pNext;
		delete p;
		p=temp;
	}
	pHeader=NULL;
	m_iLength=0;
}
template<class T>
CList<T>::~CList()
{
	Release();
}
template<class T>
void CList<T>::Show()const
{
	PLIST p=pHeader->pNext;
	for(int i=0;i<m_iLength-1;++i)
	{
		cout<<p->data<<"--->";
		p=p->pNext;
	}
	cout<<p->data<<endl;
	cout<<endl;
}
template<class T>
int CList<T>::GetLength() const
{
	return m_iLength;
}
template<class T>
T CList<T>::GetAt(const int& index) const
{
	assert(index>=0&&index<m_iLength);
	PLIST p=pHeader->pNext;
	for(int i=0;i<index;++i)
		p=p->pNext;
	return p->data;
}
template<class T>
T CList<T>::operator [](int index) const
{
	return GetAt(index);
}
template<class T>
CList<T>& CList<T>::operator =(const CList<T> &l)
{
	if(*this==l)
		return *this;
	Release();
	pHeader=new LIST;
	pHeader->data=(T)0;
	m_iLength=l.m_iLength;
	PLIST lp=pHeader;
	for(int i=0;i<m_iLength-1;++i)
	{
		PLIST p=new LIST;
		p->data=l[i];
		lp->pNext=p;
		lp=p;
	}
	PLIST tail=new LIST;
	tail->data=l[m_iLength-1];
	tail->pNext=NULL;
	lp->pNext=tail;
	return *this;
}
template<class T>
bool CList<T>::operator ==(const CList<T> &l)
{
	if(pHeader==l.pHeader)
		return true;
	return false;
}
template<class T>
void CList<T>::Insert(const T &t, const int& index = -1)
{
	assert(index>=-1&&index<m_iLength);//确保插入位置有效
	LIST* p=new LIST;
	p->data=t;
	if(index==-1)// 末尾插入
	{
		GetAddr(m_iLength-1)->pNext=p;
		p->pNext=NULL;
	}
	else
	{
		PLIST pl=NULL;
		if(index==0)
			pl=GetAddr();
		else
			pl=GetAddr(index-1);
		p->pNext=pl->pNext;
		pl->pNext=p;
	}
	m_iLength++;
}
template<class T>
void CList<T>::Insert(const T s[], const int count, const int& index = -1)
{
	assert(count>1);
	assert(index>=-1&&index<m_iLength);
	PLIST p=CreateList(s,count);
	if(index==-1)//末尾插入
		GetAddr(m_iLength-1)->pNext=p;
	else
	{
		PLIST p1=NULL;
		if(index==0)//头结点后插入
			p1=GetAddr();
		else
			p1=GetAddr(index-1);
		PLIST tail=p->pNext;
		while(true)//循环获取插入短链的尾指针
		{
			if(tail->pNext==NULL)
				break;
			tail=tail->pNext;
		}
		tail->pNext=p1->pNext;
		p1->pNext=p;
	}
	m_iLength+=count;
}
template<class T>
void CList<T>::Delete(const int& index)
{
	assert(index>=0&&index<m_iLength);
	PLIST p=NULL;
	if(index==0)//删除第一个节点
	{
		p=pHeader->pNext;
		pHeader->pNext=p->pNext;
		delete p;
		p=NULL;
	}
	else if(index==m_iLength-1)//删除最后一个节点
	{
		p=GetAddr(m_iLength-2);
		PLIST temp=p->pNext;
		p->pNext=NULL;
		delete temp;
		temp=NULL;
	}
	else//其他情况
	{
		p=GetAddr(index-1);
		PLIST temp=p->pNext;
		p->pNext=temp->pNext;
		delete temp;
		temp=NULL;
	}
	m_iLength--;
}
template<class T>
void CList<T>::GetData(T s[]) const
{
	PLIST p=pHeader->pNext;
	int i=0;
	while(p)
	{
		s[i]=p->data;
		p=p->pNext;
		++i;
	}
}
template<class T>
void CList<T>::DeleteAll()
{
	Release();
	pHeader=new LIST;
	pHeader->data=(T)0;
	pHeader->pNext=NULL;
}
template<class T>
void CList<T>::Delete(const int &index, const int &n)
{
	assert(index>=0&&index<m_iLength);
	assert(n>0);
	if(m_iLength-index<n)//删除index开始的所有元素
		Release(index);
	else//删除index开始的n个元素 
		Release(index,n+index-1);
}
template<class T>
void CList<T>::DeleteBetween(const int& index1, const int& index2)
{
	assert(index1>=0&&index1<m_iLength);
	assert(index2>=0&&index2<m_iLength);
	Release(index1,index2);
}
template<class T>
void CList<T>::Release(const int &index)
{
	PLIST p=GetAddr(index-1);
	PLIST temp=p->pNext;//保存下一个节点
	p->pNext=NULL;
	while(temp)
	{
		PLIST lp=temp->pNext;
		delete temp;
		temp=lp;
	}
	m_iLength=index;
}
template<class T>
void CList<T>::Release(const int &index1, const int &index2)
{
	if(index1==index2)//不释放
		return;
	int max=GetMax(index1,index2);
	int min=GetMin(index1,index2);
	if(max==m_iLength-1)
	{
		Release(min);
		return;
	}
	PLIST p1=GetAddr(min-1);
	PLIST p2=p1->pNext;//保存需要删除内存首地址
	PLIST p3=GetAddr(max+1);
	p1->pNext=p3;//连接
	while(p2!=p3)
	{
		PLIST temp=p2->pNext;//保存下一个节点的地址
		delete p2;
		p2=temp;
	}
	m_iLength-=(max-min+1);
}
template <class T>
T CList<T>::GetMaxData() const
{
	assert(m_iLength>0);
	T max=GetAt(0);
	for(int i=1;i<m_iLength;++i)
	{
		T temp=GetAt(i);
		if(temp>max)
			max=temp;
	}
	return max;
}
template <class T>
T CList<T>::GetMinData() const
{
	assert(m_iLength>0);
	T min=GetAt(0);
	for(int i=1;i<m_iLength;++i)
	{
		T temp=GetAt(i);
		if(temp<min)
			min=temp;
	}
	return min;
}
template<class T>
void CList<T>::SortList()
{
	if(m_iLength<2)
		return;
	QuickSort();
}
template<class T>
inline void CList<T>::Swap(LIST* p1,LIST* p2)const
{
	T temp=p1->data;
	p1->data=p2->data;
	p2->data=temp;
}
template<class T>
void CList<T>::InverseList()
{
	if(m_iLength<2)
		return;
	int low=0,high=m_iLength-1;
	while(low<high)
	{
		Swap(GetAddr(low),GetAddr(high));
		low++;
		high--;
	}
}
template<class T>
int CList<T>::Partition(int low, int high)
{
	T key=GetAddr(low)->data;
	while(low<high)
	{
		while(low<high&&GetAddr(high)->data>=key)
			--high;
		GetAddr(low)->data=GetAddr(high)->data;
		while(low<high&&GetAddr(low)->data<=key)
			++low;
		GetAddr(high)->data=GetAddr(low)->data;
	}
	GetAddr(low)->data=key;
	return low;
}
template<class T>
void CList<T>::QSort(int low, int high)
{
	if(low<high)
	{
		int ret=Partition(low,high);
		QSort(low,ret-1);
		QSort(ret+1,high);
	}
}
template<class T>
void CList<T>::QuickSort()
{
	QSort(0,m_iLength-1);
}
template<class T>
bool CList<T>::IsEmpty() const
{
	if(m_iLength)
		return false;
	return true;
}
template<class T>
void CList<T>::Replace(const T &t, const int &index)
{
	assert(index>=0&&index<m_iLength);
	GetAddr(index)->data=t;
}
template<class T>
void CList<T>::Replace(const T s[], const int &index, const int &count)
{
	assert(index>=0&&index<m_iLength);
	assert(count>=0);
	if(count==0)
		return;
	if(m_iLength-index>count)//替换count个元素
	{
		for(int i=0;i<count;++i)
			GetAddr(index+i)->data=s[i];
	}
	else//替换m_iLength-index个
	{
		for(int i=0;i<m_iLength-index;++i)
			GetAddr(index+i)->data=s[i];
	}
}
template<class T>
inline int CList<T>::GetMax(const int& a,const int& b)const
{
	if(a>b)
		return a;
	return b;
}
template<class T>
inline int CList<T>::GetMin(const int& a,const int& b)const
{
	if(a<b)
		return a;
	return b;
}
template<class T>
int CList<T>::Find(const T &t,const int pos)
{
	assert(pos>=0&&pos<m_iLength);
	int index=pos;
	PLIST p=GetAddr(pos);
	while(true)
	{
		if(p->data==t)
			return index;
		if(p->pNext==NULL)
			return -1;
		p=p->pNext;
		++index;
	}
}
template<class T>
int CList<T>::FindLastOf(const T &t,const int pos)
{
	assert(pos>=-1&&pos<m_iLength);
	PLIST p=NULL;
	int index=pos;
	if(pos==end)
	{
		p=GetAddr(m_iLength-1);
		index=m_iLength-1;
	}
	else
		p=GetAddr(pos);
	while(true)
	{
		if(p->data==t)
			return index;
		if(index==0)
			return -1;
		--index;
		p=GetAddr(index);
	}
}

涉及到一些基础的C++编程技巧,以及内存空间动态管理,希望对大家有帮助.

C++实现单链表的基本操作 C++实现单链表的基本操作 包含了单链表的创建、插入、删除、排序、输出等功能。 //C++实现单链表的基本操作 #include&lt;iostream&gt; #include&lt;algorithm&gt; using namespace std; #define ERROR 1; typedef int ElemType; typedef int Status; //定义单链表中每个节点... 阅读详情

相关推荐

单链表的基本操作(c++实现)

(1)编程实现单链表的基本操作:建立单链表,查找单链表,插入单链表,删除单链表; (2)采用单链表结构编程实现:两个有序单链表的归并运算。 /* (1) */ #include <iostream> typedef struct LNode{ int data; struct LNode *next; }LNode,*LinkList; bool InitList(...

路漫漫小菜狗的博客 4856

C++string中find_first_of()函数和find_last_of()函数

C++string中find_first_of()函数和find_last_of()函数

信小海 4万+

C++实现单链表反转

一.写在前面的话: 找工作必须是全方位重点突击,准备工作可以从两方面着手,第一是公司的笔试环节,应该注重刷题。第二是公司的面试环节,对自己写在简历上的东西一定要熟悉,主要以项目中所涉及到的C++编程技术为主。 二.今日份编程练习 《C++实现单链表的反转》 实现思路: 1.如果单链表为空或者只有一个元素,那么就直接返回。 2.设置两个前后相邻的指针p,q,将p指针所指向的节点作为q所指...

weixin_40260504的博客 8660

find_last_of:C++ 中查找字符集合的利器

find_last_of 解析

威桑的博客 3405

C++实现单链表的16种基本操作

C++实现单链表的16种基本操作 链表初始化,头插法创建链表,尾插法创建链表,取值,查找(第i个节点的数据域或者数据域为某个特定值的节点),有顺序的合并两个链表,无顺序的合并两个链表,插入,删除,逆置链表,求链表的节点个数,删除数据域重复的节点,输出链表,判空,置空链表。 以下是我写的头文件的代码 #ifndef DANLIANBIAO_H #define DANLIANBIAO_H #endif #include<iostream> #include<stdio.h> #inclu

weixin_47373497的博客 2786

C++单链表选择排序算法实现.zip

C++是一种通用编程语言,由贝尔实验室的比雅尼·斯特劳斯特鲁普于1979年开始设计,旨在为程序员提供一种可以进行系统编程同时又具有高效的资源控制的编程语言。经过多年的演变,C++已经成为一种多范式语言,支持面向对象、泛型和过程式编程。单链表是一种常见的数据结构,它的每个节点由两部分组成:一部分是存储数据元素的数据域,另一部分是指向下一个节点地址的指针域。单链表中的节点通过指针域相互链接形成一个线性结构。单链表的特点是每个节点只包含一个指针域,因此只能单向导航。

weixin_34718952的博客 666

C++功能模块1:find_last_of()解析文件名

想要从一个路径加文件名的字符串里解析出文件名,可以利用c++标准库的string::find_last_of()函数:

m0_37635769的博客 1571

单链表的C++模板实现

用C++模板方式实现自定义单链表,交流学习用

find_first_of()函数和find_last_of()函数

/从原串中下标为5开始逆向查找,首先f与待查子串每一字符比较,若有相同的就输出该字符在原串的下标。若一个都没有,就依次逆向比较,即e再与待查子串一一比较,直到原串的b与待查子串中的b相同,然后输出该b在原串的下标1。//从下标为1开始查,待查串ab第一个出现在原串str中的字符是b,返回b的下标,结果为1。逆向查找在原字符串中最后一个与指定字符串(或字符)中的某个字符匹配的字符,返回它的位置。正向查找在原字符串中第一个与指定字符串(或字符)中的某个字符匹配的字符,返回它的位置。

xlfdlbx的博客 656

博图软件V15.1安装教程

博途软件安装

m0_46266496的博客 1万+

MIMIC数据库基本信息分析

一、MIMIC数据库中26张表介绍 数据库中一共有26张表,记录患者入院的各种信息,每张表的介绍如下所示。 表格名 信息 admission 患者基本信息,比如性别、种族、语言、宗教、婚姻、入院和出院时间、死亡时间等 callout 提供病人准备从ICU转出或者已经从ICU转出时相关信息 caregivers 记录医护人员信息(ID、类型、附加...

m0_37520426的博客 1万+

C++实现链表

【代码】C++实现链表。

m0_73911436的博客 548

某知名系统漏洞挖掘与利用思路探索

本文以安全研究为目的,分享对该套系统的代码审计和漏洞挖掘过程,文中所提到的漏洞均已提交给CNVD&CITIVD,请勿用做非法用途。

C20220511的博客 1904

C++实现单链表(Single Linked List)

C++实现单链表(Single Linked List) 语言这个东西不用真的会忘, 我记得前前后后C++的基本语法我也看了好几遍了,一直没有动手写过什么东西,所以一遍遍的看,一遍遍的忘… … 正好最近在看数据结构,想着自己用C++来实现一下,一方面是熟悉整个逻辑过程,加深对数据结构的理解,另一方面,也熟悉一下C++。 单链表是线性表的链式存储结构,同顺序存储结构(可以理解为C++中的数组)不同的是,单链表在插入和删除一个结点时,不需要移动大量的元素,但是单链表没有数组中索引的概念,所以在查询一个元素

weixin_42133358的博客 8909

RT-Thread Studio 使用笔记(七)| 配合STM32CubeMX添加裸机驱动(以ADC为例)

1. 配置STM32CubeMX 2. 复制stm32xxxx_hal_msp.c文件 将 CubeMx 生成的代码 stm32f7xx_hal_msp.c 函数复制到 RT-Thread Studio 生成的工程中,并参与工程编译: 由于我们并没有使用 CubeMx 生成的工程,所以这里需要将 stm32f7xx_hal_msp.c 文件中 #include “main.h” 替换为 #i...

Mculover666的博客(嵌入式) 9624

harbor x509: certificate signed by unknown authority【20251222】

本教程通过「合并证书链(服务器端)+ 预置根 CA(客户端)」彻底解决了自签名证书的 x509 错误,同时集成了 Trivy 漏洞扫描,实现了 Harbor 从搭建到实用的全流程。证书链合并是服务器端的关键,确保客户端获取完整信任路径;客户端需同时配置「系统信任库 + Docker 信任目录」,避免 Docker 独立信任机制导致的问题;所有 IP 需保持一致(Harbor 配置、证书绑定、客户端访问),是避免错误的基础。

老韩的Linux云计算架构师进阶之路 681

C++单链表最简单的创建,插入,删除功能实现

C++单链表最简单的创建,插入,删除功能实现 这里是对数据结构的复习,好久没有动C++了,现在再来写写链表, 怕真的以后看都看不懂了就尴尬了。逻辑语句不难,应该能看懂。大神别骂我为什么不用C++模板,因为我只想单纯写写链表看看自己还会不会。另外main函数可以自己写写清屏语句,我就不写了。 #include &lt;iostream&gt; using namespace st...

qq_36204385的博客 3926

YOLOv5/v7/v8/v9/v10/v11/v12/13目标检测结果解析,超w字精读,IoU、GIoU、DIoU、CIoU、EIoU详细解释,精确率、召回率、AP、mAP与P-R 曲线图深度解析

YOLOv5/v7/v8/v9/v10/v11/v12/13目标检测结果解析,超w字精读,IoU、GIoU、DIoU、CIoU、EIoU详细解释,精确率、召回率、AP、mAP与P-R 曲线图深度解析

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1409

单链表的逆置-C++实现

对于单链表的逆置有两种方法可以实现: (1)利用辅助指针          基本思想:在遍历结点过程中,设置辅助指针,用于记录先前遍历的结点。这样依次编译的过程中只需修改其后继结点的next域即可。          实现代码: typedef int DataType; //类型定义 typedef struct node{ //单链表定义 DataType data;

heyabo 7万+

AI智算-K8s+vLLM & Ray:DeepSeek-r1 671B 满血版分布式推理部署实践

自从上次发布 【AI-智算】K8s+SGLang实战:DeepSeek-r1:671b满血版多机多卡私有化部署全攻略] 文章后,本次将演示另一个主流推理引擎工具——vLLM,结合K8s、LWS、Ray、Volcano等技术栈,部署DeepSeek-r1 671b 满血版分布式推理集群,并对比其与SGLang推理引擎的性能表现。

Kason_iWiki 1823

机器学习实战4-教育领域:学生成绩的可视化分析与成绩预测-详细分析

大家好,我是微学AI,今天给大家带来机器学习实战4-学生成绩的可视化分析与成绩预测,机器学习在教育中的应用具有很大的潜力,特别是在学生成绩的可视化分析与成绩预测方面。机器学习可以通过对学生的父母教育情况和学校表现等数据进行分析和挖掘,从而揭示潜在的学习模式和趋势。

微学AI的博客 7676

实验二 单链表的操作(数据结构实验c++编写)

文章目录1.实验目的2.实验内容3.实验步骤4.实验代码5.实验总结 1.实验目的 (1)掌握线性表的链式存储结构; (2)掌握单链表及其基本操作的实现。 2.实验内容 (1)编程实现单链表的以下基本操作:建立单链表,查找单链表,插入单链表,删除单链表。 (2)采用单链表结构编程实现:两个有序单链表的归并运算。 3.实验步骤 编写程序框架,利用while循环输入操作代码,利用switch选择语句...

abtgu的博客 6954

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

数据结构——单链表的C++实现

数据结构——单链表的C++实现 \qquad单链表的创建、求长度、查找、插入和删除的C++实现。 #include<iostream> using namespace std; //1.定义 struct Node { int num; Node* next; }; typedef Node* List; void input(int* a) { cin >> *a; } //2.创建链表 void CreateList(List* L, int n, void (*inp

zxr916的博客 535

VB摄像头监控

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

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

C/C++编程笔记:如何使用C++实现单链表?单链表基本运算实现

接上节:C/C++编程笔记:如何使用C++实现单链表?单链表第一部分。 单链表上的基本运算实现 (四) 求表长 由于我们的代码中已经定义过一个叫做 curLength 的变量用来记录我们的表长 所以我们可以直接返回,我们在定义中已经实现了,也就是这句: int size()const {return curLength;}//返回单链表的当前实际长度 但是如果我们没有这样一个变量,我们想要实现这样的功能又是什么样的方法呢? template<class elemTy...

致力于C语言C++知识分享! 582

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

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

C++实现单链表创建、插入、删除等

本文通过C++编程实现对单链表的创建、插入、删除等操作 #include <iostream> #include <string> using namespace std; /* Link struct body*/ typedef struct Node { int data; struct Node *next; }LinkList; Lin...

lijunnanxcx的博客 2765

C/C++编程笔记:如何使用C++实现单链表?单链表类型定义和基本结构

如何弥补顺序表的不足之处? 第一次学习线性表一定会马上接触到一种叫做顺序表(顺序存储结构),经过上一篇的分析顺序表的优缺点是很显然的,它虽然能够很快的访问读取元素,但是在解决如插入和删除等操作的时候,却需要移动大量的元素,效率较低,那么是否有一种方法可以改善或者解决这个问题呢? 首先我们需要考虑,为什么顺序表中的插入删除操作会涉及到元素的移动呢? 好家伙,问题就是围绕着顺序表的最大的特点出现的——顺序存储,相邻放置元素,也就是说每个元素都是根据编号一个一个挨着的,这就导致了 插入或删除后,为了仍然

致力于C语言C++知识分享! 2150
上一篇: C++读取歌词文件(LRC),分解时间和歌词的方法
下一篇: 使用开源库zlib压缩和解压文件
疯狂-的-蜗牛
博客等级 码龄16年 427粉丝 104原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值