提要:这是我新开的一个专栏(数据结构学习)
很多的数据结构的书籍都是以C为基础实现的,主要是由于C强大的指针功能,我本人看的也是C语言版本,但是我是用C++实现的。建议以后想要学习C++的小伙伴最好也能把数据结构的内容从头至尾自己都实现一遍,不管用什么语言,因为数据结构在以后找工作的时候是必问知识
这是本专栏的第一篇内容 介绍的是线性表的顺序存储结构以及C++实现方法,话不多说,下面就开始的线性表的学习:
首先是头文件部分:
#pragma once
#include
#define MAXSIZE 100
using namespace std;
template <class ElemType>
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 <class ElemType>
CList<ElemType>::CList()
{
m_size = 0;
m_length = MAXSIZE;
baseAddress = new ElemType[MAXSIZE];
}
template <class ElemType>
CList<ElemType>::~CList()
{
delete[] baseAddress;
}
template <class ElemType>
int CList<ElemType>::getLen()
{
return m_length;
}
template <class ElemType>
int CList<ElemType>::getSize()
{
return m_size;
}
template <class ElemType>
bool CList<ElemType>::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;
}
}
template<class ElemType>
ElemType CList<ElemType>::getElem(int i)
{
if (i < 1 || i > m_size) {
cout << "请输入正确的查找位置" << endl;
}
else {
return baseAddress[i - 1];
}
}
template<class ElemType>
void CList<ElemType>::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--;
}
}
template<class ElemType>
void CList<ElemType>::showValue(){
if (m_size == 0) {
cout << "表中无元素" << endl;
return;
}else {
for (int index = 0; index < m_size; ++index) {
cout << baseAddress[index] << " ";
}
cout << endl;
}
}
template <class ElemType>
void CList<ElemType>::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<int> 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;
}