多余元素删除之建表算法
2016-07-26 12:45
155 查看
顺序表应用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
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
# include <stdio.h> # include <stdlib.h> typedef struct node{ int *a; int length; } Node; void create_list(Node&L,int num); void delete_repeated_elem(Node&L); void display_list(Node&L); int main() { int n,m; scanf("%d",&n); while(n--) { Node L; scanf("%d",&m); create_list(L,m); delete_repeated_elem(L); display_list(L); } } void create_list(Node&L,int num) { int i; L.a = (int *)malloc(sizeof(int)*num); L.length = num; for(i=0;i<num;i++) { scanf("%d",&L.a[i]); } } /*原来空间上的建表算法思想:将表分为两部分,将剩余部分的每个元素在新表中比对。*/ void delete_repeated_elem(Node&L) { int i,j,k; /*记录新表的长度*/ int newlength=1; /*作为比对元素在新表中是否存在的标志,默认不存在*/ bool flag = false; for(i=1;i<L.length;i++) { flag = false; for(j=0;j<newlength;j++) { if(L.a[i] == L.a[j]) { flag = true; break; } } /*如果新表不存在比对元素*/ if(!flag) { /*将元素放在表尾,并将newlegth+1*/ L.a[newlength] = L.a[i]; newlength++; } } /*将有序表的表长设为新表长*/ L.length = newlength; } void display_list(Node&L) { int i; printf("%d",L.a[0]); for(i=1;i<L.length;i++) { printf(" %d",L.a[i]); } printf("\n"); }
相关文章推荐
- C#数据结构之顺序表(SeqList)实例详解
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- C#实现顺序表(线性表)完整实例
- C语言实现顺序表基本操作汇总
- 数据结构之Treap详解
- 用C语言举例讲解数据结构中的算法复杂度结与顺序表
- C#数据结构之堆栈(Stack)实例详解
- C#数据结构之双向链表(DbLinkList)实例详解
- JavaScript数据结构和算法之图和图算法
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- Java数据结构及算法实例:插入排序 Insertion Sort
- Java数据结构及算法实例:考拉兹猜想 Collatz Conjecture
- java数据结构之java实现栈
- java数据结构之实现双向链表的示例
- Java数据结构及算法实例:选择排序 Selection Sort
- 【数据结构与算法】数组应用4:多项式计算Java版