[D-OJ练习] 线性表的顺序存储结构与操作
请你定义一个顺序表,可以对顺序表进行如下操作:
- 在某个元素之前插入一些元素
- 删除某个位置的元素
- 查找某元素
- 获取某个位置的元素
- 遍历输出所有元素
键盘输入一些命令,可以执行上述操作。本题中,顺序表元素为整数,顺序表的第一个元素位置为1,顺序表的最大长度为20。
输入描述
各个命令以及相关数据的输入格式如下: 在某个位置之前插入操作的命令:I,接下来的一行是插入的元素个数n, 下面是n行数据,每行数据有两个值,分别代表插入位置与插入的元素值 查找某个元素:S x,x是要查找的元素值 获取某个位置的元素:G i,i是需要获取的元素位置 删除某个位置的元素:D i,i是被删除的元素位置 遍历输出所有元素:V 当输入的命令为E时,程序结束
输出描述
当输入的命令为S时,请输出要查找元素的位置,如果没找到,请输出None 当输入的命令为G时,请输出获取的元素值,如果输入的元素位置不正确, 输出“位置不正确” 当输入的命令是D时,请输出被删除的那个元素值,如果表空,输出“下溢”, 如果输入的位置不正确,输出“位置不正确” 当输入命令是I时,如果表满,输出“上溢”,如果输入的位置不正确, 输出“位置不正确” 注意,所有的元素均占一行
输入样例
I 2 1 1 2 2 S 2 D 1 I 2 1 3 2 4 G 2 V E
输出样例
2 1 4 3 4 2
注意:本校oj貌似不给"endl"过.....
#include<iostream>
using namespace std;
const int N = 21;
class SeqList {
public:
int a[N];
int end;
SeqList() ;
void Insert(int site, int data);//I
void GetValue(int site);//G
int SearchSite(int num);//S
void Delete(int site);//D
void PrintList();//V
};
SeqList::SeqList()
{
end = 1;//指的是有效数据之后的位置 (从1开始)
}
void SeqList::Insert(int site,int data)
{
if(end==N){
cout << "上溢" ;
return ;
}
if(site<1 || site > end){
cout << "位置不正确" ;
return ;
}
for(int i=end; i>site; i--)
{
a[i]=a[i-1];
}
a[site] = data;
end++;
}
void SeqList::PrintList()
{
for(int i=1; i<end; i++){
cout << a[i] ;
}
}
void SeqList::Delete(int site)
{
if(end==1){
cout << "下溢" ;
return ;
}
if(site>20 || site<1 || site>end){
cout << "位置不正确" ;
return ;
}
int value = a[site];
for(int i=site; i<end-1; i++){
a[i]=a[i+1];
}
end--;
cout << value ;
}
int SeqList::SearchSite(int num)
{
int site=-1;
for(int i=1; i<end; i++)
{
if(a[i] == num){
site = i;
break;
}
}
return site;
}
void SeqList::GetValue(int site)
{
if(site<1 || site>=N || site>=end){
cout << "位置不正确" ;
return ;
}
cout << a[site] ;
}
int main()
{
SeqList list;
char ch;
int isContinue = 1;
int end = 1;
while (isContinue)
{
cin >> ch;
switch (ch)
{
case 'I':
int n;
int site, data;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> site >> data;
list.Insert(site, data);
}
break;
case 'V':
list.PrintList();
break;
case 'D':
int delSite;
cin >> delSite;
list.Delete(delSite);
break;
case 'S':
int num, t;
cin >> num;
t = list.SearchSite(num);
if (t > 0) {
cout << t ;
}
else {
cout << "None" ;
}
break;
case 'G':
int pos;
cin >> pos;
list.GetValue(pos);
break;
case 'E':
isContinue = 0;
break;
}
}
return 0;
}
本文来自博客园,作者:泥烟,CSDN同名, 转载请注明原文链接:https://www.cnblogs.com/Knight02/p/15799102.html