两个元素相加的数据结构

用户名

我在c中遇到问题,我想使用下面编写的代码来实现这种目的。输入和输出应如下所示:

      Input Freq                                  Output Freq
1     0,1,4,2,5,3 add two first (0+1)             0,1,4,2,5,3,1
2     4,2,5,3,1   add min and last (2+1)          0,1,4,2,5,3,1,3
3     4,5,3,3     add min and last (3+3)          0,1,4,2,5,3,1,3,6
4     4,5,6      **here we add(4+5)**(minimum two)0,1,4,2,5,3,1,3,6,9
5     9,6         minimum two                     0,1,4,2,5,3,1,3,6,9,15
6     15

但是条件是必须没有元素交换没有排序,**。但是我们可以处理元素的索引以进行比较,一旦在任何索引处找到正确的元素,我们就将它们添加并放在数组的最后。

我正在尝试一些基本思想我想知道的第一个if条件在其他情况下应该写什么,但是对于其他两个if条件我应该知道。请在那帮助我假设data [i] .freq = {0,1,2,3,4,5}和data [i] .next指向下一个元素,如上面的第一步中的示例所示,0指向1,而此1现在指向指向由这两个元素获得的元素(因此,此1指向alst的1,而最后1的索引将指向“ 1”的下一个(我们另外使用),因此该“ 1”的下一个是4,因此最后一个元素“ 1”指向4,并且我们保持索引指向的方式相同)。请不要犹豫,问您是否不明白我的意思。我猜代码应该非常接近:

    data[data_size].freq=data[0].freq+data[1].freq; // here i add the first 2 elements "0" and "1" in the example i given below.
    data[data_size].flag=0;  //I am using flag variable to show which elements are added or which are not added even once. If flag ="1" then that element is added if it "0" then not added even once.
    data[0].flag=1;
    data[1].flag=1;  //these two have been added.
    int count=5;
    do
    {
        for(i=0;data[i].next!=-1;i=data[i].next)
        { 
            if(data[data[i].next].freq>data[data_size].freq && data[data[i].next].flag==0)//Here i am setting flag=0 for those elements who not have been added yet. Because we don't have to take in account for addition those elements who are already added once.(step1 and step2 are coming in this loop)
            {
            data[data_size+1].freq= data[data_size].freq+ data[data[i].next].freq; 
            data[data_size].flag=1;//those elements which we are adding we set their flag to 1
            data[data[i].next].flag=1;
            data[data_size+1].flag=0;//this is the element onbtained on result will be sent to last index.With 0 flag because it is not added yet.
            data[data_size].next=data[i].next;
            data[i].next=data_size;
            data_size++; 
            } 
            if(data[data[i].next].freq<data[data_size].freq && data[data[i].next].flag==0)
            {
             //some code for step4 where 6>5 (in this case we added 5+4)
             data_size++; 
            }
            if(data[data[i].next].freq==data[data_size].freq && data[data[i].next].flag==0)
            {
               //Some code for step3 when element are equal
               data_size++; 
            }
        } 
        count--;
    } while(count>0)

会有不同的条件,例如(最后一个元素=在右边找到元素,例如在步骤2中3 + 3 = 6),发现的元素是saller,然后是最后一个元素,例如5 + 4 = 9(请参阅步骤4)。

知道其他两个条件是否正确?我的数组输入必须为{0,1,4,2,5,3}(我的意思是data [i] .freq),输出数组必须为{0,1,4,2,5,3,1,3,6,9,15}(data [data_size] .freq ),不进行任何排序且不进行任何交换,仅使用索引移动,仅使用数组。如果有条件,请帮助我再写两个。

用户名

