电大数据结构程序题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

电大数据结构程序题 Last updated on the afternoon of January 3, 2021

1.以下函数为直接选择排序算法,对a[1],a[2],…a[n]中的记录进行直接选择排序,完成程序中的空格typedefstruct

{intkey;

……

}NODE;

voidselsort(NODEa[],intn)

{

inti,j,k;

NODEtemp;

for(i=1;i<=___(1)_____;i++)

{

k=i;

for(j=i+1;j<=___(2)_____;j++)

if(a[j].key

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;

inti;

p=(NODE*)malloc(sizeof(NODE));

head=(1);(2);pnext=NULL;/*建立头结点*/

for(i=1;i<=n;i++)

{p=(3);

pdata=i;

pnext=NULL;

qnext=(4);

(5);

}

return(head);

答案:(1)p(2)q=p(3)(NODE*)malloc(sizeof(NODE))(4)p(5)q=p

设有一个头指针为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指向根结点)。

dInorder(structBTreeNode*BT)

(BT!=NULL){

(1);(2);(3);}}

(1)Inorder(BT->left)(2)printf(“%c”,BT->data)(3)Inorder(BT->right)

.以下程序是后序遍历二叉树的递归算法的程序,完成程序中空格部分(树结构中,左、右指针域分别为left和

ht,数据域data为字符型,BT指向根结点)。

dPostorder(structBTreeNode*BT)

(BT!=NULL){

1);(2);(3);}}

案:(1)Postorder(BT->left)(2)Postorder(BT->right)(3)printf(“%c”,BT->data)

1.以下函数是二叉排序树的查找算法,若二叉树为空,则返回根结点的指针,否则,返回值是指向树结点的结构指针p(查找成功p指向查到的树结点,不成功p指向为NULL)完成程序中的空格

typedefstructBnode

{intkey;

structBnode*left;

structBnode*right;

}Bnode;

Bnode*BSearch(Bnode*bt,intk)

/*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

设有一个头指针为head的不带头结点单向链表,p、q是指向链表中结点类型的指针变量,p指向链表中结点a,(设链表中没有结点的数据域与结点a的数据域相同),写出相关语句

使该单向链表成为单向循环链表

插入结点s,使它成为a结点的直接前驱

;x=p->data;

le(__(1)___)q=q->next;

next=head;

p;p=p->next;

hile(p->data!=x)

=p;

(2)___

>next=p;

(3)___

案:(1)q->next!=NULL(2)p=p->next;(3)q->next=s;

.设线性表为(6,10,16,4),以下程序用说明结构变量的方法建立单向链表,并输出链表中各结点中的数据。

defineNULL0

oidmain()

NODEa,b,c,d,*head,*p;

6;

10;

16;

4;/*d是尾结点*/

ead=(1);

&b;

&c;

&d;

(2);/*以上结束建表过程*/

=head;/*p为工作指针,准备输出链表*/

o{printf(“%d\n”,(3));

(4);

while((5));

答案:(1)&a(2)d?next=NULL(3)p->data(4)p=p->next(5)p!=NULL

1.以下程序是折半插入排序的算法=设待排序的记录序列存放在a[1],…a[n]中,以a[0]作为辅助工作单元,以下程序是要把a[i]插入到已经有序的序列a[1],…a[i-1]中。

voidbinsort(NODEa[],intn)

{intx,i,j,s,k,m;

or(i=2;i<=__(1)___;i++)

{a[0]=a[i];

x=a[i].key;

s=1;

=i-1;

while(s<=j)

{m=__(2)___

f(x

__(3)___

else

__(4)___

}

or(k=i-1;k>=j+1;k--)

相关文档
最新文档