TZOJ 1214: 数据结构练习题――线性表操作
描述
请你定义一个线性表,可以对表进行“在某个位置之前插入一个元素”、“删除某个位置的元素”、“清除所有元素”、“获取某个位置的元素”等操作。键盘输入一些命令,可以执行上述操作。本题中,线性表元素为整数,线性表的第一个元素位置为1。线性表的最大长度为1000。
输入
各个命令以及相关数据,它们对应的格式如下:
在某个位置之前插入操作:insert,接下来的一行是插入的组数n,下面是n行数据,每行数据有两个值,分别代表位置与插入的元素值
清除线性表:clear
获取某个位置的元素:getelem,接下来一行是需要获取的元素位置
删除某个位置的元素:delete,接下来一行是被删除的元素位置
当输入的命令为exit时,程序结束
输出
当输入的命令为getelem时,请输出获取的元素值,
当输入的命令是delete时,请输出被删除的那个元素值
注意,所有的元素均占一行
样例输入
insert
2
1 1
2 2
delete
1
clear
insert
2
1 3
2 4
getelem
2
exit
样例输出
1
4
提示
- #include <iostream>
- #include <string>
- using namespace std;
- typedef struct node{
- int data[100001];
- int length;
- }node;
- void insert(node &a,int pos,int &e)
- {
- for(int i=a.length;i>=pos;i--)
- {
- a.data[i+1]=a.data[i];//插入元素位置之后向右移动
- }
- a.data[pos]=e;
- a.length++;//表长加1
- }
- void clear(node &a)
- {
- a.length=0;//清除线性表
- }
- void getelem(node &a,int pos,int &e)
- {
- e=a.data[pos];
- }
- bool Delete(node &a,int pos,int &e)
- {
- if(pos<1||pos>a.length)//删除位置不合适
- return false;
- else{
- e=a.data[pos];
- for(int i=pos+1;i<=a.length;i++)
- {
- a.data[i-1]=a.data[i];//删除元素位置之后向左移
- }
- a.length--;//表长减1
- return true;
- }
- }
- int main()
- {
- int n;
- node a;
- string s;
- clear(a);
- while(cin>>s&&s!="exit")
- {
- if(s=="insert")
- {
- cin>>n;
- for(int i=0;i<n;i++)
- {
- int m,k;
- cin>>m>>k;
- insert(a,m,k);
- }
- }
- else if(s=="delete")
- {
- int j,e;
- cin>>j;
- if(Delete(a,j,e)==true)
- cout<<e<<endl;
- }
- else if(s=="clear")
- {
- clear(a);
- }
- else{
- int b,e;
- cin>>b;
- getelem(a,b,e);
- cout<<e<<endl;
- }
- }
- }