描述

请你定义一个线性表,可以对表进行“在某个位置之前插入一个元素”、“删除某个位置的元素”、“清除所有元素”、“获取某个位置的元素”等操作。键盘输入一些命令,可以执行上述操作。本题中,线性表元素为整数,线性表的第一个元素位置为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
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. typedef struct node{
  5. int data[100001];
  6. int length;
  7. }node;
  8. void insert(node &a,int pos,int &e)
  9. {
  10. for(int i=a.length;i>=pos;i--)
  11. {
  12. a.data[i+1]=a.data[i];//插入元素位置之后向右移动
  13. }
  14. a.data[pos]=e;
  15. a.length++;//表长加1
  16. }
  17. void clear(node &a)
  18. {
  19. a.length=0;//清除线性表
  20. }
  21. void getelem(node &a,int pos,int &e)
  22. {
  23. e=a.data[pos];
  24. }
  25. bool Delete(node &a,int pos,int &e)
  26. {
  27. if(pos<1||pos>a.length)//删除位置不合适
  28. return false;
  29. else{
  30. e=a.data[pos];
  31. for(int i=pos+1;i<=a.length;i++)
  32. {
  33. a.data[i-1]=a.data[i];//删除元素位置之后向左移
  34. }
  35. a.length--;//表长减1
  36. return true;
  37. }
  38. }
  39. int main()
  40. {
  41. int n;
  42. node a;
  43. string s;
  44. clear(a);
  45. while(cin>>s&&s!="exit")
  46. {
  47. if(s=="insert")
  48. {
  49. cin>>n;
  50. for(int i=0;i<n;i++)
  51. {
  52. int m,k;
  53. cin>>m>>k;
  54. insert(a,m,k);
  55. }
  56. }
  57. else if(s=="delete")
  58. {
  59. int j,e;
  60. cin>>j;
  61. if(Delete(a,j,e)==true)
  62. cout<<e<<endl;
  63. }
  64. else if(s=="clear")
  65. {
  66. clear(a);
  67. }
  68. else{
  69. int b,e;
  70. cin>>b;
  71. getelem(a,b,e);
  72. cout<<e<<endl;
  73. }
  74. }
  75. }

 

版权声明:本文为andrew3原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/baobao2201128470/p/8687998.html