if(i!=k)
{
temp=a[i];
___(4)_____;
____(5)____;
答案:(1)n-1 (2)n (3)k=j (4)a[i]=a[k] (5)a[k]=temp
2.以下是用尾插法建立带头结点且有n个结点的单向链表的程序,结点中的数据域从前向后依次为1,2,3,……,n,完成程序中空格部分。
NODE *create(n)
{NODE *head , *p, *q;
int i;
p=(NODE*)malloc(sizeof(NODE));
head= (1); (2);p→next=NULL; /*建立头结点*/
for(i=1; i<=n; i++)
{ p= (3);
p→data=i;
p→next=NULL;
q→next= (4);
(5);
}
return(head);
答案:(1)p (2)q=p (3)(NODE*)malloc(sizeof(NODE)) (4)p (5)q=p
3 .设有一个头指针为head的不带头结点单向链表, 且p、q是指向链表中结点类型的指针变量,p指向链表中某结点a(设链表中没有结点的数据域与结点a的数据域相同), 写出相关语句
(1).使该单向链表成为单向循环链表
(2) 删去a结点
q=p; x=p->data;
while (q->next!=NULL)q=q->next;
__(1)___
q=p; p=p->next;
while(p->data!=x)
{ q=p;
__(2)___
}
__(3)___
(1)q->next=head;(2)p=p->next;(3)q->next=p->next;
4.以下程序是中序遍历二叉树的递归算法的程序,完成程序中空格部分(树结构中左、右指针域分别为left和right,数据域data为字符型,BT指向根结点)。
void Inorder (struct BTreeNode *BT)
{ if(BT!=NULL){
(1);(2); (3);}}
(1)Inorder(BT->left)(2)printf(“%c”,BT->data)(3) Inorder(BT->right)
3.以下程序是后序遍历二叉树的递归算法的程序,完成程序中空格部分(树结构中,左、右指针域分别为left和right,数据域data为字符型,BT指向根结点)。
void Postorder (struct BTreeNode *BT)
{ if(BT!=NULL){
(1); (2); (3);}}
答案:(1)Postorder(BT->left)(2)Postorder(BT->right)(3)printf(“%c”,BT->data)
1.以下函数是二叉排序树的查找算法,若二叉树为空,则返回根结点的指针,否则,返回值是指向树结点的结构指针p(查找成功p指向查到的树结点,不成功p指向为NULL)完成程序中的空格
typedef struct Bnode
{ int key;
struct Bnode *left;
struct Bnode *right;
} Bnode;
Bnode *BSearch(Bnode *bt, int k)
/* bt用于接收二叉排序树的根结点的指针,k用以接收要查找的关键字*/
{ Bnode *p;
if(bt== ___(1)_____)
return (bt);
p=bt;
while(p->key!= __(2)______)
{ if(kkey)
___(3)_____;
else ___(4)_____;
if(p==NULL) break;
}
return(___(5)_____);
答案:(1)NULL(2)k(3)p=p->left(4)p=p->right(5)p
3 .设有一个头指针为head的不带头结点单向链表,p、q是指向链表中结点类型的指针变量,p指向链表中结点a, (设链表中没有结点的数据域与结点a的数据域相同),写出相关语句
(1).使该单向链表成为单向循环链表
(2)插入结点s,使它成为a结点的直接前驱
q=p; x=p->data;
while (__(1)___ )q=q->next;
q->next=head;
q=p; p=p->next;
while(p->data!=x)
{ q=p;
__(2)___
}
s->next=p;
__(3)___
答案:(1) q->next!=NULL (2) p=p->next; (3)q->next=s;
2.设线性表为(6,10,16,4),以下程序用说明结构变量的方法建立单向链表,并输出链表中各结点中
的数据。
#define NULL 0
void main( )
{NODE a,b,c,d,*head,*p;
a.data=6;
b.data=10;
c.data=16;
d.data=4; /*d是尾结点*/
head= (1);
a.next=&b;
b.next=&c;
c.next=&d;
(2); /*以上结束建表过程*/
p=head; /*p为工作指针,准备输出链表*/
do {printf(“%d\n”, (3));
(4);
}while( (5));
答案:(1)&a(2)d next=NULL(3)p->data(4)p=p->next(5)p!=NULL