-
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));//L->elem?-???·?o?L.elem
- if(!L->elem) return -1;//?-¤?¤??1???�??¥??¨exit(-1)???????¨??o?
- 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-L->elem??o??¥??????é???¤?????� ???????o?
- 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;
- }
顺序表的应用
最新推荐文章于 2021-07-19 14:19:01 发布