数据结构上机测试1:顺序表的应用

来源:互联网 发布:jquery 对象数组 编辑:程序博客网 时间:2024/06/05 08:09

题目描述

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

输入

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

输出

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

示例输入

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

示例输出

55 2 3 4 7

提示

用尽可能少的时间和辅助存储空间。

 

 

 

 

#include <stdio.h>
#include <stdlib.h>

struct node
{
    int data;
    struct node *next;
};

int main()
{
    int i,n;
    struct node *p,*q,*head,*tail,*r;
    scanf("%d",&n);
    head=(struct node*)malloc(sizeof(struct node));
    head->next=NULL;
    tail=head;
    for(i=0;i<n;i++)
    {
        q=(struct node*)malloc(sizeof(struct node));

        q->next=NULL;
        scanf("%d",&q->data);
        tail->next=q;
        tail=q;
    }
    r=head->next;
    while(r!=NULL)
    {
        p=r;
        q=p->next;
        while(q!=NULL)
        {
            if(r->data==q->data)            //判断元素是否重复
            {
                n--;                                  //元素个数减1
                p->next=q->next;            //删除元素
                q=q->next;
            }
            else
            {
                p=q;
                q=q->next;
            }
        }
        r=r->next;
    }
    printf("%d\n",n);
    r=head->next;
    while(r!=NULL)
    {
        printf("%d",r->data);
        if(r->next!=NULL)
            printf(" ");
        r=r->next;
    }
    printf("\n");
    return 0;
}
 

 

0 0
原创粉丝点击