阅读下列程序说明和C程序,已知其输出为“1 2 3 4 5 6 7 8 9 10”。将应填入(n)处的字句写在对应栏内。 [说明] 本程序包含的函数及其功能说明如下: (1)函数first_insert()的功能是在已知链表的首表元之前插入一个

admin2009-02-15  28

问题 阅读下列程序说明和C程序,已知其输出为“1 2 3 4 5 6 7 8 9 10”。将应填入(n)处的字句写在对应栏内。
[说明]
   本程序包含的函数及其功能说明如下:
   (1)函数first_insert()的功能是在已知链表的首表元之前插入一个指定值的表元;
   (2)函数reverse_copy()的功能是按已知链表复制出一个新链表,但新链表的表元链接顺序与
   已知链表的表元链接顺序相反;
   (3)函数Print_link()用来输出链表中各表元的值;
   (4)函数free_link()用来释放链表全部表元空间。
[程序]
#include <stdio. h >
#include <malloe. h >
typodef struct node {
    int val;
    struct node * next;
} NODE;
void first_insert(NODE * * p,int v)
{  NODE *q = (NODE *) malloe(sizeof(NODE));
   q->val = v; q->next = *p;            /* 为新表元赋值*/
   * p =(1); }
NODE * reverse_copy( NODE * p)
{  NODE * u;
   for(u=NULL; p!=NULL; p=p->next) first_insert((2));
   return u;
}
void printlink(NODE * p )
{  for(;(3)) prinff("%d\t", p->val);
   printf(" \n");
}
void free_link( NODE * p)
{  NODE * u;
   while(p! =NULL) { u=p->next;free(p);(4); }
void main( ) {    NODE * link1 , * link2;
   int i;
   link1 = NULL;
   for(i=1; i<= 10; i+ + )first_insert(&linkl, i);
   link2 = reverse_copy(link1 );
     (5);
   free_link( linkl ) ;free_link(link2); }

选项

答案(1)q (2)&u,p->val (3)p!=NULL;P= p->next (4)P=u (5)print_link(link2)

解析 (1)定义新表元并且给予赋值后需要更新链首指针,使其指向新表元;
(2)为了由空链表生成原来链表的逆序链,可以自链首表元P起遍历其每一个表元,调用first_insert函数将这个表元的值插入到新链表u中;
(3)此处的循环是自链首表元p起循环遣历链表,循环结束条件是p!=NULL,每循环一次,将p指向下一个表元,即P=P->next;
(4)释放链表全部表元空间是自链首表元起,循环释放每一个表元空间;
(5)此处定义了程序的输出。由于main函数中链表 link1、link2分别为:
   “10  9  8  7  6  5  4  3  2  1”及
   “1  2  3  4  5  6  7  8  9 10”,
因而此处应该是调用print_link函数输出link2。
转载请注明原文地址:https://kaotiyun.com/show/4ojZ777K
0

最新回复(0)