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
提示
你也可以使用链表实现作,有空练练吧
包含了线性表的所有基本操作,可以好好练习一下,路过的哪位大佬可以用链表实现一下呢?可私戳QQ:2201128470
#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; } } }