hrbustoj 1545:基础数据结构——顺序表(2)(数据结构,顺序表的实现及基本操作,入门题)

基础数据结构——顺序表(2)

Time Limit: 1000 MS    Memory Limit: 10240 K

Total Submit: 355(143 users) Total Accepted: 158(130 users)    Rating:         Special Judge: No

Description

在长度为n(n<1000)的顺序表中可能存在着一些值相同的“多余”数据元素(类型为整型),编写一个程序将“多余”的数据元素从顺序表中删除,使该表由一个“非纯表”(值相同的元素在表中可能有多个)变成一个“纯表”(值相同的元素在表中只能有一个)。

 

Input

第一行输入表的长度n;

 

第二行依次输入顺序表初始存放的n个元素值。

 

Output

第一行输出完成多余元素删除以后顺序表的元素个数;

 

第二行依次输出完成删除后的顺序表元素。

 

Sample Input

12

5 2 5 3 3 4 2 5 7 5 4 3

 

Sample Output

5

5 2 3 4 7


 

  数据结构,顺序表的实现

  顺序表是顺序结构实现的线性表,这道题考察的是顺序表的实现及基本操作。题目不难,是道入门题。

  注意输出格式,最后一个元素后面不能有空格。

  代码

 1 #include <iostream>
 2 #include <malloc.h>
 3 using namespace std;
 4 #define MAXSIZE 1010
 5 typedef struct {    //定义顺序表类型
 6     int data[MAXSIZE];
 7     int length;
 8 }SqList,*LinkSqList;
 9 //顺序表初始化
10 void Init(SqList* &sq)
11 {
12     sq->length = 0;
13 }
14 //插入
15 void Insert(SqList* &sq,int i,int x)    //在第i位置插入元素值为x的元素
16 {
17     if(sq->length>=MAXSIZE){
18         cout<<"表已满,无法插入!"<<endl;
19     }
20     else if(i<1 || i>sq->length+1){
21         cout<<"插入位置不合理!"<<endl;
22     }
23     else{
24         int j;
25         for(j=sq->length;j>=i;j--)
26             sq->data[j+1] = sq->data[j];
27         sq->data[i] = x;
28         sq->length++;
29     }
30 }
31 //删除
32 void Delete(SqList* &sq,int i)    //删除第i个元素
33 {
34     if(sq->length<=0)
35         cout<<"表已空,无法删除!"<<endl;
36     else if(i<1 || i>sq->length)
37         cout<<"删除位置不合理!"<<endl;
38     else {
39         int j;
40         for(j=i+1;j<=sq->length;j++)
41             sq->data[j-1] = sq->data[j];
42         sq->length--;
43     }
44 }
45 //输出顺序表
46 void Print(SqList* &sq)    //输出顺序表中所有元素
47 {
48     int i;
49     for(i=1;i<=sq->length;i++){
50         cout<<sq->data[i];
51         if(i<sq->length)
52             cout<<' ';
53     }
54     cout<<endl;
55 }
56 //销毁顺序表
57 void Destroy(SqList* &sq)    //销毁顺序表
58 {
59     free(sq);
60 }
61 //去重
62 void DeleteRepeat(SqList* &sq)    //删掉重复元素
63 {
64     int i,j;
65     for(i=2;i<=sq->length;i++)
66         for(j=1;j<i;j++)
67             if(sq->data[j]==sq->data[i]){
68                 Delete(sq,i);
69                 i--;
70                 break;
71             }
72 }
73 int main()
74 {
75     int i,n,t;
76     while(cin>>n){
77         LinkSqList sq = (SqList*)malloc(sizeof(SqList));
78         Init(sq);
79         //输入
80         for(i=1;i<=n;i++){
81             cin>>t;
82             Insert(sq,i,t);    //插入元素
83         }
84         //去重
85         DeleteRepeat(sq);
86         //输出
87         cout<<sq->length<<endl;
88         Print(sq);
89         Destroy(sq);
90     }
91     return 0;
92 }

 

Freecode : www.cnblogs.com/yym2013

posted @ 2014-04-19 20:32  Freecode#  阅读(464)  评论(0编辑  收藏  举报