我目前正在尝试实施Radix Sort算法。为了实现,我必须创建一个链表列表。我在以下几行中这样做:
typedef struct _nod {
struct _nod *next;
int val;
} nod;
v=(nod*)malloc(10*sizeof(nod));
我将以下功能提供给未排序的链接列表(v),以及' n'表示我想要返回的数字(1表示我想要单元号,10表示我想要十位数字等)和一个必须排序的未排序链表(cap)。
nod *sorteaza(nod *v,nod *cap,int n) {
nod *sort,*aux;
int cat,r,i;
sort=(nod*)malloc(sizeof(nod));
while(cap->next!=NULL) {
cat=cap->val/n;
r=cat%10;
adaugaSfarsit(&v[r],cap->val);
cap=cap->next;
}
cat=cap->val/n;
r=cat%10;
adaugaSfarsit((nod)v[r],cap->val);
for(i=0;i<10;i++) {
aux=&v[i];
while(aux->next!=NULL) {
adaugaSfarsitNod(sort,v[i].next);
aux=aux->next;
}
adaugaSfarsitNod(sort,v[i].next);
}
}
我运行此程序时遇到的问题是由v [i]生成的,它给出了以下错误:
1.c: In function ‘sorteaza’:
1.c:73:2: error: incompatible type for argument 1 of ‘adaugaSfarsit’
adaugaSfarsit((nod)v[r],cap->val);
^
1.c:29:6: note: expected ‘struct nod *’ but argument is of type ‘nod’
nod* adaugaSfarsit (nod *cap,int inf)
有人可以向我解释为什么它会给我这个错误吗?据我所知,v [i]是一个点头,这是我在adaugaSfarsit的参数中要求的,这个参数声明如下:
nod* adaugaSfarsit (nod *cap,int inf)
{
nod *nou, *p;
p = cap;
nou = (nod*) malloc( sizeof(nod));
nou->val=inf;
nou->next = NULL;
if(cap == NULL)
cap=nou;
while (cap->next != NULL)
cap = cap->next; //parcurg lista pana ajung la ultimul nod
cap->next = nou; //adaug elementul
return p;
}
nod* adaugaSfarsitNod (nod *cap,nod *nou)
{
nod *p;
p = cap;
if(cap == NULL)
cap=nou;
while (cap->next != NULL)
cap = cap->next; //parcurg lista pana ajung la ultimul nod
cap->next = nou; //adaug elementul
return p;
}
答案 0 :(得分:4)
你有太多的演员阵容,这可能表明你正在与编译器作斗争并强迫它接受你的代码,这是非常糟糕的。
问题是
adaugaSfarsit((nod)v[r],cap->val);
/* ^ here it's very wrong */
不仅v[r]
已经是[{1}}类型,而且还要将其投放到nod
?
所以解决方案就是用这个
来改变它nod