要求: 1、构造空的顺序表
2、建立含有若干数据元素的顺序表并输出
3、输出表长
4、获取某个元素的值
5、将某个位置插入某个新值
6、删除某个位置上的元素并输出新的顺序表
#include <iostream>
using namespace std;
#define MAXSIZE 100
#define ERROR0 0
//定义一个顺序表
typedef struct
{
int* elem;//elem的中文意思是"元素"
int length;
}List;
/*这个实例会采用很多自定义函数,下面就是这个实例中涉及到的自定义函数*/
//创建顺序表
/*对顺序表进行初始化 (实质上是一个数组)
并对顺序表的长度进行初始化*/
void InitList(List& L)//创建顺序表
{
L.elem = new int[MAXSIZE];
L.length = 0;
}
//输入功能函数
/*这个函数需要两个参数,一个是顺序表的引用,另一个是要输入数据的个数*/
void ListInput(List& L, int n)
{
int i = 0;
for (i = 0; i < n; i++)
{
cout << "请输入第" << i + 1 << "个数据:" << endl;
cin >> L.elem[i];
}
L.length = i;
}
/*在函数对数据输入完成后,进而对顺序表的长度进行赋值*/
//求顺序表的长度
/*这是返回类型为int型的函数,参数只需要顺序表类型的变量,这里不对顺序表进行修改,因此不设置为引用*/
int ListLength(List L)
{
return L.length;
}
//求顺序表中第i个元素的值
/*返回类型为int型函数,第一个参数是顺序表类型变量
第二个参数是第i个元素的位置*/
int GetElem(List L, int i)
{
return L.elem[i - 1];
}
/*在第i个元素【后边】插入数据
也就是,当i=2的时候,会插到第三个位置上
也就是,将元素插到了第i+1的位置上*/
void ListInsert(List& L, int i, int e)
{
for (int j = L.length - 1; j >= i - 1; j--)
{
L.elem[j + 1] = L.elem[j];
L.length++;//表长增1
}
L.elem[i] = e;//将新元素放到第i个位置之后
}
//删除第i个元素
void ListRmove(List& L, int i)
{
for (int j = i - 1; j < L.length; j++)
{
L.elem[j] = L.elem[j + 1];
L.length--;
}
}
//输出顺序表中的所有元素
void ListOutput(List& L)
{
cout << "顺序表为:" << endl;
for (int i = 0; i < L.length; i++)
{
cout << L.elem[i] << " ";
}
cout << endl;
}
int main()
{
//声明一个顺序表L
List L;
//创建一个空的顺序表
InitList(L);
//输入若干个数据
cout << "设置顺序表的长度:";
int len;
cin >> len;
ListInput(L, len);
//输出顺序表a
ListOutput(L);
//输出表长
cout << "顺序表的表长为:" << ListLength(L) << endl;
cout << "你想获取表中第几个元素的值?";
int which_num;
cin >> which_num;
//获取表中某个元素的值
cout << "表中第"<<which_num<<"个元素的值是:" << GetElem(L, which_num) << endl;
//插入元素
int where1,where2, what;
cout << "插入到哪一个位置?";
cin >> where1;
cout << "插入什么数据?";
cin >> what;
ListInsert(L, where1-1,what);
//输出新的顺序表
ListOutput(L);
//删除元素
cout << "删除哪一个位置上的元素?";
cin >> where2;
ListRmove(L, where2);
//输出新的顺序表
ListOutput(L);
return 0;
}