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

以上为题目

题目代码为:

#include <stdio.h>
#include <stdlib.h>
#define Error 0
#define Max_size 10000
typedef 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
}

int Delete(Sqlist *L,int k)//移位删除表中指定元素
{
    Element *p,*q;
    if(k<1||k>L->length)return Error;//需要判断k的位置是否合法
    q=L->elem+L->length;//q指向最后一位的后面
    for(p=&(L->elem[k]);p<q;p++)//p指向被删除元素,
    {
        *p=*(p+1);//由被删除元素开始被覆盖
    }
    L->length--;//覆盖一个元素,表长度减一
    return 1;
}

int Locatelist(Sqlist *L)//搜索是否有相同的元素,若有跳转至移位删除函数
{
    Element *q,*p;
    for(p=L->elem;p<L->elem+L->length;p++)//从表头开始,搜索至表尾
        for(q=p+1;q<L->elem+L->length;q++)
    {
        if(*p==*q)
        {
            Delete(L,(q-L->elem));//(q-L->elem)为要删除元素的位序
            q--;//移位之后还是从原位置开始搜索
        }
    }
}



void Display(Sqlist *L)//输出函数
{
    int i;
    printf("%d\n",L->length);
    for(i=0;i<L->length;i++)
    {
        printf(i==L->length-1?"%d\n":"%d ",L->elem[i]);
    }

}

int main()
{
    int i,n;
    Sqlist L;

        scanf("%d",&n);
        Initlist(&L);
        Create(&L,n);
        Locatelist(&L);
        Display(&L);

    return 0;
}

此代码为在Code::blocks中编译,函数中void Display(Sqlist *L)中也可为Sqlist &L


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值