C语言实现动态数组(非链表,非柔性数组)

直接看代码吧

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

typedef struct stu
{
    int size;
    int capacity;
    int* p;
}stu;
stu demo;

void menu()
{
    printf("1--添加元素     2--删除元素\n"
           "3--查找特定元素  4--显示元素\n");
}

void check_index(int index)
{
    assert(index>=0 && index<demo.size);
}

void check_array_for_add()
{
    if(demo.size==demo.capacity)
    {
        int newCapacity = demo.capacity + (demo.capacity) >> 1;
        demo.p = (int*)realloc(demo.p,newCapacity);
        demo.capacity = newCapacity;
    }
}

void Add()
{
    check_array_for_add();
    int newElement;
    printf("请输入您要添加的元素:");
    scanf("%d",&newElement);
    demo.p[demo.size] = newElement;
    (demo.size)++;
    printf("添加成功\n");
}

void Delete()
{
    printf("请输入您要删除的元素的下标:");
    int index;
    scanf("%d",&index);
    check_index(index);
    for(int i = index;i<demo.size-1;i++)
    {
        (demo.p)[i] = (demo.p)[i+1];
    }
    (demo.p)[demo.size-1] = 0;
    demo.size--;
    printf("删除成功\n");
}

void Find()
{
    printf("请输入您要删除的元素的下标:");
    int index;
    scanf("%d",&index);
    check_index(index);
    printf("您要找的元素就是%d\n",(demo.p)[index]);
}

void Show()
{
    printf("[");
    for(int i = 0;i<demo.size;i++)
    {
        
        if(i != 0)
        {
            printf(",%d",(demo.p)[i]);
        }
        else
            printf("%d",(demo.p)[i]);
    }
    printf("]\n");
}
int main()
{
    int num,choice = 1;
    printf("请输入你要开辟的动态数组的大小\n");
    scanf("%d",&num);
    while(num<=0)
    {
        printf("输入有误,请重新输入:");
        scanf("%d",&num);
    }
    demo.capacity = num;
    demo.size = 0;
    demo.p = (int*)malloc(num*sizeof(int));
    while(choice)
    {
        menu();
        printf("请输入您的选择\n");
        scanf("%d",&choice);
        switch(choice)
        {
            case 1:
                Add();
                break;
            case 2:
                Delete();
                break;
            case 3:
                Find();
                break;
            case 4:
                Show();
                break;
        }
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值