我写了一个程序,但是关于单链表这方面的东西,我不是很熟悉,所以不知道应该如何修改这个程序,有人能帮我看看嘛?程序如下:
int Mid(Linklist *a)
{
int l[max];
int i,n,j;
Linklist *p,*q;
for(n=0,p=a->next;p!=null;n++,p=p->next);
for(i=0;i<n;i++)
{
l[i]=1;
}
for(i=0,p=a->next;p->next!=null;i++,p=p->next)
{
for(j=i+1,q=p->next;q!=null;j++,q=q->next)
{
if(p->data < q->data)
{
l[j]++;
}else
{
l[i]++;
}
}
}
for(i=0,p=a->next;l[i]!=n/2;i++,p=p->next);
return p->data;
}
main()
{
Linklist *a = {43,13,27,66,38,60,31,50,16,21};
Mid(a);
}
程序报错:Argument list syntax error !!!请赐教!!!
main() { Linklist *a = {43,13,27,66,38,60,31,50,16,21};//不能这么对此结构体赋值 Mid(a); } //可以用下面的代码赋值(只做参考) int i=0; Linklist *Current,*Pre,*a; int b[10] = {43,13,27,66,38,60,31,50,16,21}; for(i=0;i<10;i++) { Current=(Linklist *)malloc(sizeof(Linklist)); if(i==0) a=Current; Current->data=b[i]; Current->next=NULL; if(i==0) Pre=Current; else { Pre->next=Current; Pre=Current; } }
//完整代码如下 #include <stdio.h> #include <malloc.h> typedef struct Linklist { int data; Linklist * next; }Linklist; #define max 20 int Mid(Linklist *a)//此函数没有语法错误 { int l[max]; int i,n,j; Linklist *p,*q; for(n=0,p=a->next;p!=NULL;n++,p=p->next); for(i=0;i<n;i++) { l[i]=1; } for(i=0,p=a->next;p->next!=NULL;i++,p=p->next) { for(j=i+1,q=p->next;q!=NULL;j++,q=q->next) { if(p->data < q->data) { l[j]++; } else { l[i]++; } } } for(i=0,p=a->next;l[i]!=n/2;i++,p=p->next); return p->data; } void main() { int i=0; Linklist *Current,*Pre,*a; int b[10] = {43,13,27,66,38,60,31,50,16,21}; for(i=0;i<10;i++) { Current=(Linklist *)malloc(sizeof(Linklist)); if(i==0)//a用来指向链表表头 a=Current; Current->data=b[i]; Current->next=NULL; if(i==0)//Pre表示链表相对于Current上一个元素 Pre=Current; else { Pre->next=Current; Pre=Current; } } printf("%d\n",Mid(a)); }
运行后:
#include <stdio.h> #include <malloc.h> typedef struct Linklist { int data; Linklist * next; }Linklist; #define max 20 int Mid(Linklist *a)//此函数没有语法错误 { int l[max]; int i,n,j; Linklist *p,*q; for(n=0,p=a->next;p!=NULL;n++,p=p->next); for(i=0;i<n;i++) { l[i]=1; } for(i=0,p=a->next;p->next!=NULL;i++,p=p->next) { for(j=i+1,q=p->next;q!=NULL;j++,q=q->next) { if(p->data < q->data) { l[j]++; } else { l[i]++; } } } for(i=0,p=a->next;l[i]!=n/2;i++,p=p->next); return p->data; } void main() { int i=0; Linklist *Current,*Pre,*a; int b[10] = {43,13,27,66,38,60,31,50,16,21}; for(i=0;i<10;i++) { Current=(Linklist *)malloc(sizeof(Linklist)); if(i==0)//a用来指向链表表头 a=Current; Current->data=b[i]; Current->next=NULL; if(i==0)//Pre表示链表相对于Current上一个元素 Pre=Current; else { Pre->next=Current; Pre=Current; } } printf("%d\n",Mid(a)); }