m0_72763161 2022-11-10 13:41 采纳率: 80%
浏览 59
已结题

vc++一直报错语法问题,但好像没看到什么语法错误?是软件的bug嘛!崩溃了

img


就算按图片里修改 还是一样报错 而且感觉代码里没有图片上的语法问题……

#define null 0;
typedef int ElemType;
typedef struct node
{
    ElemType  data;     /*数据域*/
    struct node *next;    /*指针域*/
}Lnode;                /*定义基本线性表的结点结构* /
Lnode *head;           /*定义基本线性表的表头指针为全局变量* /
int length(Lnode *p)     /*求指针p指向的基本线性表的长度* /
{
   int n=0;            /*结点位置计数器* /
   Lnode *q=p;        /* 定义临时指针q  */
   while(q!=null)      /* 当基本线性表不空时,统计基本线性表中的结点数  */
 {
   n++;
  a=q->next;
}  
return (n);                     /*返回统计的结点数*/
}
ElemType get(Lnode *p,int i) 
 /*求指针p指向的基本线性表中第i个结点的值* /
{
  int  j=1;                   /*查找结点位置的计数器*/
  Lnode *q=p;              /* 定义临时指针q  */
  while(j<i && q!=null)  /* 查找结点i是否存在   * /
{
 q=q->next;
  j++;
}
if(q!=null)               /*如果存在,返回其数据域的值 */
return (q->data);
else                     /*否则,输出其位置参数不正确*/
 printf("位置参数不正确!\n");
}
int Locate(Lnode *p,ElemType x)
/*求指针p指向的基本线性表中的数据元素X的位置序号 */
{
 int n=0;                              /* 结点位置计数器 */
 Lnode  *q=p;                     /* 定义临时指针q  */
while (q!=null  &&  q->data!=x) 
 /* 在基本线性表中查找数据元素x的位置   * /
{q=q->next;
  n++;
}
  if(q==null)        /*如果不存在,则返回-1 */
  return (-1);
  else              /* 否则,返回结点的位置序号  */
  return (n+1);      
}
void insert(ElemType x,int i)   
 /* 在基本线性表的的位置i,插入数据元素  * /
{
     int  j=1;               /* 结点位置计数器 */
     Lnode  *s,*q;          /* 定义临时指针s,q  */
    s=(Lnode *)malloc(sizeof(Lnode));  /*生成新结点*/
    s->data=x;   /*将新结点的数据域置为x*/
     q=head;
     if(i==1)     /*如果插入位置是1,则将新结点插入到表头 */
{
     s->next=q;
     head=s;
}
else     /*否则,查找插入位置*/
  {
      while((j<i-1)&&(q->next!=null))
{
    q=q->next;
     j++;
}
if(j==i-1)
{
    s->next=q->next;
q->next=s;
}
else   /*插入位置不存在*/
  printf("位置参数不正确!\n");
}
}
void delete(Lnode *p,int i) 
   /* 将指针p指向的基本线性表中的位置i的数据元素删除 * /
{
     int  j=1;               /* 结点位置计数器 */
     Lnode  *q=p,*t;        
if(i==1)  
 /*如果位置序号为1,则将基本线性表的第1个数据元素结点删除 */
{
    t=q;
    p=q->next;
}
else     /*否则,从表头查找相应的位置序号i*/
  {
      while((j<i-1)&&(q->next!=null))
{
     q=q->next;
     j++;
}
if(q->next!=null  && j==i-1) 
  /*如果找到位置i,则将该位置的结点删除*/
{
    t=q->next;
q->next=t->next;
}
else   /*否则位置i不存在*/
      printf("位置参数不正确!\n");
}
if(t!=null)
  free(t);
}
void display(Lnode *p)
{
  Lnode *q;
  q=p;
  printf("单链表显示:");
  if(q==null)
  printf("链表为空");
  else if(q->next==null)
     printf("%d\n",q->data);
  else
{
      while(q->next!=null)
{    
   printf("%d->\n",q->data);
   q=q->next;
}
   printf("%d\n",q->data);
}
   printf("\n");
}
main( )
{
     Lnode  *q;
     int d,i,n,select,k,flag=1;
     head=null;
     printf ("请输入数据长度:");
    scanf("%d",&n);
    for(i=1;i<=n;i++)
{
      printf ("将数据到插入到链表中:");
      scanf("%d",&n);
      insert(d,i);
}
display(head);
printf("\n");
while(flag)
{
    printf("1---------求长度\n");
    printf("2---------取结点\n");    
    printf("3-------求值查找\n");
    printf("4--------增加结点\n");
    printf("5--------删除结点\n");
    printf("6--------退出\n");
    printf("input your select:");
    scanf("%d",&select);
    switch(select)
    {
     case  1:{
                    d=length(head);
                    printf("\n单链表的长度为:%d",d);
                    printf("\n");
                    display(head);
                    printf("\n");
                   }
                   break;
      case  2: {
               printf("\n请输入取得结点的位置:");
                    scanf("%d",&d);
                   k=get(head,d);
                   printf("%d\n",k);
                    display(head);
                    printf("\n");
                   }
                   break;
      case  3:{
                   printf("\n请输入要查找的数据:");
                    scanf("%d",&d);
                    k=locate(head,d);
                    printf("%d\n",k);
                    display(head);
                    printf("\n");
                   }
                   break;
case  4:{
                   printf("\n请输入增加结点的位置:");
                   scanf("%d",&k);
                   printf("\n请输入增加结点的数据:");
                   scanf("%d",&d);
                   insert(d,k);
                   display(head);
                   printf("\n");
                   }
                   break;
case  5:{
                   printf("\n请输入删除结点的位置:");
                   scanf("%d",&d);
                   delete(head,d);
                   printf("\n");
                   display(head);
                   printf("\n");
                   }
                   break;
case 6:    flag=0;
                 break;
}
}
}

  • 写回答

2条回答 默认 最新

  • 於黾 2022-11-10 13:58
    关注

    目测你把代码全写到函数外面了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月18日
  • 已采纳回答 11月10日
  • 修改了问题 11月10日
  • 修改了问题 11月10日
  • 展开全部

悬赏问题

  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染