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

你可能感兴趣的:(数据结构)