从头实现ADT(C语言)线表(数组)2018.3.11

//数组的数据结构
typedef struct Array//
{
  int *Base;  //数组首指针
  int Cnt;    //数组个数
  int Len;     //数组大小
} Array;
//初始化一个数组
void Init_arr(Array *pArr,int Len)
{
    pArr->Base=(int*)malloc(Len*sizeof(int));
    if(NULL==pArr->Base)//分配失败
    {
        printf("内存分配失败");
        exit(-1);//抛出异常
    }
    else
    {
        pArr->Len=Len;
        pArr->Cnt=0;
    }
}
//向pArr线表的pos位置上插入一个整数Val
int Insert_arr(Array *pArr,int pos,int Val)
{
    if(pos>pArr->Cnt||pArr->Cnt==pArr->Len)//位置大于长度或列表满 抛出异常
    {
        printf("长度过大或线表已满");
        exit(-1);//
    }
    else
    {
        int i;
        for(i=pArr->Cnt;i>pos;i--)
            pArr->Base[i]=pArr->Base[i-1];
        pArr->Base[pos]=Val;
        pArr->Cnt++;
    }
return 0;
}
//线表pArr删除第pos位置的元素
int Delete_arr(Array *pArr,int pos)
{
    if(pArr->Cnt<=0)
    {
        printf("表空");
        exit(-1);
    }
    if(pos>pArr->Cnt||pos<0)
    {
        printf("位置非法");
        exit(-2);
    }
    else
    {
        int i,n;
        n=pArr->Base[pos];
        for(i=pos;i<pArr->Cnt-1;i++)
            pArr->Base[i]=pArr->Base[i+1];
        pArr->Cnt--;
        printf("DELETE=%d\n",n);
    return n;
    }
}

int Count(Array *pArr)//返回线表元素个数
{
    printf("Length=%d",pArr->Cnt);
    return pArr->Cnt;

}

int GetElment_arr(Array *pArr,int pos)//取第pos个元素
{
    printf("Array[%d]=%d",pos,pArr->Base[pos])
    return pArr->Base[pos]
}

void SelectSort_arr(Array *pArr)//直接排序
{
    int i,j,temp;
    for(i=0;i<pArr->Cnt-1;i++)
        for(j=i+1;j<pArr->Cnt;j++)
    {
        if (pArr->Base[i]>pArr->Base[j])
            {
                temp=pArr->Base[i];
                pArr->Base[i]=pArr->Base[j];
                pArr->Base[j]=temp;
            }


    }
    Printf_arr(pArr);
}
void BubbleSrot_arr(Array *pArr)//冒泡
{
    int i,j,temp;
    for(i=0;i<pArr->Cnt-1;i++)
        for(j=0;j<pArr->Cnt-i-1;j++)
    {
        if(pArr->Base[j+1]>pArr->Base[j])
        {
            temp=pArr->Base[j+1];
            pArr->Base[j+1]=pArr->Base[j];
            pArr->Base[j]=temp;
        }


    }
    Printf_arr(pArr);
}
void Printf_arr(Array *pArr)//打印线表
{
    printf("cnt=%d\tlen=%d\n",pArr->Cnt,pArr->Len);
    int i;
    for(i=0;i<pArr->Cnt;i++)
        printf("array[%d]=%d\t",i,pArr->Base[i]);
        printf("\n");
}
int main()
{
    Array A;
    Init_arr(&A,20);
    Insert_arr(&A,0,4);
    Insert_arr(&A,0,5);
    Insert_arr(&A,0,3);
    Insert_arr(&A,1,7);
    Insert_arr(&A,3,9);
    Insert_arr(&A,4,11);
    Insert_arr(&A,6,8);
    Insert_arr(&A,1,2);
    Printf_arr(&A);
    //SelectSort_arr(&A);
    BubbleSrot_arr(&A);
    return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值