IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 线性表顺序表示的C++语言实现 -> 正文阅读

[C++知识库]线性表顺序表示的C++语言实现

#include<iostream>
#include<string>

using namespace std;

const int Maxsize = 20;
const int ERROR = 0;
const int OK = 1;

template <class T>
class MyList
{
public:
	MyList();//  初始化
	~MyList();
	void InitList(int i,T *e);
	void ClearList();                                   // 将数组长度设为0
	bool ListEmpty();                                   // 判断数组是否为空
	int ListLength();                                   // 获取数组长度
	bool GetElem(int i, T& e);                       // 查找指定下标元素,如果找到返回true,同时返回第i个数据元素的值
	int LocateElem(T e);                            // 查找指定元素,并返回其序号
	bool PriorElem(T& currentElem, T& preElem);   // 根据输入的元素,查找元素的前驱元素,如果找到返回true,同时返回前驱元素
	bool NextElem(T& currentElem, T& nextElem);   // 根据输入的元素,查找元素的后继元素,如果找到返回true,同时返回后继元素
	void ListTraverse();                                // 遍历线性表,输出元素
	bool ListInsert(int i, T& e);                    // 在指定位置插入一个元素
	bool ListDelete(int i);                    // 删除指定位置元素


private:
	T* elem;
	int length;
};

template <class T>//初始化类模板的格式
MyList<T>::MyList()
{
	this->length = 0;
	this->elem = new T[Maxsize];//开辟了一段连续的数组空间,delete的时候,要用delete[]
	if (!elem)
		exit(OVERFLOW);
}
template <class T>
void MyList<T>::InitList(int i,T *e)
{
	cout << "开始进行列表初始化!" << endl;
	for (int i = 0; i < 5; i++)
	{
		this->elem[i] = *e;
		e++;
		this->length++;
	}
}

template <class T>
void MyList<T>::ClearList()
{
	this->length = 0;
}

template <class T>
bool MyList<T>::ListEmpty()
{
	if (!this->length)
		return true;
	else
		return false;
}

template <class T>
int MyList<T>::ListLength()
{
	return this->length;
}

template <class T>
bool MyList<T>::GetElem(int i, T& e)
{
	if (i > this->length || i < 1)
		return false;
	else
	{
		e = this->elem[i - 1];
		return true;
	}
}

template <class T>
int  MyList<T>::LocateElem(T e)
{
	for (int i = 0; i < this->length; i++)
	{
		if (this->elem[i] == e)
			return i + 1;//返回的是序号,而不是在内存中的序号
	}
	return ERROR;
}

template <class T>
bool MyList<T>::PriorElem(T& currentElem, T& preElem)
{
	int temp = this->LocateElem(currentElem);
	if (temp == 1)
	{
		cout << "第一个元素无前驱元素" << endl;
		return false;
	}
	else
	{
		preElem = this->elem[temp - 2];
		return true;
	}
}

template <class T>
bool MyList<T>::NextElem(T& currentElem, T& nextElem)
{
	int temp = this->LocateElem(currentElem);
	if (temp == this->length)
	{
		cout << "最后一个元素无前驱元素" << endl;
		return false;
	}
	else
	{
		nextElem = this->elem[temp];
		return true;
	}
}

template <class T>
void  MyList<T>::ListTraverse()
{
	for (int i = 0; i < this->length; i++)
	{
		cout << this->elem[i] << "\t";
	}
	cout << endl;
}

template <class T>
bool MyList<T>::ListInsert(int i, T& e)
{
	//判断输入是否合法
	if (i<0 || i>this->length)
	{
		cout << "插入位置有误!" << endl;
		return false;
	}
	//判断存储空间是否已满
	if (this->length == Maxsize)
	{
		cout << "存储空间已满" << endl;
		return false;
	}
	for (int j = this->length - 1; j >= i - 1; j--)
	{
		this->elem[j + 1] = this->elem[j];
	}
	this->elem[i - 1] = e;
	++this->length;
	return true;
}

template <class T>
bool MyList<T>::ListDelete(int i)
{
	//判断输入是否合法
	if (i<0 || i>this->length)
	{
		cout << "插入位置有误!" << endl;
		return false;
	}
	//判断是否有元素可删
	if (!this->length)
	{
		cout << "线性表中无元素可删" << endl;
		return false;
	}
	for (int j = i - 1; j < this->length; j++)
	{
		this->elem[j] = this->elem[j + 1];
	}
	this->length--;
	return true;
}

template <class T>
MyList<T>::~MyList()
{
	if (elem)
	{
		delete[]elem;
		elem = NULL;
	}
}

int main()
{
	MyList<int> L;
	int Arry[5] = { 1,2,3,4,5};
	L.InitList(5,Arry);
	L.ListTraverse();
	//int r1 = L.ListLength(); cout << r1 << endl;//获取元素个数
	//bool r2 = L.ListDelete(2); cout <<boolalpha<< r2 << endl; L.ListTraverse();//删除第二个位置上的元素
	int key = 0;
	int key_next, key_prior;
	L.ListInsert(1, key);
	L.ListTraverse();
	bool r3=L.NextElem(key, key_next);
	bool r4 = L.PriorElem(key_next,key_prior);
	cout << "0的后继元素是:" << key_next << endl;
	cout << "1的前驱元素是:" << key_prior << endl;

	

	system("pause");
	return 0;
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-09 19:17:43  更:2021-11-09 19:19:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:53:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码