Time Limit: 1000MS Memory limit: 65536K
题目描述
在长度为n(n<1000)的顺序表中可能存在着一些值相同的“多余”数据元素(类型为整型),编写一个程序将“多余”的数据元素从顺序表中删除,使该表由一个“非纯表”(值相同的元素在表中可能有多个)变成一个“纯表”(值相同的元素在表中只能有一个)。
输入
第一行输入表的长度n;
第二行依次输入顺序表初始存放的n个元素值。
输出
第一行输出完成多余元素删除以后顺序表的元素个数;
第二行依次输出完成删除后的顺序表元素。
示例输入
12
5 2 5 3 3 4 2 5 7 5 4 3
示例输出
5
5 2 3 4 7
#include<stdlib.h> #define maxsize 10000 typedef int element; typedef struct { element *elem; int length; int listsize; }Sq; int initList(Sq * L) { L->elem=(element *)malloc(maxsize*sizeof(element)); if(!L->elem) return -1; L->length=0; L->listsize=maxsize; return 0; } void create(Sq * L,int k) { int i; for(i=0;i<k;i++) scanf("%d",&L->elem[i]); L->length=k; } int Del(Sq * L,int k) { element *p,*q; if(k<1||k>L->length) return 0; q=L->elem+L->length; for(p=&(L->elem[k]);p<q;p++) *p=*(p+1); L->length--; return 1; } void locList(Sq * L) { element *p,*q; for(p=L->elem;p<L->elem+L->length;p++) for(q=p+1;q<L->elem+L->length;q++) if(*p==*q) { Del(L,(q-L->elem)); q--; } } void dispaly(Sq *L) { int i; for(i=0;i<L->length-1;i++) printf("%d ",L->elem[i]); printf("%d\n",L->elem[L->length-1]); } int main() { Sq L; int m,i,n; scanf("%d",&m); initList(&L); create(&L,m); locList(&L); printf("%d\n",L.length); dispaly(&L); return 0; }
转载请注明原文地址: https://ju.6miu.com/read-1303102.html