提要:这是我新开的一个专栏(数据结构学习)
很多的数据结构的书籍都是以C为基础实现的,主要是由于C强大的指针功能,我本人看的也是C语言版本,但是我是用C++实现的。建议以后想要学习C++的小伙伴最好也能把数据结构的内容从头至尾自己都实现一遍,不管用什么语言,因为数据结构在以后找工作的时候是必问知识
这是本专栏的第一篇内容 介绍的是线性表的顺序存储结构以及C++实现方法,话不多说,下面就开始的线性表的学习:
首先是头文件部分:
/
#pragma once#include #define MAXSIZE 100using namespace std;
template class CList
{
public: CList();
virtual ~CList();
//构造和析构 int getLen();
//获得线性表的空间长度
int getSize();
//获得线性表的与元素个数
bool insertElem(const int &i, const ElemType &e);
//在指定的位置插入元素
void showValue();
//显示所有元素
ElemType getElem(int i);
//获取指定位置的元素
void deletElem(int i);
//删除指定位置处的元素
void modify(int i,const ElemType &e);
//修改指定位置的元素 ElemType *baseAddress;
//链表的基地址
int m_length;
//线性表分配的存储空间长度
int m_size;
//线性表的当前长度};
其次是核心代码部分(函数的定义)
/
#include "list.h"/***************************************
*所有函数的定义
***************************************///构造函数template
CList::CList()
{
m_size = 0;
m_length = MAXSIZE;
baseAddress = new ElemType[MAXSIZE];
//动态开辟空间
}//析构函数template
CList::~CList()
{
delete[] baseAddress;
//删除动态数组
}//获取线性表的目前存储空间,空间未增加时template
int CList::getLen()
{
return m_length;
}//获取线性表的实际元素数template
int CList::getSize()
{
return m_size;
}//在线性表l的第i个位置插入元素etemplate bool CList::insertElem(const int &i, const ElemType &e){
if (m_size == MAXSIZE) {
cout << "线性表已满,不能插入元素" << endl;
return false;
}else if (i < 1 || i >= MAXSIZE) {
cout << "请输入正确的插入位置" << endl;
return false;
}else {
for (int index = m_size - 1;
index >= i - 1;
--index) {
baseAddress[index + 1] = baseAddress[index];
}
baseAddress[i - 1] = e;
m_size++;
return true;
}
}//访问指定位置的元素templateElemType CList::getElem(int i)
{
if (i < 1 || i > m_size) {
cout << "请输入正确的查找位置" << endl;
}
else {
return baseAddress[i - 1];
}
}//删除指定位置的元素template
void CList::deletElem(int i)
{
;
if (!m_size) {
cout << "线性表为空" << endl;
return;
}
else if (i < 1 || i > m_size) {
cout << "要删除的位置不在可行范围之内" << endl;
return;
}
else {
ElemType e = baseAddress[i - 1];
for (int index = i;
index != m_size;
++index) {
baseAddress[index - 1] = baseAddress[index];
}
m_size--;
}
}//显示表中所有的元素templatevoid CList::showValue(){
if (m_size == 0) {
cout << "表中无元素" << endl;
return;
}else {
for (int index = 0;
index < m_size;
++index) {
cout << baseAddress[index] << " ";
}
cout << endl;
}
}//修改指定位置的元素template void CList::modify(int i, const ElemType &e) {
if (i < 1 || i >= m_size) {
cout << "请输入正确的位置" << endl;
return;
}
baseAddress[i - 1] = e;
}
最后是测试部分(主函数)
#include "list.cpp"using namespace std;
int main()
{
CList lst;
//创建一个空表
cout << "空表的中的元素个数" << lst.getSize() << endl;
cout << "空表分配的内存空间" << lst.getLen() << endl;
for (int i = 1,j=9;
i < 10;
++i,--j) {
lst.insertElem(i,j);
}
lst.showValue();
cout << lst.getElem(1) << endl;
lst.deletElem(1);
cout << "作删除操作后的线性表" << endl;
lst.showValue();
lst.modify(1,9);
lst.showValue();
system("pause");
return 0;
}