zoukankan      html  css  js  c++  java
  • 数据结构

    题目描述

    在长度为nn<1000)的顺序表中可能存在着一些值相同的“多余”数据元素(类型为整型),编写一个程序将“多余”的数据元素从顺序表中删除,使该表由一个“非纯表”(值相同的元素在表中可能有多个)变成一个“纯表”(值相同的元素在表中只能有一个)。

    示例输入

    第一行输入表的长度n;第二行依次输入顺序表初始存放的n个元素值。

    输出

    第一行输出完成多余元素删除以后顺序表的元素个数;第二行依次输出完成删除后的顺序表元素。

    示例输入

    12

    5 2 5 3 3 4 2 5 7 5 4 3

    示例输出

    5

    5 2 3 4 7

    //线性顺序表  
    #include <stdio.h>  
    #include <stdlib.h>  
    #define MAXSIZE 1000 //线性表存储空间的初始分配量  
    #define OK 1  
    #define ERROR 0  
    #define OVERFLOW -2  
    typedef int elemType;//元素类型  
    typedef struct  
    {  
    	elemType *elem;//线性表首地址  
    	int length;//当前的长度  
    } SqList;  
    
    //初始化一个空的线性表  
    int InitList_Sq(SqList *L)  
    {  
    	L->elem=new elemType[MAXSIZE];  
    	if(!L->elem)exit(OVERFLOW);//overflow  
    	L->length=0;//初始表为空表  
    	return OK;  
    }  
    
    
    //遍历顺序表  
    void TraverseList(SqList *L)  
    {  
    	int i;  
    	for(i=0; i<L->length; i++)  
    	{  
    		printf("%d ",L->elem[i]);  
    	}  
    	printf("
    ");  
    	return;  
    }    
    
    //向表尾插入元素  
    void InsertLast(SqList *L,elemType e)  
    {  
    	
    	if(L->length >= MAXSIZE)  
    		return ;  
    	L->elem[L->length]=e;  
    	L->length++;  
    	return;  
    }  
    
    
    
    
    void ListDelete(SqList *L,elemType i)//删除指定位置的线性表 
    {
    //	if((i<1)||(i>L->length)) return;
    	for(int j = i; j <= L->length-1; j++)
    		L->elem[j] = L->elem[j+1];
    	
    	--(L->length);
    	
    }
    //删除重复值 
    void DeleteElem(SqList *L)  
    {  
    	
    	for(int i = 0 ;i < L->length ;i++)
    	{
    		for(int j = i+1 ;j <= L->length-1 ;j++)
    		{
    			if(L->elem[i] == L->elem[j])
    			{
    				ListDelete(L,j);
    				j--;
    			}
    			
    			
    		}
    		
    	}
    	
    	
    }  
    
    int main()  
    {  
    	SqList list1;  
    	InitList_Sq(&list1);  
    	int n;  
    	scanf("%d",&n);  
    	int i;  
    	elemType temp;  
    	for(i=0; i<n; i++)  
    	{  
    		scanf("%d",&temp);  
    		InsertLast(&list1,temp);  
    	} 
    	
    	
    	
    	DeleteElem(&list1) ;
    	printf("%d
    ",list1.length);
    	TraverseList(&list1);
    	
    	return 0;  
    }  





































































































































































































































































































































































































































































































































































































































































































































































































































































































    //线性顺序表  
    #include <stdio.h>  
    #include <stdlib.h>  
    #define MAXSIZE 1000 //线性表存储空间的初始分配量  
    #define OK 1  
    #define ERROR 0  
    #define OVERFLOW -2  
    typedef int elemType;//元素类型  
    typedef struct  
    {  
    	elemType *elem;//线性表首地址  
    	int length;//当前的长度  
    } SqList;  
    
    //初始化一个空的线性表  
    int InitList_Sq(SqList *L)  
    {  
    	L->elem=new elemType[MAXSIZE];  
    	if(!L->elem)exit(OVERFLOW);//overflow  
    	L->length=0;//初始表为空表  
    	return OK;  
    }  
    
    
    //遍历顺序表  
    void TraverseList(SqList *L)  
    {  
    	int i;  
    	for(i=0; i<L->length; i++)  
    	{  
    		printf("%d ",L->elem[i]);  
    	}  
    	printf("
    ");  
    	return;  
    }    
    
    //向表尾插入元素  
    void InsertLast(SqList *L,elemType e)  
    {  
    	
    	if(L->length >= MAXSIZE)  
    		return ;  
    	L->elem[L->length]=e;  
    	L->length++;  
    	return;  
    }  
    
    
    
    
    void ListDelete(SqList *L,elemType i)//删除指定位置的线性表 
    {
    //	if((i<1)||(i>L->length)) return;
    	for(int j = i; j <= L->length-1; j++)
    		L->elem[j] = L->elem[j+1];
    	
    	--(L->length);
    	
    }
    //删除重复值 
    void DeleteElem(SqList *L)  
    {  
    	
    	for(int i = 0 ;i < L->length ;i++)
    	{
    		for(int j = i+1 ;j <= L->length-1 ;j++)
    		{
    			if(L->elem[i] == L->elem[j])
    			{
    				ListDelete(L,j);
    				j--;
    			}
    			
    			
    		}
    		
    	}
    	
    	
    }  
    
    int main()  
    {  
    	SqList list1;  
    	InitList_Sq(&list1);  
    	int n;  
    	scanf("%d",&n);  
    	int i;  
    	elemType temp;  
    	for(i=0; i<n; i++)  
    	{  
    		scanf("%d",&temp);  
    		InsertLast(&list1,temp);  
    	} 
    	
    	
    	
    	DeleteElem(&list1) ;
    	printf("%d
    ",list1.length);
    	TraverseList(&list1);
    	
    	return 0;  
    }  



  • 相关阅读:
    mysql 允许远程登陆
    jade报错:unexpected token
    quartz定时任务
    Java调用脚本
    CentOS安装、卸载jdk
    CentOS系统没有javac命令
    IDEA Error:java: 未结束的字符串文字
    面试连环炮系列(三):synchronized怎么用的
    面试连环炮系列(二):你们的项目Redis做了集群部署吗
    面试连环炮系列(一):如何保证Redis高可用和高并发
  • 原文地址:https://www.cnblogs.com/didiaodidiao/p/9387884.html
Copyright © 2011-2022 走看看