数据结构之SWUSTOJ1038: 顺序表中重复数据的删除
题目:
思路:
这个题目相对来说主要思路在于SLPop这个函数的设计上。
如果找到了等于m的数,那么需要分情况来讨论:
第一种情况就是普通情况,也就是在中间找到等于m的数,那么之需要把每个数依次向前挪动一个位置即可,并且这是的size要减少一个。
第二种情况就是在末尾的时候找到等于m的数,这时就不能够再去把后面的数移动在前面来,因为这样就会造成数组访问越界,只需要把size较少一个即可。
还需要注意的一个问题:
当每一次找到等于m的数时,我们都完成了后数的移动到前面的过程,那么这时我们需要用continue来跳过后面的i++这一步,因为还得继续判定后面移到这个位置上面来的数是否等于m,如果不等于那么直接i++即可。
代码:
#include<stdio.h>
#include<stdlib.h>
#define N 100
typedef struct SList
{int data[N];int size;
}SL;
void SLInit(SL* ps)
{ps = (SL*)malloc(sizeof(SL));ps->size = 0;
}
void SLCreate(SL* ps, int n)
{int x = 0;ps->size = n;for (int i = 0; i < ps->size; i++){scanf("%d", &x);getchar();ps->data[i] = x;}
}
void SLPop(SL* ps, int m)
{int i = 0;while (i < ps->size){if (ps->data[i] == m){if (ps->size == i){ps->size--;}//这里主要是处理当最后一个数等于m时else{int j = i;while (j + 1 < ps->size){ps->data[j] = ps->data[j + 1];j++;}ps->size--;}continue;//如果等于m时处理完过后,将后面的数依次向前移动一个位置//跳出本次循环,主要是为了不让i完后移动//因为不确定从后面移动过来的数是否等于m}i++;//i不断向后迭代}
}
void SLPrint(SL* ps)
{for (int i = 0; i < ps->size; i++){printf("%d ", ps->data[i]);}
}
int main()
{SL plist;SLInit(&plist);int n = 0;scanf("%d", &n);getchar();SLCreate(&plist, n);int m = 0;scanf("%d", &m);SLPop(&plist, m);if (plist.size == 0){printf("-1");}else{SLPrint(&plist);}return 0;
}
数据结构之SWUSTOJ1038: 顺序表中重复数据的删除相关推荐
- 查询和删除表中重复数据sql语句
查询和删除表中重复数据sql语句 (一) 1.查询表中重复数据.select * from people where peopleId in (select peopleId from pe ...
- MySql删除表中重复数据
有一表中存在大量重复数据 在此记录下我删除表内重复数据的方法 -- 新增测试表 create table basic_farmer ( id INT(11), user_name VARCHAR(25 ...
- 删除顺序表中重复元素,并按照原序输出
问题描述:从顺序表中删除重复的元素,并使得剩余元素间的相对次序保持不变. 解决思路: PS:将结果表归为一个新表,理解较为容易(接下来以旧表和新表相称) ①先定义新表的长度和迭代器(初始长度为1,迭代 ...
- SQL Server数据库表的基本操作(批量插入、删除、查询数据,删除表中重复数据方法)
实验名称:数据库表的基本操作与表内数据操作 实验目的: 掌握数据库表创建方法(交互式.T-SQL法) 掌握修改数据库表结构的方法 掌握删除数据库表的方法 掌握交互式EXCEL文件录入数据至数据库表的方 ...
- sql server如何删除表中重复数据
当我们需要删除表中重复的数据的时候,该如何操作呢? 具体操作分为四个步骤: 1.将查询到的无重复数据存入临时表中 2.删除原表的内容 3.将临时表插入到原表中 4.删除临时表 理解起来是比较简单的,这 ...
- 删除数据库表中重复数据
这里的重复数据指数据库中每一列的值都相同的数据,有时候也许是没有主键的原因导致数据可能重复,或者是,除了主键,其他数据重复,那么下面的方法可以都这些重复数据进行删除,保留下重复数据中的一行就可以. 大 ...
- 删除数据库表中重复数据的总结(oracle)
这里的重复数据指数据库中每一列的值都相同的数据,有时候也许是没有主键的原因导致数据可能重复,或者是,除了主键,其他数据重复,那么下面的方法可以都这些重复数据进行删除,保留下重复数据中的一行就可以. 大 ...
- mysql 删除表中重复数据并保留一条
最近有个需求,给角色添加菜单权限,这是一个role_menu 表.里面存放的是角色id和菜单id,是批量给一种类型角色添加,但有可能角色人为添加过,因为数据量还是比较大的,如果先查询这个有没有添加过再 ...
- mysql视图中可以删除数据吗_sql問題 删除视图中的数据,表中的数据会删除吗?
如果你那个视图,是 单表的, 没写 触发器的. 那么 如果 删除视图中的数据 成功了,那么 表中的数据 就被删除了. 如果那个视图, 写了个 INSTEAD OF 触发器. 但是里面没有任何删除的动作 ...
- mysql删除表中所有数据_MySQL删除或清空表中数据的方法
原标题:MySQL删除或清空表中数据的方法 要想把MySQL中的数据删除或清空,可以通过两种方法来实现:DELETE语句和TRUNCATE TABLE语句. DELETE语句可以将表中所有记录都删除, ...
最新文章
- 开课啦 dubbo-go 微服务升级实战
- python 验证码识别 阿里云_python3调用阿里云图像识别OCR-实现验证码识别
- 如何才能更容易拿到大厂Offer?从理论到实践!
- 怎么在Linux系统下使用NTFS的U盘或者是分区以及移动硬盘-使用工具NTFS-3G
- android usb没有读写节点,2019踩坑无数含泪写下最新教程系列(三)树莓派挂载android(树莓派通过usb读取手机里面档案)...
- 开源电子商务平台:OfBiz
- 用perl操作word
- java 睡眠时间_java中sleep()的用法(毫秒)
- python股票预测_python用线性回归预测股票价格的实现代码
- 关键应用在超融合环境下的实践
- xgen 毛发guide历史被清理解决方法
- 服务无法注册到注册中心解决
- 小程序导航栏透明,精准设置小程序自定义标题的高度和定位
- B.ljw 养蔷薇(普通莫队)
- php试题判断ip是否合法,php检测IP地址是否合法的方法
- 智慧建造管理平台施工现场视频监控系统
- win10 nginx部署静态资源服务器和HTML
- 七日杀修改服务器名称,七日杀怎么改名字_联机改名字方法_快吧单机游戏
- 台式计算机鼠标型号和价格,力胜鼠标价格和型号汇总【图文】
- SDN交换机的拓扑发现与ARP处理