[说明]
下面的程序是通过双链结构来查找学生的信息程序的一部分,即创建双向链表部分。
[函数]
#include <stdio.h>
#define N 10
typedef struct node
char name [20];
struct node *llink,*rlink;
stud; /*双链表的结构定义*/
/*双链表的创建*/
stud * creat (int n)
stud *p,*h,*s;
int i;
if ((h= (stud *) malloc (sizeof (stud))) ==NULL)
printf ("cannot find space! \n") ;
exit (0) ;
h->name[0]=’\0’;
h->llink=NULL;
h->rlink=NULL;
p=h;
for(i=0; i<n; i++)
if((s= (stud *) malloc (sizeof (stud)))==NULL)
printf ("cannot find space! \n") ;
exit (0) ;
(1) ;
printf("Please input the %d man’s name: ";i+1) ;
scanf("%s", s->name) ;
(2) ;
(3) ;
p=s ;
(4) ;
(5) ;
return (h) ;
参考答案:p->rlink=h
解析: 双向链表有两条方向不同的链,即每个结点中除next域存放后继结点地址外,还增加一个指向其直接前驱的指针域prioro这样在查找过程中,当指针处在中间某个结点时不仅可以像单链表那样向后查找,而且可以返回之前找过的结点。本题考察双向链表的构造,程序中首先构造了一个头结点,并将头结点的左右指针都设为空; 然后构造新的结点,让头结点的右指针指向该结点,即空(1)填p->rlink=s,该结点的左指针指向头结点,即空(2)填s->llink=p,以此类推,最后将头结点的左指针指向最后一个结点,最后一个结点的右指针指向头结点,形成一个环,即空(4)和空(5)分别填入h->llink=s和p->rlink=h。