顺序表应用2:多余元素删除之建表算法
2016-05-19 15:14
316 查看
顺序表应用2:多余元素删除之建表算法
Time Limit: 3ms Memory limit: 600K 有疑问?点这里^_^
题目描述
一个长度不超过10000数据的顺序表,可能存在着一些值相同的“多余”数据元素(类型为整型),编写一个程序将“多余”的数据元素从顺序表中删除,使该表由一个“非纯表”(值相同的元素在表中可能有多个)变成一个“纯表”(值相同的元素在表中只保留第一个)。要求:
1、必须先定义线性表的结构与操作函数,在主函数中借助该定义与操作函数调用实现问题功能;
2、本题的目标是熟悉在顺序表原表空间基础上建新表的算法,要在原顺序表空间的基础上完成完成删除,建表过程不得开辟新的表空间;
3、不得采用原表元素移位删除的方式。
输入
第一行输入整数n,代表下面有n行输入;之后输入n行,每行先输入整数m,之后输入m个数据,代表对应顺序表的每个元素。
输出
输出有n行,为每个顺序表删除多余元素后的结果
示例输入
4 5 6 9 6 8 9 3 5 5 5 5 9 8 7 6 5 10 1 2 3 4 5 5 4 2 1 3
示例输出
6 9 8 5 9 8 7 6 5 1 2 3 4 5
提示
view plaincopyprint如果您复制代码时出现行号,请点击左边的“view
plain”后再复制
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int *creat_list(int size)
{
int *q;
q=(int *)malloc(size*sizeof(int ));
return q;
}
void destory_list(int *q)
{
free(q);
}
int ch_list(int *p,int len)
{
int i,j,k,len_n;
len_n=1;
for(i=1;i<len;i++)
{
k=1;
for(j=0;j<len_n;j++)
{
if(p[i]==p[j])
{
k=0;break;
}
}
if(k)p[len_n++]=p[i];
}
return len_n;
}
void display_list(int *p,int len)
{
int i;
for(i=0;i<len;i++)
{
printf("%d",p[i]);
if(i<len-1)printf(" ");
else printf("\n");
}
}
int main()
{
int n,m,i,j,*p;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&m);
p=creat_list(m);
for(j=0;j<m;j++)
scanf("%d",&p[j]);
m=ch_list(p,m);
display_list(p,m);
destory_list(p);
}
return 0;
}
相关文章推荐
- matplotlib使用show方法后不能显示图像的问题
- 一段实用的php验证码函数
- Hibernate中的单向多对一关联
- 我常用的linux命令
- LINQ教程
- C# MATLAB混编(一)
- 在Xcode中使用Git进行源码版本控制
- android design library提供的TabLayout的用法
- 1024 ProblemX
- ClassyShark查看apk包信息
- 工厂模式和构造函数
- 二叉树的原理和实现
- Hibernate实现将图片保存至数据库、显示在页面
- java代码获取服务器的地址
- Python包帮助文档
- PassCode - 打造一个简单易用的安全锁类库
- NOJ_1005_多项式加法(采用尾插法建立单链表的运用)
- hanio 塔和递规的理解。
- [转]struts1.2的action参数配置
- jquery复选框操作