顺序表应用1:多余元素删除之移位算法

时间:2020-03-27
本文章向大家介绍顺序表应用1:多余元素删除之移位算法,主要包括顺序表应用1:多余元素删除之移位算法使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

顺序表应用1:多余元素删除之移位算法

Description

一个长度不超过10000数据的顺序表,可能存在着一些值相同的“多余”数据元素(类型为整型),编写一个程序将“多余”的数据元素从顺序表中删除,使该表由一个“非纯表”(值相同的元素在表中可能有多个)变成一个“纯表”(值相同的元素在表中只保留第一个)。
要求:
       1、必须先定义线性表的结构与操作函数,在主函数中借助该定义与操作函数调用实现问题功能;
       2、本题的目标是熟悉顺序表的移位算法,因此题目必须要用元素的移位实现删除;

Input

 第一行输入整数n,代表下面有n行输入;
之后输入n行,每行先输入整数m,之后输入m个数据,代表对应顺序表的每个元素。

Output

 输出有n行,为每个顺序表删除多余元素后的结果

Sample

Input 

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

Output 

6 9 8
5
9 8 7 6 5
1 2 3 4 5

Hint

 1 #include<iostream>
 2 #include<stdio.h>
 3 #define listMax 100000
 4  
 5 using namespace std;
 6  
 7 typedef int element;
 8 typedef struct{
 9     element *elem;
10     int length;
11     int listSize;
12 }Elemlist;
13  
14 void creat(Elemlist &L,int n){
15     L.elem = new int[listMax];
16     L.length = n;
17     L.listSize = listMax;
18 }
19  
20 void input(Elemlist &L){
21     int i;
22     for(i = 0 ; i < L.length;i++){
23         scanf("%d",&L.elem[i]);
24     }
25 }
26  
27 void del(Elemlist &L,int j){
28     int i;
29     for(i = j ; i < L.length;i++){
30         L.elem[i] = L.elem[i + 1];
31     }
32     L.length--;
33 }
34  
35 void compare(Elemlist &L){
36     int i,j;
37     for(i = 0; i < L.length - 1;i++){
38         for(j = i + 1;j < L.length; j++){
39             if(L.elem[i] == L.elem[j]){
40                 del(L,j);
41                 j--;
42             }
43         }
44     }
45 }
46  
47 void output(Elemlist &L){
48     int i;
49     for(i = 0; i < L.length - 1;i++){
50         printf("%d ",L.elem[i]);
51     }
52     printf("%d\n",L.elem[i]);
53 }
54  
55 int main(){
56     Elemlist L;
57     int a,b;
58     scanf("%d",&a);
59     while(a--){
60         scanf("%d",&b);
61         creat(L,b);
62         input(L);
63         compare(L);
64         output(L);
65     }
66     return 0;
67 }

原文地址:https://www.cnblogs.com/xiaolitongxueyaoshangjin/p/12584062.html