删除顺序表的重复元素
程序员文章站
2024-03-20 13:51:52
...
//有序顺序表删除重复的元素,因为元素是有顺序的,所以重复元素一定是相邻的
#include<stdio.h>
#include<stdlib.h>
#define max 1000
typedef struct slist
{
int num[max];
int length;
}list;
list* creatlist();//顺序表的创建
void printlist(list *l);//顺序表的输出
void delete_same(list *l);//删除重复元素
int main(void)
{
list *l;
l = creatlist();
printf("打印新表:\n");
printlist(l);
delete_same(l);
printf("打印删除过后的表:\n");
printlist(l);
return 0;
}
void delete_same(list *l)
{
int i;
int k = 1;
int e;
e = l->num [0];
for(i = 1; i < l->length ; i++)
{
if(l->num [i] != e)
{
l->num [k] = l->num [i];
k++;
e = l->num [i];//也就是跳过重复元素
}
}
l->length = k;
}
list* creatlist()
{
list *l = (list *)malloc(sizeof(list));
int len;
printf("请输入顺序表的长度 :\n");
scanf("%d",&len);
l->length = len;
int i;
printf("为顺序表添加元素:\n");
for(i = 0; i < l->length ; i++)
{
int number;
scanf("%d",&number);
l->num [i] = number;
}
return l;
}
void printlist(list *l)
{
if(l->length == 0)
{
printf("顺序表的长度为零:\n");
}
else
{
int i;
for(i = 0; i < l->length ; i++)
{
printf("%d ",l->num [i]);
}
}
printf("\n");
}