连续数组存储

#include <stdio.h>
#include <malloc.h>

struct Arr{
       int *pBase; //数组的首地址
       int len;//数组的长度
       int cnt;//数组的当前有效个数
       };

void Init_arr(struct Arr *P, int length);//初始化
bool append_arr(struct Arr *P, int value);//追加元素
bool insert_arr(struct Arr *p, int position, int value);//插入元素
bool delect_arr(struct Arr *P, int *position, int *value);//删除元素
void show_arr(struct Arr *P);//显示元素
bool is_full(struct Arr *P);//判断数组是否为空
void inversion_arr(struct Arr *P);//元素倒置
void find_value(struct Arr *P, int value);//查找

int main()
{
    int value, position;
    struct Arr arr;
    Init_arr(&arr, 10);//初始化
    append_arr(&arr, 1);//追加元素
    append_arr(&arr, 2);
    append_arr(&arr, 3);
    append_arr(&arr, 4);
    append_arr(&arr, 5);
    append_arr(&arr, 6);
    insert_arr(&arr, 2, 99);//在第二个位插入99
    insert_arr(&arr, 2, 10);//在第7个位置插入10
    show_arr(&arr);//显示元素
    inversion_arr(&arr);//将数组倒置
    show_arr(&arr);
    printf("请输入删除的元素的位置及元素:");
    scanf("%d,%d", &position,&value);
    delect_arr(&arr, &position, &value);
    show_arr(&arr);
    find_value(&arr, value);
    return 0;
}

void Init_arr(struct Arr *P, int length)
{
    P->pBase = (int *)malloc(sizeof (int) * length);
    if(P->pBase == NULL)
    {
        printf("动态内存分配失败");
        exit(-1);
    }
    else
    {
        P->len = length;
        P->cnt = 0;
    }
    return;
}

bool is_empty(struct Arr *P)
{
    if(P->cnt ==0)
        return true;
    return false;
}


bool is_full(struct Arr *P)
{
     if(P->cnt == P->len)
         return true;
     return false;
}

void show_arr(struct Arr *P)
{
    if(is_empty(P))
        printf("此数组为空\n");
    else
        printf("%d\n",P->cnt);
        for(int i = 0; i < P->cnt ; i++)
            printf("%d ",P->pBase[i]);
    printf("\n");

}

bool append_arr(struct Arr *P, int value)
{
    if(is_full(P))
        return false;

    P->pBase[P->cnt] = value;
    P->cnt++;

    return true;
}

bool insert_arr(struct Arr *P, int position, int value)
{
    int i;
    if(is_full(P))
        return false;
    if(position <0 || position > P->cnt)
        return false;
    P->cnt ++;
    for(i = P->cnt - 1; i >= position; i --)
        P->pBase[i] = P->pBase[i - 1];
    P->pBase[position -1] = value;
    return true;
}

bool delect_arr(struct Arr *P, int *position, int *value)
{
     int i;
     if(is_empty(P))
         return false;
     if(*position < 0 || *position > P->cnt)
         return false;
     *value = P->pBase[*(position - 1)];
     for(i = *position; i < P->cnt; i ++)
     {
         P->pBase[i-1] = P->pBase[i];

     }
     P->cnt --;
     return true;
}

void inversion_arr(struct Arr *P)
{
    int i = 0, j = P->cnt - 1, t;
    while(i < j)
    {
        t= P->pBase[j];
        P->pBase[j] = P->pBase[i];
        P->pBase[i] = t;
        i ++;
        j --;
    }

}

void find_value(struct Arr *P, int value)
{
    int i,j = 0,count = 0,flag[100];
    for(i = 0; i < P->cnt; i++)
    {
        if(value == P->pBase[i])
        {
           printf("找到了查找的元素,在位置%d处\n",i);
        }

    }
    printf("没有找到元素\n");
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值