#includeusing 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; }



