#include <iostream>
using namespace std;
#define MAX_SIZE 20
#define OK 1
#define ERROR 0
typedef int Status;
typedef int ElemType; // 元素类型可以改变,假定这里为int
class sqList
{
private:
ElemType data[MAX_SIZE];
int length;
public:
// 获取、插入、删除三个基本操作
ElemType getElem(ElemType &e, int pos);
Status insertElem(ElemType e, int pos);
Status deleteElem(ElemType &e, int pos);
int getLength(){ return length; }
void initList(); // 初始化列表,默认设置前五个元素
};
ElemType sqList::getElem(ElemType &e,int pos)
{
if (pos > length||pos<1 || pos>length) // 顺序表为空或pos不合法
return ERROR;
e = data[pos - 1];
return OK;
}
Status sqList::insertElem(ElemType e, int pos)
{
if (length == MAX_SIZE - 1) // 表中元素已满
return ERROR;
if (pos < 1 || pos>length + 1) // pos位置不合法
return ERROR;
if (pos <= length) // 当插入位置不在表位
{
for (int index = length - 1; index >= pos - 1; index--)
{
data[index + 1] = data[index];
}
}
data[pos - 1] = e; // 将元素插入
length++;
return OK;
}
Status sqList::deleteElem(ElemType &e, int pos)
{
if (length == 0) // 表中无元素
return ERROR;
if (pos<1 || pos>length) // pos不合法
return ERROR;
e = data[pos - 1];
if (pos < length) // pos不在表尾
{
for (int index = pos - 1; index <= length - 1; index++)
{
data[index] = data[index+1];
}
}
length--;
return OK;
}
void sqList::initList()
{
length = 5;
for (int i = 0; i < length; i++)
{
data[i] = i + 1;
}
}
int main()
{
sqList list;
list.initList();
cout << "初始化成功" << endl;
ElemType e;
for (int i = 0; i < list.getLength(); i++)
{
list.getElem(e, i + 1);
cout << "第" << i + 1 << "个元素为:" << e << endl;
}
cout << "请输入要删除的元素的位置:";
int pos;
cin >> pos;
if (list.deleteElem(e, pos))
{
cout << "删除的元素为" << e << endl;
cout << "插入后列表信息如下:" << endl;
for (int i = 0; i < list.getLength(); i++)
{
list.getElem(e, i + 1);
cout << "第" << i + 1 << "个元素为:" << e << endl;
}
}
else
{
cout << "删除失败" << endl;
}
cout << "请输入要插入的元素和插入的位置:";
cin >> e>>pos;
list.insertElem(e, pos);
cout << "插入后列表信息如下:" << endl;
for (int i = 0; i < list.getLength(); i++)
{
list.getElem(e, i + 1);
cout << "第" << i + 1 << "个元素为:" << e << endl;
}
}