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

来源:互联网 发布:java反序列化实例 编辑:程序博客网 时间:2024/05/18 18:54

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

Time Limit: 1000ms   Memory limit: 650K  有疑问?点这里^_^

题目描述

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

输入

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

输出

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

示例输入

45 6 9 6 8 93 5 5 55 9 8 7 6 510 1 2 3 4 5 5 4 2 1 3

示例输出

6 9 859 8 7 6 51 2 3 4 5

 #include <stdio.h> #include <stdlib.h> #define maxsize 10000 typedef int Element_int; typedef struct {     Element_int *elem;//定义int类型元素elem;elem没有开辟空间,前面加*;     int length;//表长;     int listsize; }Sq; int Initialize_List(Sq *L);//初始化; void Creat_List(Sq *L,int len);//建表; int Del(Sq *L,int k);//删除操作; void Re_List(Sq *L);//查重删除操作; void Print_List(Sq *L);//输出操作之后的表; int main() {     Sq L;     int n,m;//输入数据的行数目以及每行数据的数目;     while(~scanf("%d",&n))     {         while(n--)         {             scanf("%d",&m);             Initialize_List(&L);//初始化操作;             Creat_List(&L,m);//建表操作;             Re_List(&L);//查重删除操作;             Print_List(&L);//输出操作;         }     } } int Initialize_List(Sq * L) {     L->elem=(Element_int *)malloc(maxsize*sizeof(Element_int));//申请空间;     if(!L->elem) return -1;//或者写成exit(-1);     L->length=0;     L->listsize=maxsize;     return 0; } void Creat_List(Sq *L,int len) {     L->length=len;     for(int i=0;i<len;i++)        scanf("%d",&L->elem[i]); } int Del(Sq *L,int k) {     Element_int *p,*q;     if(k<1||k>L->length)        return 0;     q=L->elem+L->length;     for(p=&(L->elem[k]);p<q;p++)//右移操作;         *p=*(p+1);     L->length--;//表长减一;     return 1; } void Re_List(Sq *L) {     Element_int *p,*q;//定义与元素类型相同的指针;     for(p=L->elem;p<L->elem+L->length;p++)         for(q=p+1;q<L->elem+L->length;q++)             if(*p==*q)             {                 Del(L,(q-L->elem));                 q--;//执行完if操作后q后移;而左移操作后,q指向位置的数据已更新,                     //因此q需要执行--操作,以便判断当前位置的数据是否需要删去;             } } void Print_List(Sq *L) {     for(int i=0;i<L->length;i++)        printf(i==L->length-1?"%d\n":"%d ",L->elem[i]); }


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 怀疑老公有外遇最明智的怎么办 咽喉疼怎么办最简单的方法如下 生完孩子后腰疼的厉害怎么办 眼睛进东西了弄不出来怎么办 18k金不给换黄金怎么办 我22岁欠了10万怎么办 1岁宝宝又吐又拉怎么办 月经10天了还没干净怎么办 舌头有异味怎么办是有口臭吗 快8个月羊水破了怎么办 25岁欠了50万债怎么办 28岁血压高150低压110怎么办 苹果6的4g网络慢怎么办 一个月染了6次头怎么办 五0二干在衣服上怎么办 刚怀孕见红了肚子不痛怎么办 我有外遇了老婆不离婚怎么办 套了牙套的牙疼怎么办 我鼻子上有很多螨虫和黑头怎么办 鱼刺卡在喉咙怎么办最有效的办法 脚被蚊子咬了很痒怎么办 好压7z密码忘了怎么办 4g卡显示2g网络怎么办 过塑机把纸吞了怎么办 红米1s开不了机怎么办 跟老婆吵架闹的要离婚该怎么办 充了q币没有到账怎么办 9个月宝宝吃了盐怎么办 红米4x开不了机怎么办 鱼身上有红斑像出血了怎么办 草鱼身上有红斑像出血了怎么办 宝宝屁眼红的破皮了怎么办 孩子身上起红疙瘩很痒怎么办 久而不射,但软了怎么办 盆底综合肌力1级怎么办 头发掉的厉害怎么办吃什么好 给蜂蛰了肿了痒怎么办 小米手环2没电了怎么办 小米手环2不亮了怎么办 红米3s无限重启怎么办 乐视手机1s卡顿怎么办