顺序表应用2:多余元素删除之建表算法

来源:互联网 发布:程序员推荐书单 编辑:程序博客网 时间:2024/05/16 01:16

以上为题目。

具体代码为:

#include <stdio.h>#include <stdlib.h>#define Error 0#define Max_size 10000typedef int Element;typedef struct//定义{    Element *elem;//存储空间基址    int length;//当前长度    int listsize;//当前分配的储存容量}Sqlist;int Initlist(Sqlist *L)//构造一个空的线性表L{    L->elem=(Element *)malloc(Max_size*sizeof(Element));    if(!L->elem)exit(Error);//存储分配失败    L->length=0;//空表长度为0    L->listsize = Max_size;//初始储存容量    return 0;}void Create(Sqlist *L,int k)//为表加入K个数据{    int i;    for(i=0;i<k;i++)    {        scanf("%d",&L->elem[i]);    }    L->length=k;//当前表长为k}void Newlist(Sqlist *L)// 在同一表中删除值相同的元素,只保留第一个{    int i,j,k;    k=-1;//表示新表的长度    for(i=0;i<L->length;i++)    {        j=0;//从新表的开头搜素        while(j<=k&&L->elem[j]!=L->elem[i])//当搜索新表完毕未发现相等元素        //或者发现相等元素跳出循环            j++;        if(k==-1||j>k)//k=-1表示新表中没有一个元素时        L->elem[++k]=L->elem[i];//j>k说明新表中与旧表没有相同的元素    }    L->length=k+1;//新表的长度}void Display(Sqlist *L)//输出函数{    int i;    for(i=0;i<L->length;i++)    {        printf(i==L->length-1?"%d\n":"%d ",L->elem[i]);    }}int main(){    int i,n,m;    Sqlist L;    scanf("%d",&n);    for(i=0;i<n;i++)    {        scanf("%d",&m);        Initlist(&L);        Create(&L,m);        Newlist(&L);        Display(&L);    }    return 0;}
此代码为在Code::blocks中编译

1 0
原创粉丝点击