编写程序,实现顺序表的各种基本运算,要求用菜单组织所有功能,程序界面友好,相应提示信息清晰完整,具有较强的容错性。要实现的功能有:
(1)输出顺序表中的所有元素;
(2)按序号查找指定元素,即输出顺序表中的第i个元素;
(3)按值查找指定元素,即输出顺序表中值为x的元素的序号;
(4)在指定位置插入元素,即在第i个元素前面插入值为x的元素;
(5)删除指定元素,即删除第i个元素;
(6)删除顺序表中所有值在[x,y]范围内的元素,要求时间复杂度达到O(n);
(7)单值化操作,即删除表中重复元素中的多余元素,只保留其中序号最小的一个,例如,顺序表(2,4,4,3,2,4)单值化后的结果为(2,4,3);
(8)简单划分操作,即将顺序表 (a1,a2,... ,an) 重新排列为以指定元素a1为界的两部分:a1前面的值均小于等于a1,a1后面的值均大于a1;
(9)采用直接插入法将顺序表排列为升序序列,参见教材P236对直接插入排序法基本操作步骤的讲解;
(10)销毁顺序表并退出。
#include <iostream>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MaxSize 100
using namespace std;
typedef int Status;
typedef int ElemType;
//定义
typedef struct
{
ElemType *elem;
int length;
}SqList;
//初始化
Status InitList(SqList &L)
{
//构造空的顺序表
L.elem = new ElemType[MaxSize]; //为顺序表分配一个MaxSize大小的数组空间
if (!L.e