终于我能够解决我的问题了。我使用一个队列来做到这一点,使用Front和Rear变量来指向data []数组的开始和结束索引。如果遇到相同类型的问题,这是任何未来用户的等效帮助示例(请注意,这里的每件事都是静态的,但实现的逻辑是相同的:

#include <stdio.h>

void main() {
    int max = 50;
    int index = 0, Front = 0, Rear, min, min2, location, i, location2, flag[30], check = 0, j;

    int data[50] = {
        1, 2, 3, 4, 5, 6, 7, 8, 9, 10
    };
    Rear = 9;
    for (i = 0; i <= Rear; i++) {
        flag[i] = 0;
    }
    int count = Rear;
    do {
        if (Front == 0) {
            printf("check1 \n ");

            Rear++;
            data[Rear] = data[Front] + data[1];
            flag[Front] = 1;
            flag[Rear] = 0;
            flag[1] = 1;
            printf("*****************dataRear: %d\n ", data[Rear]);
            Front = Front + 2;
        }

        if (data[Front] == data[Rear] && flag[Rear] == 0 && flag[Front] == 0) {
            printf("check3 \n ");
            data[Rear + 1] = data[Front] + data[Rear];
            printf("************dataRear[Rear+1]: %d\n ", data[Rear + 1]);
            flag[Front] = 1;
            flag[Rear] = 1;
            flag[Rear + 1] = 0;
            for (j = Front + 1; j <= Rear; j++) {
                if (flag[j] == 0) {
                    Front = j;
                    break;
                }
            }
            Rear++;
        }

        if (data[Front] < data[Rear] && flag[Rear] == 0 && flag[Front] == 0) {
            int start = Front + 2;
            min = data[Front];
            for (j = Front + 1; j <= Rear; j++) {
                if (flag[j] == 0) {
                    min2 = data[j];
                    location2 = j;
                    break;
                }
            }
            location = Front;

            for (i = start; i <= Rear; i++) {
                if (data[i] < min && flag[i] == 0) {
                    min = data[i];
                    location = i;
                    min2 = min;
                }
                if (data[i] < min2 && flag[i] == 0) {
                    min2 = data[i];
                    location2 = i;
                }
            }
            data[Rear + 1] = min2 + min;
            flag[location2] = 1;
            flag[location] = 1;
            flag[Rear + 1] = 0;

            for (j = location + 1; j <= Rear; j++) {
                if (flag[j] == 0) {
                    Front = j;
                    break;
                }
            }
            printf("*****************dataRear: %d\n ", data[Rear]);
            Rear = Rear + 1;
        }
        count--;
    } while (Front != Rear && count > 0);



    for (i = 0; i < 21; i++) {
        printf(" %d  ", data[i]);
    }
    printf("\n");
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

两个元素相加的数据结构

来自分类Dev

Python:合并两个任意数据结构

来自分类Dev

C ++数据结构可存储两个唯一元素集之间的多个关系

来自分类Dev

如何将两个嵌套的数据结构合并为一个?

来自分类Dev

将两个列表的第i个元素相加

来自分类Dev

用于两个非唯一值的数据结构

来自分类Dev

数据结构列表包含两个项目,并且可以彼此返回

来自分类Dev

为什么要实现两个类似的数据结构,如List和Tuple

来自分类Dev

在python中共享一个迭代器的两个数据结构

来自分类Dev

STL映射类似于数据结构,以允许基于两个键进行搜索

来自分类Dev

VB6数据结构执行两个条件的搜索

来自分类Dev

比较两个数据结构并建议最佳匹配

来自分类Dev

两个变量相加

来自分类Dev

在Active Admin中显示来自两个或多个模型(具有相同数据结构)的数据

来自分类Dev

在Active Admin中显示来自两个或多个模型(具有相同数据结构)的数据

来自分类Dev

Haskell中的两个无限数据结构之间是否可以进行相等性测试?

来自分类Dev

Java数据结构,用于替换通过B值链接的两个地图Map <A,B>,Map <B,C>

来自分类Dev

计算两个速度相加的结果

来自分类Dev

将两个列表相加

来自分类Dev

在 Haskell 中将两个函数相加

来自分类Dev

如果熊猫数据框满足两个不同要求,则它们将两行相加

来自分类Dev

在排序的数组中找到单个元素,其中每个元素都出现两次,除了一个| 数据结构与算法

来自分类Dev

在Matlab中,通过将两个正交向量的元素相加来生成矩阵

来自分类Dev

返回(两个)逐元素相加的向量中的最大值

来自分类Dev

在Matlab中,通过将两个正交向量的元素相加来生成矩阵

来自分类Dev

将两个不同长度的数组中的对应元素相加

来自分类Dev

将两个数据结构的组合转换为特定的JSON对象

来自分类Dev

是否可以通过修改inode数据结构和超级块来在同一Linux文件系统上串联两个文件?

来自分类Dev

在图数据结构中,我们如何使用中间节点来计算其他两个节点之间的距离?

Related 相关文章

  1. 1

    两个元素相加的数据结构

  2. 2

    Python:合并两个任意数据结构

  3. 3

    C ++数据结构可存储两个唯一元素集之间的多个关系

  4. 4

    如何将两个嵌套的数据结构合并为一个?

  5. 5

    将两个列表的第i个元素相加

  6. 6

    用于两个非唯一值的数据结构

  7. 7

    数据结构列表包含两个项目,并且可以彼此返回

  8. 8

    为什么要实现两个类似的数据结构,如List和Tuple

  9. 9

    在python中共享一个迭代器的两个数据结构

  10. 10

    STL映射类似于数据结构,以允许基于两个键进行搜索

  11. 11

    VB6数据结构执行两个条件的搜索

  12. 12

    比较两个数据结构并建议最佳匹配

  13. 13

    两个变量相加

  14. 14

    在Active Admin中显示来自两个或多个模型(具有相同数据结构)的数据

  15. 15

    在Active Admin中显示来自两个或多个模型(具有相同数据结构)的数据

  16. 16

    Haskell中的两个无限数据结构之间是否可以进行相等性测试?

  17. 17

    Java数据结构,用于替换通过B值链接的两个地图Map <A,B>,Map <B,C>

  18. 18

    计算两个速度相加的结果

  19. 19

    将两个列表相加

  20. 20

    在 Haskell 中将两个函数相加

  21. 21

    如果熊猫数据框满足两个不同要求,则它们将两行相加

  22. 22

    在排序的数组中找到单个元素,其中每个元素都出现两次,除了一个| 数据结构与算法

  23. 23

    在Matlab中,通过将两个正交向量的元素相加来生成矩阵

  24. 24

    返回(两个)逐元素相加的向量中的最大值

  25. 25

    在Matlab中,通过将两个正交向量的元素相加来生成矩阵

  26. 26

    将两个不同长度的数组中的对应元素相加

  27. 27

    将两个数据结构的组合转换为特定的JSON对象

  28. 28

    是否可以通过修改inode数据结构和超级块来在同一Linux文件系统上串联两个文件?

  29. 29

    在图数据结构中,我们如何使用中间节点来计算其他两个节点之间的距离?

热门标签

归档