序填空复习题_精品文档_精品文档Word格式文档下载.doc
《序填空复习题_精品文档_精品文档Word格式文档下载.doc》由会员分享,可在线阅读,更多相关《序填空复习题_精品文档_精品文档Word格式文档下载.doc(13页珍藏版)》请在冰豆网上搜索。
![序填空复习题_精品文档_精品文档Word格式文档下载.doc](https://file1.bdocx.com/fileroot1/2022-10/9/a6746880-d7da-41a1-a741-197d64cf611b/a6746880-d7da-41a1-a741-197d64cf611b1.gif)
/*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
2.以下函数在head为头指针的具有头结点的单向链表中删除第i个结点,
structnode
{intdata;
structnode*next;
};
typedefstructnodeNODE
intdelete(NODE*head,inti)
{
NODE*p,*q;
intj;
q=head;
j=0;
while((q!
=NULL)&
&
(___
(1)_____))
___
(2)_____;
j++;
if(q==NULL)
return(0);
p=___(3)_____;
___(4)_____=p->
next;
free(___(5)_____);
return
(1);
(1)j<
i-1
(2)q=q->
(3)q->
(4)q->
(5)p
3.将新元素插入到线性表中的第i位,MAX是数组的个数,a[0]用以存放线性表长度,b存放待插入的元素值,i存放插入的位置,n存放线性表长度
inta[MAX];
inti,j,b,n;
scanf(“%d%d%d”,&
b,&
i,&
n);
for(j=1;
j<
=n;
j++)
scanf(“%d”,&
a[j]);
a[0]=n;
for(j=n;
(1);
j--)
(2);
(3);
(4);
=a[0];
printf(“%5d\n”,a[j]);
(1)j>
=i
(2)a[j+1]=a[j]
(3)a[i]=b
(4)a[0]=n+1
4.用头插法建立带头结点且有n个结点的单向链表的算法
NODE*create(n)
NODE*head,*p,*q;
inti
p=(NODE*)malloc(sizeof(NODE));
(1);
(2);
(3);
for(i=1;
i<
i++)
{
p=(NODE*)malloc(sizeof(NODE));
p->
data=i;
if(i==1)
(4);
else
{
(5);
(6);
}
}
return(head);
(1)head=p
(2)p->
(3)q=p
(4)p->
(5)p->
next=q->
(6)q->
next=p
一、栈
1.以下函数为链栈的进栈操作,x是要进栈的结点的数据域,top为栈顶指针
structnode
{ElemTypedata;
structnode*top;
voidPush(ElemTypex)
{
structnode*p;
p=(structnode*)malloc(___
(1)_____);
p->
data=x;
___
(2)_____;
}
(1)sizeof(structnode)
next=top
(3)top=p
二、队列
1.以下函数为链队列的入队操作,x为要入队的结点的数据域的值,front、rear分别是链队列的队头、队尾指针
structnode*front,*rear;
voidInQueue(ElemTypex)
{
structnode*p;
p=(structnode*)___
(1)_____;
p->
p->
next=NULL;
___
(2)_____;
rear=___(3)_____;
}
(1)malloc(sizeof(structnode))
(2)rear->
(3)p
2.以下函数为链队列的出队操作(链队列带有头结点),出队结点的数据域的值由x返回,front、rear分别是链队列的队头、队尾指针
ElemTypeOutQueue()
{
ElemTypex;
if(___
(1)_____){
printf("
队列下溢错误!
\n"
);
exit
(1);
}
else{
structnode*p=front->
x=p->
data;
front->
next=___
(2)_____;
if(p->
next==NULL)rear=front;
free(p);
___(3)_____;
}
(1)front==rear
(3)return(x)
三、树
1.以下程序是先序遍历二叉树的递归算法的程序,完成程序中空格部分(树结构中左、右指针域分别为left和right,数据域data为字符型,BT指向根结点)。
voidPreorder(structBTreeNode*BT)
{if(BT!
=NULL){
(1);
(2);
(3);
}
(1)printf(“%c”,BT->
data)
(2)Preorder(BT->
left)
(3)Preorder(BT->
right)
2.以下程序是中序遍历二叉树的递归算法的程序,完成程序中空格部分(树结构中左、右指针域分别为left和right,数据域data为字符型,BT指向根结点)。
voidInorder(structBTreeNode*BT)
(1);
(2);
(3);
(1)Inorder(BT->
(2)printf(“%c”,BT->
(3)Inorder(BT->
3以下程序是后序遍历二叉树的递归算法的程序,完成程序中空格部分(树结构中左、右指针域分别为left和right,数据域data为字符型,BT指向根结点)。
voidPostorder(structBTreeNode*BT)
(1)Postorder(BT->
(2)Postorder(BT->
(3)printf(“%c”,BT->
data);
四、图
五、排序
1.以下冒泡法程序对存放在a[1],a[2],……,a[n]中的序列进行排序,完成程序中的空格部分,其中n是元素个数,要求按升序排列。
voidbsort(NODEa[],intn)
{NODEtemp;
inti,j,flag;
for(j=1;
(1);
j++);
{flag=0;
for(i=1;
(2);
if(a[i].key>
a[i+1].key)
{flag=1;
temp=a[i];
(3);
(4);
if(flag==0)break;
}
程序中flag的功能是(5)