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