顺序表应用1:多余元素删除之移位算法
Time Limit: 1000 ms Memory Limit: 650 KiB
Problem De ion
一个长度不超过10000数据的顺序表,可能存在着一些值相同的“多余”数据元素(类型为整型),编写一个程序将“多余”的数据元素从顺序表中删除,使该表由一个“非纯表”(值相同的元素在表中可能有多个)变成一个“纯表”(值相同的元素在表中只保留第一个)。
要求:
1、必须先定义线性表的结构与操作函数,在主函数中借助该定义与操作函数调用实现问题功能;
2、本题的目标是熟悉顺序表的移位算法,因此题目必须要用元素的移位实现删除;
Input
第一行输入整数n,代表下面有n行输入;
之后输入n行,每行先输入整数m,之后输入m个数据,代表对应顺序表的每个元素。
Output
输出有n行,为每个顺序表删除多余元素后的结果
Sample Input
4
5 6 9 6 8 9
3 5 5 5
5 9 8 7 6 5
10 1 2 3 4 5 5 4 2 1 3
Sample Output
6 9 8
5
9 8 7 6 5
1 2 3 4 5
#include<stdio.h>
#include<stdlib.h>
typedef struct
{
int *elem;
int length;
int listsize;
}Sqlist;
void InitList(Sqlist *L,int n)
{
int i;
L->elem=(int *)malloc(n*sizeof(int));
if(!L->elem) exit(0);
L->length=0;
for(i=0;i<n;i++)
{
scanf(\"%d\",&L->elem[i]);
L->length++;
}
L->listsize=n;
}
void Del(Sqlist *L)
{
int i,j,k;
for(i=0;i<L->length;i++)
{
for(j=i+1;j<L->length;j++) //遍历第i个元素后面的元素
{
if(L->elem[i]==L->elem[j]) //如果第j个元素与其相同
{
for(k=j;k<L->length;k++)
{
L->elem[k]=L->elem[k+1]; //就把j那个元素后面的所有元素前移一位将其覆盖(删除)
}
L->length--; //每覆盖(删除)一个元素,长度减一
j--;
//因为第j个元素被原来的j+1元素覆盖,
//所以现在的第j个元素是原来的第j+1的
//元素,要重新检查;如果没有这句代
//码,下次的for循环就是从j+1开始的,
//就漏掉了一个元素
}
}
}
}
int main()
{
Sqlist *L;
L=(Sqlist *)malloc(sizeof(Sqlist));
L->elem=NULL;
int i;
int t,n;
scanf(\"%d\",&t);
while(t--)
{
scanf(\"%d\",&n);
InitList(L,n);
Del(L);
for(i=0;i<L->length;i++)
{
if(i==L->length-1)
printf(\"%d\\n\",L->elem[i]);
else
printf(\"%d \",L->elem[i]);
}
}
}
代码都是比较基础的,重点就在于“移位”或者说是“删除”的算法,在那里,我都打上了注释,也是为了自己以后能看懂吧,哈哈哈
继续阅读与本文标签相同的文章
上一篇 :
Python编程语言主要应用在什么领域
下一篇 :
golang入门-1-简介
-
9月书讯:别抱怨读书苦,那是你看世界的路
2026-05-19栏目: 教程
-
首页流量波动大?如何避开猜你喜欢的n个雷区
2026-05-19栏目: 教程
-
Linux基础技术实践#网络安全基础技术实践课程
2026-05-19栏目: 教程
-
AI时代,你的职业会是?99%的人都无法直面!
2026-05-19栏目: 教程
-
centos7 编译安装 openresty
2026-05-19栏目: 教程
