
#include
using namespace std;
typedef int Elem;
//线性表是一种抽象数据类型;数组是一种具体的数据结构。
//线性表与数组的逻辑结构是不一样的.
class SqList
{
public:
SqList(int size); //构造函数 初始化内存容量为size的顺序表
~SqList(); //析构函数 销毁内存
void CreatList(); //填充顺序表
void Display(); //输出顺序表中所有元素
bool EmptyList(); //判断是否为空
int GetLength(); //获取长度
void LocateElem(); //查找指定下标元素
void GetElem(); //查找指定数据,返回下标
bool InsertList(); //指定位置插入数值
bool DeleteList(); //删除指定位置元素
bool DeleteElem(); //删除指定数值
void SortList(); //排序
private:
//三个属性:内存地址、内存大小、当前长度
Elem * data; //指针(地址)指向一块内存
Elem DataSize; // 内存的大小 (最大容量)
Elem length; // 线性表当前长度
};
//size为初始化内存大小
SqList::SqList(int size)
{
DataSize = size;
data = new Elem[DataSize];
length = 0;
}
SqList::~SqList()
{
delete[] data; // 释放数组内存
data = NULL;
}
//填充顺序表
void SqList::CreatList()
{
int n = 0;
cout << "请输入数据个数:" << endl;
cin >> n;
cout << "请输入具体数据:" << endl;
for (int i = 0; i < n; i++)
{
cin >> data[i];
}
length = n;
cout << "create SqList success!" << endl;
}
//遍历显示顺序表
void SqList::Display()
{
cout << "display SqList:";
for (int i = 0; i < length; i++)
{
cout << data[i] << " ";
}
cout << endl;
}
//判断表是否为空
bool SqList::EmptyList()
{
return length == 0 ? true : false;
}
//顺序表的长度
int SqList::GetLength()
{
cout << "当前线性表长度为:" << length << endl;
return length;
}
//查找指定下标元素
void SqList::LocateElem()
{
int k = 0;
cout << "请输入查找位置:" << endl;
cin >> k;
cout << "所查数据为:" << data[k - 1] << endl;
}
//搜索x在表中的位置
void SqList::GetElem()
{
int e = 0,f = 0;
cout << "请输入查找数值:" << endl;
cin >> e;
for (int i = 0; i < length; i++)
{
if (data[i] == e)
{
cout << "查到数值为:" << data[i] << "下标为:" << i << endl;
f++;
}
}
if (f == 0)
cout << "数据不存在" << endl;
}
//指定位置插入数值
bool SqList::InsertList()
{
int k, e = 0;
cout << "请输入插入的位置:" << endl;
cin >> k;
cout << "请输入插入的数值:" << endl;
cin >> e;
if (k<0 || k>length+1)
return false;
for (int i = length - 1; i >= k - 1; i--)
{
data[i+1] = data[i];
}
data[k - 1] = e;
length++;
return true;
}
//删除指定位置元素
bool SqList::DeleteList()
{
int k = 0;
cout << "请输入删除的位置:" << endl;
cin >> k;
if (k<0 || k>length)
return false;
for (int i = k-1; i < length; i++)
{
data[i] = data[i+1];
}
length--;
return true;
}
//删除指定数值
bool SqList::DeleteElem()
{
int e = 0;
cout << "请输入删除数值:" << endl;
cin >> e;
int n = 0;
for (int i = 0; i < length; i++)
{
if (data[i] == e)
{
for (int j = i; j < length; j++)
{
data[j] = data[j + 1];
}
n++;
}
}
length = length - n;
return true;
}
//将顺序表排序 从小到大
void SqList::SortList()
{
int f, temp;
for (int i = 0; i < length-1; i++)
{
f = 0;
for (int j = 0; j < (length-i-1); j++)
{
if (data[j] > data[j + 1])
{
f = 1;
temp = data[j + 1];
data[j + 1] = data[j];
data[j] = temp;
}
}
if (f == 0) break; // 没有交换,提前结束程序
}
}
int main()
{
SqList L(10);
int choose;
do
{
cout << " ************************* " << endl;
cout << " * 1:建立顺序表: * " << endl;
cout << " * 2:显示顺序表: * " << endl;
cout << " * 3:判断表是否为空: * " << endl;
cout << " * 4:顺序表的长度: * " << endl;
cout << " * 5:搜索x在表中的位置: * " << endl;
cout << " * 6:指定位置插入数值: * " << endl;
cout << " * 7:删除指定位置元素: * " << endl;
cout << " * 8:删除指定数值: * " << endl;
cout << " * 9:将顺序表排序: * " << endl;
cout << " * 0:退出: * " << endl;
cout << " * 请输入你的选择[0-9]: * " << endl;
cout << " ************************* " << endl;
cin >> choose;
switch (choose) {
case 1:
L.CreatList(); // 建立顺序表
break;
case 2:
L.Display(); //遍历显示顺序表
break;
case 3:
if (L.EmptyList()) // 判断表是否为空
cout << "表为空!" << endl;
else
cout << "表不为空!" << endl;
break;
case 4:
L.GetLength(); //顺序表的长度
break;
case 5:
L.LocateElem(); //搜索x在表中的位置
break;
case 6:
L.InsertList(); //指定位置插入数值
break;
case 7:
L.DeleteList(); //删除指定位置元素
break;
case 8:
L.DeleteElem(); //删除指定数值
break;
case 9:
L.SortList(); //将顺序表排序
break;
default:
cout << "输入选择错误,请重新输入!" << endl;
}
} while (choose != 0);
system("pause");
return 0;
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)