c - 如何从结构体中删除元素

标签 c for-loop struct

我想知道如何使用减量删除之前输入的信息。

               case 4: printf("Remove Employee\n");
                    printf("===============\n");
                    do{
                        printf("Enter Employee ID: ");
                        scanf("%d", &number);
                        int i;
                        for(i=0;i<NOE; i--){
                               if(number == emp[i].Int_Num){

                                  printf("Employee %d will be removed", emp[i].Int_Num);
                                   // for(i=0;i<NOE; i++){


                                  -- emp[i].Int_Num, --emp[i].Salary, --emp[i].Age;
                                 // scanf("%11lf", &emp[i].Salary);
                                  flag = 1;
                                  break;

最佳答案

元素数量以任意顺序频繁变化的集合的典型数据结构是链表。 (或者,如果您需要更快的访问速度并有一个订单标准,例如您的员工编号、排序树)。您可以使用 malloc() 分配新元素(此处为:employees),并使用 free 将它们真正从内存中删除。

或者,如果已知最大员工数量并且您有足够的内存,则可以使用数组,就像您在此处所做的那样。数组中的元素数量将是预期的最大员工数量;因此,即使员工很少,程序也总是需要最大的内存量。另一方面,程序的内存占用在编译时是静态已知的,这可能是一个优点。

数组中的元素数量无法更改(除非动态分配整个数组并在需要时重新分配)。正如 Bo Persson 所建议的,添加新员工或删除现有员工将通过对正在使用的元素进行标记来完成。这可能是一个额外的 bool 标志,或者现有字段之一中的特殊值。

实际上,您将以这种方式编写自己的原始动态内存管理,并将数组用作“竞技场”。与您只使用内置的相比,它可能会出现更多错误并且速度更慢。

关于c - 如何从结构体中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46752359/

相关文章:

c - 蒯因的困惑。蒯因实际上打印了什么?

c - 函数中引用指针有什么区别

c++ - 16个嵌套循环速度C++/Rcpp

arrays - 有效过滤 MATLAB 结构数组?

c++ - 在 C++ 中迭代结构

c - 在头文件中声明一个字符串返回函数。冲突的类型?

php - 如何在foreach循环中分离数据列

php - 在PHP中的函数中加载全局变量

struct - Golang levelDB 结构

带有 _TIME_、_FILE_、_FUNCTION_、_LINE_ 的自定义打印功能