站点图标 陌路寒暄

线性表操作(线性表)

线性表操作(线性表)

时间: 1ms        内存:128M

描述:

(线性表)请你定义一个线性表,可以对表进行“在某个位置之前插入一个元素”、“删除某个位置的元素”、“清除所有元素”、“获取某个位置的元素”等操作。键盘输入一些命令,可以执行上述操作。本题中,线性表元素为整数,线性表的第一个元素位置为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

提示:

参考答案(内存最优[752]):

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
	int n,m,i,j;
	char c[10],d[4][10]={"insert","clear","getelem","delete"};
	gets(c);
	while(strcmp(c,"exit"))
	{
		struct
		{
			int date;
		}*s;
		if(!strcmp(c,d[0]))
		{
			scanf("%d",&n);
			s=malloc(sizeof(*s)*n);
			for(i=0;i<n;i++)
			{
				scanf("%d",&j);
				scanf("%d",&s[j].date);
			}
			getchar();
		}
		else if(!strcmp(c,d[1]))
		{
			s=NULL;
		}
		else if(!strcmp(c,d[2]))
		{
			scanf("%d",&m);
			printf("%d\n",s[m].date);
			getchar();
		}
		else if(!strcmp(c,d[3]))
		{
			scanf("%d",&m);
			printf("%d\n",s[m].date);
			getchar();
		}
		gets(c);
	}
	return 0;
}

参考答案(时间最优[0]):

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
	int n,m,i,j;
	char c[10],d[4][10]={"insert","clear","getelem","delete"};
	gets(c);
	while(strcmp(c,"exit"))
	{
		struct
		{
			int date;
		}*s;
		if(!strcmp(c,d[0]))
		{
			scanf("%d",&n);
			s=malloc(sizeof(*s)*n);
			for(i=0;i<n;i++)
			{
				scanf("%d",&j);
				scanf("%d",&s[j].date);
			}
			getchar();
		}
		else if(!strcmp(c,d[1]))
		{
			s=NULL;
		}
		else if(!strcmp(c,d[2]))
		{
			scanf("%d",&m);
			printf("%d\n",s[m].date);
			getchar();
		}
		else if(!strcmp(c,d[3]))
		{
			scanf("%d",&m);
			printf("%d\n",s[m].date);
			getchar();
		}
		gets(c);
	}
	return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

退出移动版