seqLinkList
.h文件
#ifndef SEQLINKLIST_H
#define SEQLINKLIST_H
//顺序链表
#include<iostream>
using std::cout;
using std::endl;
using std::cin;
typedef int ElemType;
constexpr auto MAXSIZE = 20;
class seqLinkList
{
public:
seqLinkList() { curLength = -1; }//保证下标从0开始变化
~seqLinkList() { }//一定要写,不然要报错
bool Empty();//查看是否为空表
void ClearList();//清空列表元素
void GetElem(int nPos, ElemType &elem);//获得第nPos位置的元素值,并返回给elem
bool FindElem(int elem);//查找列表中是否有elem值得元素
void Insert(ElemType elem);//默认在列表尾部插入elem元素
void Insert(int nPos, ElemType elem);//在第nPos位置前插入值为elem的元素
void Delete(int nPos, ElemType &elem);//删除第nPos位置的元素,并将其值返回给elem元素
void Delete();//默认删除尾部的元素
int Length();//返回列表长度
void merge(seqLinkList &L);//将所有L中不在原列表的元素插入到原列表中
void print();//打印列表
private:
ElemType data[MAXSIZE];//存储列表的数组
int curLength;//列表的当前长度
};
#endif // !SEQLINKLIST_H
SeqLinkList.cpp
#include"SeqLinkList.h"
//查看是否为空表
bool seqLinkList::Empty() {
if (this->curLength==-1)
{
return true;
}
return false;
}
//返回列表长度
int seqLinkList::Length() {
return curLength;
}
//获得第nPos位置的元素值,并返回给elem
void seqLinkList::GetElem(int nPos, ElemType &elem) {
if (nPos > MAXSIZE|| nPos <= curLength)
{
cout << "Out of List Scale!";
return;
}
elem = data[nPos];
}
//清空列表元素
void seqLinkList::ClearList() {
if (!Empty())
{
for (int i = 0; i <= this->Length(); i++)
data[i] = 0;
}
curLength = -1;
}
//查找列表中是否有elem值的元素
bool seqLinkList::FindElem(ElemType elem) {
for (int i = 0; i < this->Length() && data[i] == elem; ++i)
return true;
return false;
}
//在第nPos位置前插入值为elem的元素
void seqLinkList::Insert(int nPos, ElemType elem) {
if (nPos > MAXSIZE|| Empty()|| nPos < 0)
{
if ((curLength + 1) == MAXSIZE)
{
cout << "List is full!";
return;
}
cout << "Out of List Scale! OR List is empty!";
return;
}
if (nPos<= curLength)//可以考虑从后面开始变换,这样就可以少写一个for了
{
ElemType* temp = new ElemType[curLength - nPos+1];//辅助数组
for (int i = nPos; i <= curLength; i++)
temp[i - nPos] = data[i];//偏移nPos
data[nPos] = elem;//插入elem
++curLength;
for (int j = nPos+1; j <= curLength; j++)
data[j] = temp[j - nPos - 1];//偏移nPos+1
delete []temp;
}
else {
cout << "Input index is too large!";
return;
}
}
//默认在列表尾部插入elem元素
void seqLinkList::Insert(ElemType elem) {
if (curLength<MAXSIZE-1)
{
++curLength;
data[curLength] = elem;
}
else
{
cout << "Out of List Scale!";
return;
}
}
//默认删除尾部的元素
void seqLinkList::Delete() {
if (!Empty())
data[curLength--] = 0;
else
return;
}
//删除第nPos位置的元素,并将其值返回给elem元素
void seqLinkList::Delete(int nPos, ElemType &elem) {
if (nPos > MAXSIZE || Empty() || nPos < 0)
{
cout << "Out of List Scale! OR List is empty!";
return;
}
if (nPos <= curLength)
{
elem = data[nPos];
for (int i = nPos; i < curLength; i++)
data[i] = data[i + 1];
data[curLength] = 0;
--curLength;
}
else {
cout << "Input index is too large!";
return;
}
}
//将所有L中不在原列表的元素插入到原列表中
void seqLinkList::merge(seqLinkList& L) {
int La = this->Length();
int Lb = L.Length();
int flag = 1;
for (int i = 0; i <= Lb; i++)
{
if (!this->FindElem(L.data[i]))
this->Insert(L.data[i]);
}
}
//打印列表
void seqLinkList::print() {
if (Empty())
{
cout << "please input list";
return;
}
for (int i = 0; i <= curLength; i++)
cout << data[i] << " ";
cout << endl;
return;
}
main.cpp
没写几个例子,可以继续添加测试
#include"SeqLinkList.h"
int main()
{
seqLinkList list,list2;
ElemType a;
for (ElemType i = 0; i < 10; i++)
{
list.Insert(i);
}
for (ElemType i = 0; i < 4; i++)
{
list2.Insert(i);
}
list.print();
list.Insert(9, 5);
list.print();
list.Insert(0, 5);
list.print();
list.Delete();
list.print();
list.Delete(9,a);
cout << a << endl;
list.print();
cout << "分割线" << endl << endl;
list.merge(list2);
list.print();
}