直接看代码吧
#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;
}