实验目的:1、掌握线性表的基本知识 2、深入理解、掌握并灵活运用线性表。3、熟练掌握线性表的存储结构及主要运算的实现
已知顺序表L递增有序,将X插入到线性表的适当位置上,保证线性表有序。。
输入格式:
第1行输入顺序表长度,第2行输入递增有序的顺序表,第3行输入要插入的数据元素X。
输出格式:
对每一组输入,在一行中输出插入X后的递增的顺序表。
输入样例:
在这里给出一组输入。例如:
5
1 3 5 7 9
6
输出样例:
在这里给出相应的输出。例如:
1,3,5,6,7,9,
#include <iostream> //引用输入输出流库函数的头文件
using namespace std;
const int MaxSize = 100;
class SeqList
{
public:
SeqList(int a[ ], int n); //有参构造函数,建立一个长度为n的顺序表
int Locate(int x ); //按值查找,在线性表中查找值为x的元素序号
void Insert(int i, int x); //插入操作,在线性表中第i个位置插入值为x的元素
void PrintList( ); //遍历操作,按序号依次输出各元素
private:
int data[MaxSize]; //存放数据元素的数组
int length; //线性表的长度
};
SeqList :: SeqList(int a[ ], int n)
{
if (n > MaxSize) throw "参数非法";
for (int i = 0; i < n; i++)
data[i] = a[i];
length = n;
}
int SeqList :: Locate(int x)
{ int m;
for (int i = 0; i < length; i++) // length=n=cnt=5
{
if (data[i] >= x) //x=6
{
m=i+1;
break;
}
else m=length+1;
} return m; //返回其位置
}
void SeqList :: Insert(int i, int x)//在第i的位置插入x
{
if (i < 1 || i > length + 1) throw "位置";
for (int j = length; j >= i; j--)
data[j] = data[j - 1]; //注意第j-1个元素存在数组下标为j处
data[i - 1] = x;
length++;
}
void SeqList :: PrintList( )
{
for (int i = 0; i < length; i++)
cout << data[i] << ','; //依次输出线性表的元素值
}
int main( )
{
int cnt,insertnum;//定义数组长度cnt=5,插入的数值 insertnum=6,m用来保存返回位置
cin >> cnt;
int r[MaxSize] , i;//定义i保存要返回的元素位置
for (int i = 0; i < cnt; i++)
{
cin >> r[i];
}//给数组赋初值
SeqList L(r, cnt); //建立具有5个元素的顺序表
cin >> insertnum;
i = L.Locate(insertnum);//接下去寻找6的位置返回其下标;也就是查找返回位置存在i里
L.Insert(i, insertnum); //在第i个位置插入值为6的元素
L.PrintList( ); //输出插入后的线性表
cout << endl;
return 0;
}