LinearList.h
#pragma once
const int MAXSIZE = 20;
typedef int DataType;
class DataArr
{
public:
//这里MAXSIZE与length表示不同含义
//MAXSIZE:表示列表的最多可承载的元素个数
//length:表示列表当前的实际元素个数
DataType arr[MAXSIZE];
int length;
};
class LinearList
{
public:
LinearList();
~LinearList();
//初始化列表
void InitList();
//判断列表是否为空
bool IsEmpty();
//清空列表
void ClearList();
//查找元素并返回其位置
int GetElem(DataType e);
//判断是否存在元素e
bool IsLocale(DataType e);
//向列表插入元素
int InsertList(int i, DataType e);
//删除列表中的元素e
int DeleteElem(DataType e);
//获取列表长度
int GetLength();
//向列表末尾插入元素
bool pushback(DataType e);
//删除列表末尾元素
bool pop();
//打印列表
void printList();
private:
DataArr* dataArr;
};
LinearList.cpp
#include "LinearList.h"
#include <iostream>
using namespace std;
LinearList::LinearList()
{
InitList();
}
LinearList::~LinearList()
{
if (dataArr)
{
delete dataArr;
dataArr = nullptr;
}
}
void LinearList::InitList()
{
dataArr = new DataArr;
dataArr->length = 0;
}
bool LinearList::IsEmpty()
{
if (dataArr->length > 0)
return false;
return true;
}
void LinearList::ClearList()
{
//清空操作只需直接重置length为0即可
dataArr->length = 0;
}
int LinearList::GetElem(DataType e)
{
if (dataArr->length <= 0)
return -1;
for (int i = 0; i < dataArr->length; i++)
{
if (dataArr->arr[i] == e)
{
return i;
}
}
return -1;
}
bool LinearList::IsLocale(DataType e)
{
if (dataArr->length <= 0)
return false;
for (int i = 0; i < dataArr->length; i++)
{
if (dataArr->arr[i] == e)
{
return true;
}
}
return false;
}
int LinearList::InsertList(int i, DataType e)
{
if (i < 0 || i > dataArr->length || dataArr->length == MAXSIZE)
return -1;
if (i == dataArr->length)
{
dataArr->arr[i] = e;
dataArr->length += 1;
return i;
}
//从最后一个元素开始向后移动一个位置
//如果从第i个元素向后移动,会造成从第i+1个元素到最后一个元素都被置为第i+1个元素的值
for (int j = dataArr->length - 1; j >= i; j--)
{
dataArr->arr[j + 1] = dataArr->arr[j];
}
dataArr->arr[i] = e;
dataArr->length += 1;
return i;
}
int LinearList::DeleteElem(DataType e)
{
int index = GetElem(e);
if (index == -1)
return index;
for (int j = index; j < dataArr->length; j++)
{
dataArr->arr[j] = dataArr->arr[j + 1];
}
dataArr->length -= 1;
return index;
}
int LinearList::GetLength()
{
return dataArr->length;
}
bool LinearList::pushback(DataType e)
{
if (dataArr->length == MAXSIZE)
return false;
dataArr->length += 1;
dataArr->arr[dataArr->length - 1] = e;
return true;
}
bool LinearList::pop()
{
if (dataArr->length == -1)
return false;
dataArr->length -= 1;
return true;
}
void LinearList::printList()
{
if (dataArr->length == 0)
return;
std::cout << "PrintList: " << std::endl;
for (int i = 0; i < dataArr->length; i++)
{
std::cout << dataArr->arr[i] << ", ";
}
std::cout << std::endl;
}
测试代码main.cpp
#include "LinearList.h"
#include <iostream>
using namespace std;
int main()
{
LinearList sqlList;
sqlList.pushback(5);
sqlList.pushback(8);
sqlList.pushback(11);
sqlList.printList();
sqlList.pop();
sqlList.printList();
sqlList.InsertList(0, 12);
sqlList.InsertList(3, 15);
sqlList.printList();
sqlList.DeleteElem(12);
sqlList.printList();
int index = sqlList.GetElem(8);
std::cout << "Index: " << index << std::endl;
if (sqlList.IsEmpty())
{
std::cout << "List Is Empty!" << std::endl;
}
else
{
std::cout << "List is not empty." << std::endl;
int length = sqlList.GetLength();
std::cout << "Length: " << length << std::endl;
}
sqlList.ClearList();
if (sqlList.IsEmpty())
{
std::cout << "List Is Empty!" << std::endl;
}
else
{
std::cout << "List is not empty." << std::endl;
}
return 0;
}