版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据结构程序填空复习题说明:本文档中涉及到的算法并非本书的全部,有些可根据此处的情况自行看书和作业题,黑色为综合练习上的题目,红色为我另增加的题,这些空的选择是根据我个人的经验来决定的并不能完全代表中央电大的出卷老师,因此一定不能有肯定就考这些题目的想法。不能放弃其他内容的复习,切记!一、线性表1.设线性表为(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是尾结点*
2、/head= (1) ;a.next=&b;b.next=&c;c.next=&d; (2) ; /*以上结束建表过程*/p=head; /*p为工作指针,准备输出链表*/do printf(“%dn”, (3) ); (4) ; while( (5) );答案:(1)&a(2)d×next=NULL(3)p->data(4)p=p->next(5)p!=NULL2. 以下函数在head为头指针的具有头结点的单向链表中删除第i个结点, struct node int data;struct node *next;typedef struct
3、 node NODE int delete(NODE *head,int i )NODE *p,*q; int j; 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->next(3)q->next(4)q->next(5)p3.将新元素插入到线性表中的第i位,MAX是数组的个数,a0用以存放线性表长度,b存放待插入的元素值,i存放
4、插入的位置,n存放线性表长度int aMAX;int i,j,b,n;scanf(“%d%d%d”,&b,&i,&n);for(j=1;j<=n;j+)scanf(“%d”,&aj);a0=n;for(j=n; (1) ;j- -) (2) ; (3) ; (4) ;for(j=1;j<=a0;j+)printf(“%5dn”,aj);答案:(1)j>=i(2)aj+1=aj(3)ai=b(4)a0=n+14.用头插法建立带头结点且有n个结点的单向链表的算法NODE *create(n)NODE *head,*p,*q;int ip=(NODE
5、 *)malloc(sizeof(NODE); (1) ; (2) ; (3) ;for(i=1;i<=n;i+)p=(NODE *)malloc(sizeof(NODE);p->data=i;if(i=1) (4) ;else (5) ; (6) ;return(head);答案:(1)head=p(2)p->next=NULL(3)q=p(4)p->next=NULL(5)p->next=q->next(6)q->next=p一、 栈1. 以下函数为链栈的进栈操作,x是要进栈的结点的数据域,top为栈顶指针struct node ElemType
6、data;struct node *next;struct node *top ;void Push(ElemType x) struct node *p; p=(struct node*)malloc(_(1)_); p->data=x; _(2)_; 答案:(1)sizeof (struct node)(2)p->next=top(3)top=p二、 队列1. 以下函数为链队列的入队操作,x为要入队的结点的数据域的值,front、rear分别是链队列的队头、队尾指针struct node ElemType data;struct node *next;struct node *
7、front,*rear; void InQueue(ElemType x) struct node *p; p= (struct node*) _(1)_; p->data=x; p->next=NULL; _(2)_; rear= _(3)_; 答案:(1)malloc(sizeof (struct node)(2)rear->next=p(3)p2. 以下函数为链队列的出队操作(链队列带有头结点),出队结点的数据域的值由x返回,front、rear分别是链队列的队头、队尾指针struct node ElemType data;struct node *next;struc
8、t node *front,*rear; ElemType OutQueue() ElemType x; if(_(1)_) printf("队列下溢错误!n"); exit(1); else struct node *p=front->next; x=p->data; front->next= _(2)_; if(p->next=NULL) rear=front; free(p); _(3)_; 答案:(1)front= =rear(2)p->next(3)return(x)三、 树1.以下程序是先序遍历二叉树的递归算法的程序,完成程序中空格
9、部分(树结构中左、右指针域分别为left和right,数据域data为字符型,BT指向根结点)。void Preorder (struct BTreeNode *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指向根结点)。void Inorder (struct BTreeNod
10、e *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)Postord
11、er(BT->right)(3)printf(“%c”,BT->data);四、 图五、 排序1以下冒泡法程序对存放在a1,a2,an中的序列进行排序,完成程序中的空格部分,其中n是元素个数,要求按升序排列。void bsort (NODE a , int n) NODE temp; int i,j,flag; for(j=1; (1) ;j+); flag=0; for(i=1; (2) ;i+) if(ai.key>ai+1.key)flag=1; temp=ai; (3) ; (4) ;if(flag= =0)break; 程序中flag的功能是(5) 答案:(1)j&
12、lt;=n-1(2)i<=n-j(3)ai=ai+1(4)ai+1=temp(5)当某趟冒泡中没有出现交换则已排好序,结束循环2. 以下函数为直接选择排序算法,对a1,a2,an中的记录进行直接选择排序,完成程序中的空格typedef struct int key;NODE; void selsort(NODE a,int n)int i,j,k;NODE temp;for(i=1;i<= _(1)_;i+) k=i; for(j=i+1;j<= _(2)_;j+) if(aj.key<ak.key) _(3)_; if(i!=k) temp=ai;_(4)_;_(5)
13、_;答案:(1)n-1(2)n(3)k=j(4)ai=ak(5)ak=temp3.直接插入排序算法Void disort(NODE a,int n)int I,j;NODE temp;for(i=1;i<n;i+)temp=ai; (1) ;while(j>=0&&temp.key<aj.key) (2) ; (3) ; (4) ;答案:(1)j=i-1(2)aj+1=aj(3)j-(4)aj+1=temp4.快速排序void quicksort(NODE a,int start,int end)int iI,j;NODE mid;if(start>=e
14、nd)return; (1) ; (2) ;mid=ai;while( (3) )while(i<j)&&aj.key>mid.key) (4) ;if( (5) ;) (6) ; (7) ;while(i<j&&ai.key<=mid.key) (8) ;if(i<j) (9) ; (10) ;ai=mid; (11) ;答案:(1)i=start(2)j=end(3)i<j(4)j-也可能将此条语句写出,要填写其条件中的aj.key>mid.key(5)i<j(6)ai=aj(7)i+(8)i+也可能将此条语句
15、写出,要填写其条件中的ai.key<=mid.key(9)aj=ai(10)j-(11)quicksort(a,start,i-1)(12)quicksort(a,i+1,end)最后两句要填的概率会很高,要注意快速排序的考点很多,一般只会有三到四个空。5.直接选择排序void selsort(NODE a,int n)int i,j,k;NODE temp;for(i=1;i<=n-1;i+) (1) ;for(j= (2) ;j<=n;j+)if(aj.key<ak.key) (3) ;if( (4) ) (5) ; (6) ; (7) ;答案:(1)k=i(2)i
16、+1(3)k=j(4)i!=k(5)temp=ai(6)ai=ak(7)ak=temp前四句较为重要6.堆排序中的筛选算法void heapshift(NODE a,int I,int n)NODE temp;int j;temp=ai; (1) ;while(j<n)if(j+1<n&&aj.key>aj+1.key) (2) ;if(temp.key>aj.key) (3) ; (4) ; (5) ;elsebreak; (6) ;答案:(1)j=2*i(2)j+(3)ai=aj(4)i=j(5)j=2*i(6)ai=temp这是构建的小根堆,若是大
17、根堆,只要将if语句中的aj.key>aj+1.key改为<,再将第二个if语句中的>改为<即可7.堆排序void heapsort(NODE a,int n)int iNODE temp;for(i= (1) ;i>=1;i-) (2) ;for(i=n;i>1;i-)temp=a1; (3) ; (4) ; (5) ;答案:(1)n/2(2)heapshift(a,i,n)(3)a1=ai(4)ai=temp(5)heapshift(a,1,i-1)8.两个有序序列的归并void merge(NODE a,int s,int m,int n,NODE o
18、rder)int i=s,j=m+1,k=s;while( (1) )&&( (2) )if(ai.key<=aj.key) (3) ;else (4) ;if(i>m)while(j<=n) (5) ;ElseWhile(i<=m) (6) ;答案:(1)i<=m(2)j<=n(3)orderk+=ai+可保留此句,将其条件语句去掉(4)orderk+=aj+可保留此句,将其条件语句去掉(5)Orderk+=aj+可保留此句,将其条件语句去掉(6)orderk+=ai+可保留此句,将其条件语句去掉第(3)(4)空与第(5)(6)空有较直接的
19、关联,因此一般情况下若要求填(3)(4)就不会要求填(5)(6),若(5)(6)位要填也是填其条件句七、查找1. 以下函数在a0到an-1中,用折半查找算法查找关键字等于k的记录,查找成功返回该记录的下标,失败时返回-1,完成程序中的空格typedef struct int key;NODE;int Binary_Search(NODE a,int n, int k) int low,mid,high; low=0; high=n-1; while(_(1)_) mid=(low+high)/2; if(amid.key=k) return _(2)_; else if(_(3)_) low=mid+1; else _(4)_; _(5)_; 答案:(1)low<=high(2)mid(3)amid.key<k;(4)high=mid-1(5)return -1;此为折半查找的非递归算法2. 1. 以下函数在a0到an-1中,用折半查找的递归算法查找关键字等于k的记录,查找成功返回该记录的下标,失败时返回-1,完成程序中的空格int Binary_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 善良为话题的议论文作文800字6篇
- 篮球培训班协议书范文模板
- 消防车借用协议书范文范本
- 勾机二手买卖协议书范文范本
- 第一章蛋白质结构基础第三节
- 小学创建文明校园自查报告范文
- 智能化工程质量保障措施
- 2023-2024学年天津市重点中学高三下学期开学收心考试(3月)数学试题
- 2023-2024学年四川成都实验高级中学高考冲刺训练数学试题试卷
- 特教新视界-深化特殊教育赋能实践
- 乡村休闲旅游项目策划书
- 运动损伤的预防措施适当的热身和拉伸
- 小学教学设计案例分析
- 唾液腺肿瘤的外科手术治疗方法
- 2023年乒乓球二级裁判考试题库(含答案)
- 房车营地规划设施方案
- 胎儿四维报告
- 全国高中化学优质课《氧化还原反应》课件
- 水泥市场调研报告模板
- 水泵行业分析报告
- 物业满意度分析报告
评论
0/150
提交评论