C语言中的稀疏密集数组
如何打印稀疏数组和密集数组? 更确切地说,如果我有一个带有pozitions的数组: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;
> (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)只需打印列表。