下列给定程序中已建立了一个带头结点的单向链表,链表中的各结点按数据域递增有序链接。函数fun的功能是:删除链表中数据域值相同的结点,使之只保留一个。 请在下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:不得增行或删行,也

admin2020-06-16  32

问题 下列给定程序中已建立了一个带头结点的单向链表,链表中的各结点按数据域递增有序链接。函数fun的功能是:删除链表中数据域值相同的结点,使之只保留一个。
    请在下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。
    注意:不得增行或删行,也不得更改程序的结构!
    试题程序:
    #include<stdio.h>
    #include<stdlib.h>
    #define N 8
    typedef struct list
    {int data;
      struct list*next:
    }SLIST;
    void fun(SLIST*h)
    {
      SLIST*p,*q;
      p=h—>next;
      if(p!=NULL)
      {
        q=p—>next;
        while(q!=NULL)
        {if(p—>data==q—>data)
          {p—>next=q—>next;
    / * * * * *  * found * * * * * * /
            free(  1  );
    / * * * * * * found * * * * * * /
            q=p—>  2  
          }else
          {p=q;
    / * * * * * * found * * * * * * /
           q=q—>  3  ;}
           }
        }
      }
    }
    SLIST*creatlist(int*a)
    {
      SLIST*h,*p,*q;int i;
      h=p=(SLIST*)malloc(sizeof(SLIST));
      for(i=0;i<N;i++)
      {
        q=(SLIST*)malloc(sizeof(SLIST));
        q—>data=a;p—>next=q;p=q;
      }
      p—>next=0;
      return h;
    }
    void outlist(SLIST*h)
    {SLIST*p;
      p=h—>next;
      if(p==NULL)
        printf("The list is NULL!\n");
      else
      {printf("\nHead");
        do{
          printf("—>%d”,p—>data);
          p=p—>next;
        }while(p!=NULL);
        printf("—>Endkn");
      }
    }
    main()
    {
      SLIST*head:
      int a[N]={1,2,2,3,4,4,4,5};
      head=creatlist(a):
      printf("The list before deleting:n");
      outlist(head);
      fun(head);
      printf("The list after deleting:n");
      outlist(head);
    }

选项

答案(1)q (2)next (3)next

解析 本题考查:释放内存空间函数free();链表结点的基本操作。
    填空1:使用free函数,释放q所指的内存空间,其一般格式为:free(指针变量)。
    填空2和填空3:删除链表中符合条件结点后,指针要指向下一个结点。
转载请注明原文地址:https://jikaoti.com/ti/tsG0FFFM
0

最新回复(0)