首页 新闻 会员 周边

一个关于C语言的问题

0
悬赏园豆:40 [已解决问题] 解决于 2013-02-28 13: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;
}


main()
{
  Linklist *a = {43,13,27,66,38,60,31,50,16,21};
  Mid(a);
}
程序报错:Argument list syntax error !!!请赐教!!!

RaphaelYu416的主页 RaphaelYu416 | 初学一级 | 园豆:106
提问于:2012-12-16 15:35
< >
分享
最佳答案
0

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;
        }
    }

 

 
收获园豆:40
司马东西 | 菜鸟二级 |园豆:246 | 2012-12-16 18:09
//完整代码如下
#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));
}

运行后:

司马东西 | 园豆:246 (菜鸟二级) | 2012-12-16 18:16
其他回答(1)
0

#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)); }

fcyh | 园豆:568 (小虾三级) | 2017-04-04 12:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册