#pragma once
#include<string>
#include<iostream>
using namespace std;
class SeqList
{
public:
SeqList(int sz, int leng);
void mune();
void resize(int newSize);
int length() { return len; }
void input();
void output();
int search(int x);
int get(int i);
int insert(int x, int i);
int add(int x);
int remove(int i);
private:
int *data;
int maxSize;
int len;
};
#include "SeqList.h"
SeqList::SeqList(int sz, int leng):maxSize(sz), len(leng)
{
data = new int[maxSize];
}
void SeqList::mune()
{
cout << "**********************" << endl
<< "1: 添加元素 " << endl
<< "2: 插入元素 " << endl
<< "3: 删除元素 " << endl
<< "4: 查找元素 " << endl
<< "5: 取表元素 " << endl
<< "6: 显示线性表 " << endl
<< "7: 清屏 " << endl
<< "8: 扩大顺序表容量 " << endl
<< "(除菜单序号外,按任意键退出顺序表操作) " << endl
<< "**********************" << endl;
}
void SeqList::resize(int newSize)
{
int *p = this->data;
data = new int[newSize];
for (int i = 0; i < this->len; i++)
{
data[i] = p[i];
}
this->maxSize = newSize;
delete []p;
cout << "顺序表的最大容量已扩容为:"<< this->maxSize << endl;
}
void SeqList::input()
{
for (int i = 0; i < this->len; i++)
{
cin >> this->data[i];
}
}
void SeqList::output()
{
cout << "线性表元素:";
cout << "< ";
for (int i = 0; i < this->len; i++)
{
cout << this->data[i] << " ";
}
cout << ">" << endl;
cout << "线性表当前长度:";
cout << this->len << endl;
}
int SeqList::search(int x)
{
for (int i = 0; i < len; i++)
{
if (this->data[i] == x)
{
return 1;
}
}
return 0;
}
int SeqList::get(int i)
{
if (i < 1 || i > this->len)
{
return 0;
}
return this->data[i - 1];
}
int SeqList::insert(int i, int x)
{
if (i < 1 || i > this->len + 1 || this->len == this->maxSize)
{
cout << "插入元素失败!" << endl;
return 0;
}
for (int j = this->len - 1; j >= i - 1; j--)
{
data[j + 1] = data[j];
}
data[i - 1] = x;
this->len++;
return this->data[i - 1];
}
int SeqList::add(int x)
{
if (this->len == this->maxSize)
{
cout << "插入元素失败!" << endl;
return 0;
}
this->data[len] = x;
return this->data[len];
}
int SeqList::remove(int i)
{
if (this->len == 0 || i < 1 || i > len)
{
cout << "删除元素失败!" << endl;
return 0;
}
int x = this->data[i - 1];
for (int j = i - 1; j < len; j++)
{
this->data[j] = this->data[j + 1];
}
this->len--;
return x;
}
#include"SeqList.h"
int main()
{
SeqList l(5, 3);
l.mune();
int op, m, x, j, find, k, result, newsize = 0;
while (1)
{
cout << "--------------- 我是分割线 ----------------" << endl;
cout << "请选择操作代码:" << endl;
cin >> op;
switch (op) {
case 1: cout << "请输入要添加的元素:" << endl;
l.input();
break;
case 2: cout << "请分别输入要插入的位置和元素(用空格分隔):" << endl;
cin >> m >> x;
l.insert(m, x);
break;
case 3: cout << "请输入要删除元素的位置:" << endl;
cin >> j;
l.remove(j);
break;
case 4: cout << "请输入要查找的元素:" << endl;
cin >> find;
result = l.search(find);
if (result == 1)
{
cout << "查找成功,顺序表中查找到的元素是:" << find << endl;
}
else
{
cout << "查找失败,顺序表中不存在该元素!" << endl;
}
break;
case 5: cout << "请输入要取元素的位置:" << endl;
cin >> k;
l.get(k);
break;
case 6:
l.output();
break;
case 7:
system("cls");
break;
case 8:
cout << "输入新的顺序表大小:" << endl;
cin >> newsize;
l.resize(newsize);
break;
default:
exit(0);
break;
}
}
return 0;
}