zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Simple Automated Backups for MongoDB Replica Sets
    [转] matlab获取时间日期
    Matlab与C++混合编程 编写独立外部应用程序时出现“无法定位序数3906于动态链接库LIBEAY32.dll上”错误
    Visual Studio 控制台应用程序 同时使用OpenCV和matlab mat文件操作
    [转] Matlab与C++混合编程(依赖OpenCV)
    OpenCV 64位时 应用程序无法正常启动0x000007b 问题解决
    LinkedBlockingQueue多线程测试
    rdlc报告vs2008编辑正常,在vs2012在对错误的编辑
    SD3.0四个协议解读
    链队列
  • 原文地址:https://www.cnblogs.com/yym2013/p/3675522.html
Copyright © 2011-2022 走看看