欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

删除顺序表的重复元素

程序员文章站 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");
 }