[D-OJ练习] 线性表的顺序存储结构与操作

请你定义一个顺序表,可以对顺序表进行如下操作:

  1. 在某个元素之前插入一些元素
  2. 删除某个位置的元素
  3. 查找某元素
  4. 获取某个位置的元素
  5. 遍历输出所有元素

键盘输入一些命令,可以执行上述操作。本题中,顺序表元素为整数,顺序表的第一个元素位置为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;
}

posted @ 2021-09-23 23:47  泥烟  阅读(43)  评论(0编辑  收藏  举报