Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中的稀疏密集数组_C - Fatal编程技术网

C语言中的稀疏密集数组

C语言中的稀疏密集数组,c,C,如何打印稀疏数组和密集数组? 更确切地说,如果我有一个带有pozitions的数组: > (pozition, value) = [(2,4)(3,5),(4,5)] must print > [(0,0)(1,0)(2,4)(3,5)(4,5)]? 或者如果有一个数组[[(0,0)(1,0)(2,4)(3,5)(4,5)]应该打印[(2,4)(3,5)、(4,5)]? 我从结构开始: struct arr { int position; int value;

如何打印稀疏数组和密集数组? 更确切地说,如果我有一个带有pozitions的数组:

> (pozition, value) = [(2,4)(3,5),(4,5)] must print
> [(0,0)(1,0)(2,4)(3,5)(4,5)]?
或者如果有一个数组
[[(0,0)(1,0)(2,4)(3,5)(4,5)]
应该打印
[(2,4)(3,5)、(4,5)]
? 我从结构开始:

struct arr
{
    int position;
    int value;
    struct arr *next;
};
对于给定的值和位置,我应该怎么做?我试着打印,但我不知道是否正确

typedef struct arr *ARR;

ARR term(int poz, int val)
{
    ARR w;
    w=(ARR)malloc(sizeof(struct arr));
    w->position=poz;
    w->value=val;
    return w;
}

ARR oneterm(int val,int poz, ARR nextarr) ///create term
{
    ARR w;
    w=term(poz,val;
    w->next =nextarr;
    return w;
}
ARR create(int poz[],int val[],int n)
{
    ARR w=NULL;
    for(n--;n>=0;n--)
        w=oneterm(poz[n],val[n],w);
    return w;
}
void print(struct arr p, char *text)
{
    printf("\n%s",text);
    for(; p; p=p->next)
    printf("(%d , %d)",p->value,p->position);
}
这就是我的主要观点:

ARR a=NULL;
int c[] = {2,7,11,12};
int b[]= {4,3,1,0};
a=createvect(b,c,4);

我的问题是:如何打印稀疏数组和密集数组?

这两个问题相似,但第二个问题更容易实现。这两个问题都可以在线性时间内完成


第二个问题:

[(0,0), (1,0), (2,4), (3,5), (4,5)] -> [(2,4), (3,5), (4,5)]
只需迭代输入列表并输出第二个元素为非零的对


第一个问题:

[(2,4), (3,5), (4,5)] -> [(0,0), (1,0), (2,4), (3,5), (4,5)]
让我们假设输入列表总是有序的,并且输出列表应该从
0
到输入列表的最大第一个元素


创建一个循环,使索引从
0
开始,同时循环遍历列表。如果索引与列表中的索引匹配,则输出该索引并在列表中前进。否则,输出一个带零的对作为第二个元素。找到列表末尾时停止。

p->urm
?请发布真实代码。
struct arr p
应该是
struct arr*p
。我从我的工作中添加了更多内容。很抱歉,我遗漏了一些细节!使用
main
函数来完成您的代码片段会很好,该函数调用您的函数和完整程序的预期输出。我将解决三个单独的任务。1)转换为密集列表.2)转换为稀疏列表。3)只需打印列表。