gpt4 book ai didi

c - 在 C 中实现数组列表

转载 作者:太空宇宙 更新时间:2023-11-04 07:26:19 25 4
gpt4 key购买 nike

我创建了一个程序来将两种类型的项目添加到系统中。我为 2 个不同的项目创建了 2 个结构。目前,我已经创建了一种向系统添加项目的方法,并将每个项目存储在一个数组中。然而,当我要实现删除功能时遇到了一个问题,问题是如果我在数组内存索引 2 处有一条记录,如果我删除它,内存索引 1 和 3 之间将会有一个未使用的空间。我该如何克服这 ?在java中,有动态分配空间的arraylist。在 C 中我知道有动态内存分配,但我如何实现它与删除功能一起使用?

这是我到目前为止所做的:-

#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);


}

感谢您的宝贵时间。

最佳答案

根据您的时间复杂度要求,基本上有两种方法:

  1. 使用列表。列表是一种数据结构,其中每个项目都知道下一个项目的存储位置。这通常由数据结构实现,该数据结构持有指向两个同类对象(前一个和下一个)的指针。这样,当删除一个项目时,可以调整下一个和上一个项目的指针,以便关闭间隙。

    也就是说,删除一个元素是很快的,但是按位置访问一个元素需要从头开始寻找这个元素,这是很慢的。

  2. 使用数组。数组是一种数据结构,其中项目连续存储。当一个项目被删除时,间隙会通过移动以下元素来填补。

    这意味着,按位置访问元素非常快,因为只涉及算术运算,但删除元素非常慢,因为可能需要复制大量元素。

关于c - 在 C 中实现数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18118613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com