在C中实现arraylist
我创建了一个程序,在系统中添加两种类型的项目。我已经为两个不同的项目创建了两个结构。目前,我已经创建了一个向系统添加项的方法,并将每个项存储在一个数组中。 但是我在实现delete特性时遇到了一个问题,问题是如果我在数组内存索引2中有一个记录,如果我删除它,内存索引1和3之间将有一个未使用的空间。我怎样才能克服这个问题?在java中,有一个动态分配空间的arraylist。在C中,我知道有动态内存分配,但如何使用delete特性实现它呢 以下是我迄今为止所做的工作:-在C中实现arraylist,c,arraylist,dynamic-memory-allocation,C,Arraylist,Dynamic Memory Allocation,我创建了一个程序,在系统中添加两种类型的项目。我已经为两个不同的项目创建了两个结构。目前,我已经创建了一个向系统添加项的方法,并将每个项存储在一个数组中。 但是我在实现delete特性时遇到了一个问题,问题是如果我在数组内存索引2中有一个记录,如果我删除它,内存索引1和3之间将有一个未使用的空间。我怎样才能克服这个问题?在java中,有一个动态分配空间的arraylist。在C中,我知道有动态内存分配,但如何使用delete特性实现它呢 以下是我迄今为止所做的工作:- #include <
#include <stdio.h>
#include <string.h>
struct routers
{
int Device_No;
char Device_Name[30];
int No_of_items;
int Price;
char Description[30];
};
/**declared an of struct routers to store the structure objects
**/
struct routers routerlist[5];
struct controllers
{
int Device_No;
char Device_Name;
int No_of_items;
int Price;
char Description[30];
};
void AddNewItem();
int main()
{
AddNewItem();
return 0;
}
void AddNewItem(){
int item;
int choice=0;
int arraysize=0;
do{
printf("Press 1 to add a Router \nPress 2 to add a controller \n");
scanf("%d",&item);
printf("%d",item);
if(item==1){
printf("\nEnter Device No:\n");
scanf("%d",&routerlist[arraysize].Device_No);
printf("Enter Device Name\n");
fflush(stdin); //flush the buffer
gets(routerlist[arraysize].Device_Name);
printf("Enter Number of Items\n");
scanf("%d",&routerlist[arraysize].No_of_items);
printf("Enter price\n");
scanf("%d",&routerlist[arraysize].Price);
printf("Enter description\n");
fflush(stdin);
gets(routerlist[arraysize].Description);
}
arraysize++;
printf("Do you want to add another item? \nPress 1 to add \nPress 2 to Cancel\n");
scanf("%d",&choice);
}while(choice==1);
}
#包括
#包括
结构路由器
{
int设备号;
字符设备名称[30];
int No_of_项目;
国际价格;
字符描述[30];
};
/**声明了一个用于存储结构对象的结构路由器
**/
结构路由器路由器列表[5];
结构控制器
{
int设备号;
字符设备名称;
int No_of_项目;
国际价格;
字符描述[30];
};
void AddNewItem();
int main()
{
AddNewItem();
返回0;
}
void AddNewItem(){
国际项目;
int-choice=0;
int-arraysize=0;
做{
printf(“按1添加路由器\n按2添加控制器”);
scanf(“%d”项和项目);
printf(“%d”,项目);
如果(项目==1){
printf(“\n输入设备编号:\n”);
scanf(“%d”),&routerlist[arraysize]。设备号;
printf(“输入设备名称”);
fflush(stdin);//刷新缓冲区
获取(路由器列表[arraysize]。设备名称);
printf(“输入项目数量\n”);
scanf(“%d”,&routerlist[arraysize]。没有\u个项目);
printf(“输入价格”);
scanf(“%d”,&routerlist[arraysize].Price);
printf(“输入说明”);
fflush(stdin);
获取(routerlist[arraysize].Description);
}
arraysize++;
printf(“是否要添加其他项目?\n按1添加\n按2取消\n”);
scanf(“%d”,选择(&C);
}while(choice==1);
}
谢谢您的时间。根据您的时间复杂度要求,基本上有两种方法:
根据您的时间复杂度要求,基本上有两种方法:
要实现类似于arrayList的行为,您需要在每次阵列满时动态分配内存。然后将当前列表的所有成员复制到该内存中 在删除的情况下,必须将图元移动一个空间到删除的图元位置。这类似于C++中如何实现向量。请参考矿山矢量实现的答案,这个实现是在C++中实现的。您必须研究的概念是在需要时如何动态分配内存 因此,您的方法应如下所示:
类似地,删除元素时,只需将所有元素从末尾向该元素移动一个空格。要实现类似于arrayList中的行为,您需要在每次数组满时动态分配内存。然后将当前列表的所有成员复制到该内存中 在删除的情况下,必须将图元移动一个空间到删除的图元位置。这类似于C++中如何实现向量。请参考矿山矢量实现的答案,这个实现是在C++中实现的。您必须研究的概念是在需要时如何动态分配内存 因此,您的方法应如下所示: