如何打印稀疏和密集的数组? 更确切地说,如果我有一个带有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)
这两个问题是相似的,但第二个问题更容易实现。两者都可以在线性时间内完成。
第二个问题:
[(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
开始,同时迭代列表。如果索引与列表中的索引匹配,则输出该索引并在列表中前进。否则,输出一对零作为第二个元素。当你找到列表的末尾时停止。