如何从Struct中删除元素

时间:2017-10-15 06:33:26

标签: 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;

1 个答案:

答案 0 :(得分:0)

元素数量以任意顺序频繁更改的集合的典型数据结构是链接列表。 (或者,如果您需要更快的访问权限并且具有类似您的员工编号的订单标准,则可以使用已排序的树)。您将使用malloc()分配新元素(此处为:员工),并使用free将其从内存中删除。

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

无法更改数组中的元素数(除非您动态分配整个数组并在需要时重新分配)。正如Bo Persson建议的那样,通过对正在使用的元素的标记,可以添加新员工或删除现有员工。这可能是一个额外的布尔标志,或者是其中一个现有字段中的特殊值。

实际上,虽然您将以这种方式编写自己的粗略动态内存管理,但使用数组作为&#34;竞技场&#34;。它可能会比你刚刚使用内置的那个更加错误和慢。