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

删除顺序表中重复元素

程序员文章站 2024-03-20 13:42:40
...
//删除顺序表中所有指定元素

#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_all(list *l,int x);//删除重复元素 

int main(void)
{
	list *l;
	
	l = creatlist();
	
	printf("打印顺序表:\n");
	
	printlist(l);
	
	printf("请输入需要删除的元素:\n");
	
	int x;
	
	scanf("%d",&x);
	
	delete_all(l,x);
	
	printf("重新打印表:\n");
	
	printlist(l);
}

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");
 }
 
 void delete_all(list *l,int x)
 {
 	int i;
 	
 	int k = 0;
 	
 	for(i = 0; i < l->length ; i++)
 	{
 		if(l->num [i] != x)
 		{
 			l->num [k] = l->num [i];//与原来的顺序表共用一个空间,
			//当然,我们完全可以定义一个新表来存放数据 
			 
			k++;	
		}
	}
	 
	l->length = k;//重新定义长度 
 }