Description
(线性表)请你定义一个线性表,可以对表进行“在某个位置之前插入一个元素”、“删除某个位置的元素”、“清除所有元素”、“获取某个位置的元素”等操作。键盘输入一些命令,可以执行上述操作。本题中,线性表元素为整数,线性表的第一个元素位置为1。线性表的最大长度为1000。
Input
各个命令以及相关数据,它们对应的格式如下:
在某个位置之前插入操作:insert,接下来的一行是插入的组数n,下面是n行数据,每行数据有两个值,分别代表位置与插入的元素值
清除线性表:clear
获取某个位置的元素:getelem,接下来一行是需要获取的元素位置
删除某个位置的元素:delete,接下来一行是被删除的元素位置
当输入的命令为exit时,程序结束
Output
当输入的命令为getelem时,请输出获取的元素值,
当输入的命令是delete时,请输出被删除的那个元素值
注意,所有的元素均占一行
Sample Input
insert 2 1 1 2 2 delete 1 clear insert 2 1 3 2 4 getelem 2 exit
Sample Output
1 4
#include<stdio.h>
#include<string.h>
#define MAX 1010
#define FALSE 0
#define TRUE 1
typedef struct{
int data[MAX];
int length;
}SqList;
int InsertList(SqList* L,int pos,int e){
if(pos < 1 || pos > L->length + 1){
return FALSE;
}
for(int i = L->length ; i >= pos ; i--){
L->data[i+1] = L->data[i];
}
L->data[pos] = e;
L->length++;
return TRUE;
}
int ClearList(SqList* L){
L->length = 0;
return TRUE;
}
int DeleteList(SqList* L,int pos){
if(pos < 1 || pos > L->length){
return FALSE;
}
printf("%d\n",L->data[pos]);
for(int i = pos ; i < L->length ;i++){
L->data[i] = L->data[i+1];
}
L->length--;
return TRUE;
}
int GetElem(SqList* L,int pos){
printf("%d\n",L->data[pos]);
return TRUE;
}
int main(){
SqList L;
L.length = 0;//必须给顺序表初始化(出错处)
char ope[10];
while(scanf("%s",ope)!=EOF&&strcmp(ope,"exit")!=0){
if(strcmp(ope,"insert")==0){
int n;
scanf("%d",&n);
for(int i = 0;i < n;i++){
int pos,e;
scanf("%d %d",&pos,&e);
InsertList(&L,pos,e);
}
}else if(strcmp(ope,"delete")==0){
int pos;
scanf("%d",&pos);
DeleteList(&L,pos);
}else if(strcmp(ope,"getelem")==0){
int pos;
scanf("%d",&pos);
GetElem(&L,pos);
}else if(strcmp(ope,"clear")==0){
ClearList(&L);
}
}
return 0;
}
[点击并拖拽以移动]
题目链接:
本文含有隐藏内容,请 开通VIP 后查看