因为要考研,所以开始复习数据结构,每看完一个知识点,就用C++实现一下,以便加深印象
第一个知识点是顺序表,就是封装对一个数组的操作,排序什么的等到后边复习到了再来补充,现在只有增删改查
因为之前都是用java写各种项目作业什么的,所以C++语法忘得差不多的,正在慢慢捡回来,正好趁这次机会重新看了一下模板类,就用模板类实现了
//SequenceTable.h
#pragma once
#include<iostream>
using namespace std;
//顺序表
template <class T> class SequenceTable {
private:
T *array;
int length;
int maxLength;
public:
SequenceTable(); //默认构造函数
SequenceTable(int maxlength); //带最大长度参数的构造函数
bool deleteByIndex(int index); //通过下标删除元素
bool addByIndex(T t, int index); //通过下标增加元素
bool add(T t); //在表尾增加元素
T getByIndex(int index); //通过下标得到元素
int getLength(); //得到当前表的长度
int getMaxLength(); //得到当前表的最大长度
void showAll(); //显示所有元素
bool replaceByIndex(T t, int index); //通过下表替换元素
};
//SequenceTable.cpp
#include"SequenceTable.h"
template <class T> SequenceTable<T>::SequenceTable() {
}
template <class T> SequenceTable<T>::SequenceTable(int maxlength) {
array = new T[maxlength];
this->length = 0;
this->maxLength = maxlength;
}
template <class T> bool SequenceTable<T>::deleteByIndex(int index) {
if (index<0 || index>length - 1) {
return false;
}
for (int i = index + 1; i < length; i++) {
array[i - 1] = array[i];
}
length--;
return true;
}
template <class T> bool SequenceTable<T>::addByIndex(T t, int index) {
if (index<0 || index>length) {
return false;
}
length++;
for (int i = length - 1; i > index; i--) {
array[i] = array[i - 1];
}
array[index] = t;
return true;
}
template <class T> bool SequenceTable<T>::add(T t) {
array[length] = t;
length++;
return true;
}
template <class T> T SequenceTable<T>::getByIndex(int index) {
return array[index];
}
template <class T> int SequenceTable<T>::getLength() {
return length;
}
template <class T> int SequenceTable<T>::getMaxLength() {
return maxLength;
}
template <class T> void SequenceTable<T>::showAll() {
for (int i = 0; i < length; i++) {
cout << array[i] << "\t";
}
cout << endl;
}
template <class T> bool SequenceTable<T>::replaceByIndex(T t, int index) {
if (index<0 || index>=length) {
return false;
}
array[index] = t;
return true;
}
测试主函数
(之前使用的是include的头文件,但是一直报错未定义,上网查了一下,模板类好像不是很支持分开文件写定义和实现,include源cpp文件就好了)
#include<iostream>
#include"SequenceTable.cpp"
using namespace std;
void main() {
SequenceTable<int> st(10);
st.add(1);
st.add(2);
st.add(3);
st.add(4);
st.showAll();
st.addByIndex(5, 3);
st.showAll();
st.deleteByIndex(0);
st.showAll();
}