电子科技大学软件技术基础 查找和排序
软件技术基础复习要点__电子科技大学
《软件技术基础》课程复习要点第一章数据结构第一节数据结构的基本概念1、数据结构的定义,识记计算机系统中数据的组织形式及其相互关系2、术语:数据、数据元素、数据项,识记3、数据结构三个层次:逻辑结构、存储结构、算法(数据的操作集合),识记4、数据结构三个层次之间的关系,领会5、类C语言风格的算法描述方法,简单应用6、运用数据结构方法,抽象描述物理对象,简单应用7、存储结构的四种类型,识记顺序(经常进行查找运算)链接(经常进行插入删除的话选这个)索引散列第二节线性结构1、线性表的定义和特点,识记2、顺序表的结构声明,识记3、顺序表的插入、删除算法,领会和熟练应用4、单向链表的结构声明、特点,识记5、单向链表的创建、插入、删除、查找算法,领会和熟练应用6、双向链表的结构及插入和删除算法,识记7、循环链表的结构特点,领会8、利用顺序表和链表解决简单问题,综合应用9、栈的定义、特点,顺序栈、链栈的入栈和出栈算法,识记10、利用栈的特点解决简单问题,综合应用11、队列的定义、特点,循环队列的特点,识记12、利用队列的特点解决简单问题,综合应用13、二维矩阵数据元素的位置计算,简单应用14、二维矩阵的压缩方法,特别是三元组方法,领会15、串的特点和串的存储结构,了解第三节非线性结构1、树结构的定义,识记2、树的相关术语:节点、度、深度、有序树、无序树、森林等,识记3、二叉树的定义和结构声明,识记4、二叉树记7、二叉树的遍历算法,领会和简单应用8、二叉排序树的创建,领会和简单应用8、树、森林和二叉树的转换,领会9、图的定义和相关术语,识记10、利用邻接矩阵存储图,识记和简单应用11、利用邻接表存储图,识记和简单应用12、图的深度优先和广度优先遍历算法,领会(能根据图写出遍历顺序)第四节查找和排序排序:简单排序法简单插入排序(从无序表中取插入到有序表中)简单选择排序(从无序表选择最大或最小的元素交换到有序表的另一端)冒泡排序快速排序(出现逆序就交换位置)归并排序(合二为一)1、顺序查找算法,识记,平均查找长度的计算,领会2、二分查找的特点和算法,识记和简单应用(顺序储存,排列有序)3、分块查找的特点,了解块内无序块间有序4、二叉排序树的查找算法和特点,领会和简单应用5、哈希查找的特点及线性探测再散列、二次探测再散列方法,领会和简单应用(不需要进行关键字值比较)6、排序的基本概念,排序算法的稳定性,识记7、简单插入算法、简单选择算法,识记8、冒泡排序算法,领会9、快速排序算法,领会(出现逆序就交换位置)(不稳定的)10、归并排序算法,了解第二章操作系统第一节操作系统概述1、操作系统的定义,识记操作系统由硬件软件两部分组成,是计算机最重要的系统软件,在计算机系统中占据了特殊重要的地位。
软件技术基础_顺序表
上机实验一:顺序表(4学时)
ex1_1: 1)首先创建一个顺序表:从键盘读入一组整数(长度 小于11),按输入顺序放入顺序表,输入以-1结束 (注意-1不放到顺序表内);将创建好的顺序表元素 依次输出到屏幕上。 2)在已创建好的顺序表中插入一个元素:从键盘读入 需插入的元素值和插入位置,调用插入函数完成插入 操作;然后将顺序表元素依次输出到屏幕上。 3)在已创建好的顺序表中删除一个元素:从键盘读入 欲删除的元素位置(序号),调用删除函数完成删除 操作;然后将顺序表元素依次输出到屏幕上。 4)删除顺序表中元素值为负数的所有元素,然后将顺 序表元素依次输出到屏幕上。
while( ia<la->num ){ lm->data[im]=la->data[ia]; ia++; im++; } while( ib<lb->num ){ lm->data[im]=lb->data[ib]; ib++; im++; } lm->num=la->num+lb->num; }
(3)取元素:给定元素序号i,若1≤i≤num,则函数返 回表中第i个数据元素ai的地址,否则返回NULL elemtype* get_elem_list (list_type *L, int i) { if( L->num==0 ) return(NULL); if((i >=1)&&(i <= L->num)) return(&(L->data[i-1])); else return (NULL); }
(6)删除:删除表中第i个数据元素
●算法分析: 删除第i个元素
第7章 排序 电子科大 数据结构 课件
例
i=8 20 (6 s i=8 20 (6 s i=8 20 (6
i=8 20 (6
i=8 20 (6
2014年12月10日8时35分
…...
(6
42 70 85 ) 20 42 70 85 ) 20 j 42 70 85 ) 20 42 70 85 ) 20
42 70 85 ) 20
42 70 85 )
16 25 12 30 47 11 23 36 9 18 31 第一趟希尔排序,设增量 d =5 11 23 12 9 18 16 25 36 30 47 31 第二趟希尔排序,设增量 d = 3 9 18 12 11 23 16 25 31 30 47 36 第三趟希尔排序,设增量 d = 1 9 11 12 16 18 23 25 30 31 36 47
high
13
void Binary_Insert_Sort(DataType R[], int n){ for(i=2; i<=n; ++i){ // 从第二个位置处的记录开始排序 R[0]=R[i]; //R[0]为监视哨,保存待插入的元素 low=1; high=i-1; //插入位置的初始区间 while(low<=high){ //while循环确定插入位置 mid=(low+high)/2; if(R[0].key>R[mid].key) low=mid+1; //插入位置在前半部份 else high=mid-1; //插入位置在后半部分 } for(j=i-1; j>=high+1; j--) //向后移动数据 R[j+1]=R[j]; R[high+1]=R[0]; //将记录插入到正确位置 } }
电子科技大学软件技术基础实验报告5
电子科技大学通信与信息工程学院标准实验报告(实验)课程名称软件技术基础实验电子科技大学教务处制表电子科技大学实验报告一、实验室名称:校公共机房二、实验项目名称:查找与排序三、实验学时:4学时四、实验原理:使用VS2010等C语言集成开发环境(IDE),在微型计算机上对程序进行编辑、编译、连接与运行。
通过上机练习掌握顺序查找、二分查找函数、简单选择法、直接插入法、冒泡法排序、快速排序等方法、过程和实际应用。
五、实验目的:1.熟练掌握顺序查找、二分查找函数、简单选择法、直接插入法、冒泡法排序、快速排序等算法方法并实现。
2.掌握课程平台使用方法。
六、实验内容:ex5_1:查找设有序序列的数据元素为:(3,10,13,17,40,43,50,70)1)编写顺序查找函数2)编写二分查找函数3)在主程序中输入关键字(43和5),分别调用两种查找函数,输出结果。
//第一题#include <stdio.h>#define maxnum 20typedef struct{int data[maxnum];int length;}list_type;void create(list_type *l){l->length=8;l->data[0]=3;l->data[1]=10;l->data[2]=13;l->data[3]=17;l->data[4]=40;l->data[5]=43;l->data[6]=50;l->data[7]=70;}void shunxucz(list_type *l,int a1,int a2){int i,flag=0;printf("-----------------------------------------------\n");printf("顺序查找法:\n");for(i=0;i<l->length;i++){if(a1==l->data[i]){printf("%d是第%d个元素\n",a1,(i+1));flag=flag+1;} }if(flag==0) printf("表中没有大小为%d的元素\n",a1);flag=0;for(i=0;i<l->length;i++){if(a2==l->data[i]){printf("%d是第%d个元素\n",a2,(i+1));flag=flag+1;} }if(flag==0) printf("表中没有大小为%d的元素\n",a2);}void erfencz(list_type *l,int a1,int a2){printf("-----------------------------------------------\n");printf("二分查找法:\n");int low,h,m,flag=0,i;low=0;h=l->length-1;for(i=0;i<l->length;i++){m=(low+h)/2; //如果有小数就向小的数字取值9/2=4if(l->data[m]==a1){printf("%d是第%d个元素\n",a1,(m+1));flag=1;break;}else if(l->data[m]<22) low=m+1;else if(l->data[m]>22) h=m-1;}if(flag!=1)printf("表中没有大小为%d的元素\n",a1);flag=0;low=0;h=l->length-1;for(i=0;i<l->length;i++){m=(low+h)/2; //如果有小数就向小的数字取值9/2=4if(l->data[m]==a2){printf("%d是第%d个元素\n",a2,(m+1));flag=1;break;}else if(l->data[m]<22) low=m+1;else if(l->data[m]>22) h=m-1;}if(flag!=1)printf("表中没有大小为%d的元素\n",a2);}int main(){int flag1=43,flag2=5;list_type list,list1,list2;create(&list);create(&list1);create(&list2);shunxucz(&list1,flag1,flag2);erfencz(&list1,flag1,flag2);printf("-----------------------------------------------\n");}ex5_2:排序1)编写简单选择法函数2)编写直接插入法函数3)编写冒泡法排序函数4)编写快速排序函数5)在主程序中输入一组数据元素(513,87,512,61,908,170,897,275,653,462),分别调用4种排序函数,输出每趟排序结果。
电子科技大学 软件技术基础试题带答案
一、填空题(共20分,共 10题,每空1分)1.若经常需要对线性表进行插入和删除运算,则最好采用_ 链式 _存储结构,若经常需要对线性表进行查找运算,则最好采用_ 顺序 ___存储结构。
2.在操作过程中会出现“假溢出”现象的是 顺序队列 结构,解决此问题的方法是 采用循环对列 。
3.已知一棵二叉树的顺序存储结构为 则元素G 的父结点是 D 。
4. 假定一个有向图的顶点的集合为{1,2,3,4,5,6},边的集合为{<1,2>,<1,3>,<2,5>,<3,2>,<3,4>,<4,6>,<5,1>,<5,6>},则出度为2的顶点个数为 3 ,入度为1的顶点个数为 4 。
5.二分查找算法适用于 顺序存储的 数据结构,且数据的组织应该 按查找的关键字有序 。
6. 虚拟存储方式分为: 分页存储 、 分段存储 、 段页存储 。
7. 用户通过操作系统提供的 命令接口、 系统调用、 图形用户接口来使用计算机。
8. 文件的物理结构分为: 连续 、 链接 、 索引 。
9. 因特网是由许多 大小 不同、类型 不同的网络互连而成。
10. 有表score (stuid ,name,engish ),写出查询姓名和英语成绩的查询语句 Select name,English from score 11. 主建 二、选择题(共30分,共 30题,每题1分)1.线性表若采用链式存储结构时,要求内存中可用存储单元的地址( D ) A . 必须是连续的 B . 部分地址必须是连续的 C . 一定是不连续的 D . 连续或不连续都可以 2.下面哪个结构不是线性结构( B )。
A . 队列B . 图C 线性表D . 栈3.一个下图所示的双链表,定义P为指针变量,则P->next->next->.prior 和P->prior->next指向的数据域的值分别是(B)A.80和20 B. 64和47 C. 64和20 D. 80和474.在一个无向图中,所有顶点的度数之和等于所有边数(C)倍。
电子科技大学22春“通信工程”《软件技术基础》期末考试高频考点版(带答案)试卷号2
电子科技大学22春“通信工程”《软件技术基础》期末考试高频考点版(带答案)一.综合考核(共50题)1.下面属于C语言的基本类型的是()。
A.3.3B.3C.‘3’D.“33”参考答案:ABC2.按操作系统的使用环境和对作业的处理方式来分,操作系统的的基本类型有()。
A.网络操作系统B.批处理操作系统C.实时操作系统D.分布式操作系统参考答案:ABCD3.段页式管理只会使软件开销增加,不会是硬件开销增加。
()A、错误B、正确参考答案:A4.数据类型是某种程序设计语言中已实现的数据结构。
()A.正确B.错误参考答案:A顺序查找在等概率情况下其平均查找长度为(N+1)/2。
()A、错误B、正确参考答案:B6.作业调度是确定哪些作业有资格调入内存。
()A、错误B、正确参考答案:B7.C语言的基本数据类型不包括()A、doubleB、intC、floatD、char参考答案:A8.顺序查找在等概率情况下其平均查找长度为(N+1)/2。
()A.正确B.错误参考答案:A9.内存分配常采用的策略有()。
A.首次适用算法B.最坏适用算法C.最佳适用算法D.中等适用算法参考答案:ABC数据结构的三层次是()。
A.非线性结构B.数据的逻辑结构C.数据的操作集合D.数据的存储结构参考答案:BCD11.可以采取下列哪些预防措施防止死锁的产生?()A.采用资源静态分配策略,破坏部分分配条件B.采用资源有序分配法,破坏环路条件C.采用虚拟设备共享法D.允许进程剥夺使用其他进程占有的资源,从而破坏不可剥夺条件参考答案:C12.数据在计算机内在中的表示是指数据的存储结构。
()A.正确B.错误参考答案:A13.查找是依据元素的关键字,在结构中找寻元素的方法。
()A、错误B、正确参考答案:B14.通道技术和DMA相比可以显著提高CPU和设备的利用率。
()A.正确B.错误15.下面属于C语言的基本类型的是()。
A.3.3B.3C.'3'D."33"参考答案:ABC16.评估进程调度算法的优劣主要从以下哪几方面进行()。
电子科技大学22春“通信工程”《软件技术基础》作业考核题库高频考点版(参考答案)试题号1
电子科技大学22春“通信工程”《软件技术基础》作业考核题库高频考点版(参考答案)一.综合考核(共50题)1.栈和队列不是线性表。
()A、错误B、正确参考答案:A2.已知某二叉树的前序序列是ABDC,中序序列是DBAC,问它的后序序列是()。
A、虚拟存储B、地址变换与重定位C、内存分配与回收D、进程调度参考答案:D3.虚拟存储技术不能提高内存空间。
()A、错误B、正确参考答案:A4.源程序经过编译后,可得到一组目标模块,用链接程序将这组目标模块链接形成装入模块的方法有:()。
A.静态链接方式B.装入时动态链接C.运行时动态链接D.可重定位装入方式E.绝对装入方式参考答案:ABC5.常用的页面淘汰算法有()。
A、FIFOB、LRUC、LFUD、LLU参考答案:ABC6.进程是由程序块、文件控制块和数据块三部分组成。
()A.正确B.错误参考答案:B7.查找是依据元素的关键字,在结构中找寻元素的方法。
()A、错误B、正确参考答案:B8.存储器的管理不能完成下述()功能。
A.进程调度B.虚拟存储C.地址变换与重定位D.内存分配与回收参考答案:A9.设栈的输入序列为1,2,…,10,输出序列为a1,a2,…,a10,若a5=10,则a7为()。
A.4B.8C.不确定参考答案:C10.在等概率情况下,二分查找的平均查找长度为Nlog2N-1。
()A.正确B.错误参考答案:A11.覆盖和交换两种存储交换技术的实质是对内存进行逻辑扩充。
()A.正确B.错误参考答案:A12.C语言的基本数据类型不包括()。
A.intB.floatC.doubleD.char参考答案:C13.若用单链表表示队列,则应该选用()。
A.带尾指针的非循环链表B.带尾指针的循环链表C.带头指针的非循环链表D.带头指针的循环链表参考答案:B14.A、进入状态B、后备状态C、运行状态D、完成状态参考答案:ABCD15.可以采取下列哪些预防措施防止死锁的产生?()A.采用资源静态分配策略,破坏部分分配条件B.采用资源有序分配法,破坏环路条件C.采用虚拟设备共享法D.允许进程剥夺使用其他进程占有的资源,从而破坏不可剥夺条件参考答案:C16.图的遍历有()。
电子科技大学22春“通信工程”《软件技术基础》作业考核题库高频考点版(参考答案)试题号4
电子科技大学22春“通信工程”《软件技术基础》作业考核题库高频考点版(参考答案)一.综合考核(共50题)1.数据结构的三层次是()。
A、数据的逻辑结构B、数据的存储结构C、数据的操作集合D、非线性结构参考答案:ABC2.双链表的基本节点一般由以下拿几部分组成()。
A、头指针B、数据C、尾指针D、头节点参考答案:ABC3.交互性是分时操作系统的主要特征。
()A、错误B、正确参考答案:B4.如果通过软件测试没有发现错误,则说明软件是完全正确的。
()A.正确B.错误参考答案:B5.栈和队列不是线性表。
()A.正确B.错误参考答案:B6.数据的逻辑结构包括()。
A.非线性结构B.线性结构C.算数结构D.几何结构参考答案:AB7.存储管理的目的是()。
A、方便用户B、提高内存利用率C、方便用户和提高内存利用率D、增加内存实际容量参考答案:D8.对作业调度算法的选择要考虑三个目标是()。
A.尽量提高系统的作业吞吐量,即每天处理尽可能多的作业B.尽量使CPU和外部设备保持忙碌状态,以提高资源利用率C.对各种作业公平合理,使用有用户都满意D.减少作业运行次数参考答案:ABC9.虚拟存储技术不能提高内存空间。
()A、错误B、正确参考答案:A10.插入排序、选择排序、冒泡排序是最常用的三种排序算法。
()A、错误B、正确参考答案:B11.分时系统中作业的控制有哪些()。
A、命令驱动方式B、菜单驱动方式C、窗口环境D、脱机控制参考答案:ABC12.下面属于C语言的基本类型的是()。
A、3B、'3'C、"33"D、3.3参考答案:ABD13.按照工作特性,可把外设分为外部设备和存储设备。
()A.正确B.错误参考答案:A14.操作系统是计算机系统中直接控制和管理各种软硬件资源,以方便用户充分而有效地利用这些资源的程序的集合。
()A.正确B.错误参考答案:A15.若需在O(nlogn)的时间内完成对数组的排序,且要求排序是稳定的,则可选择的排序方法是()。
电子科技大学22春“通信工程”《软件技术基础》作业考核题库高频考点版(参考答案)试题号2
电子科技大学22春“通信工程”《软件技术基础》作业考核题库高频考点版(参考答案)一.综合考核(共50题)1.进程控制模块简写为PCB。
()A、错误B、正确参考答案:B2.交互性是分时操作系统的主要特征。
()A.正确B.错误参考答案:A3.下列哪个不是线性结构()。
A、链表B、队列C、串D、树参考答案:D4.进程之间的两种基本关系()。
A.异步B.并发C.同步D.互斥参考答案:CD作业调度是确定哪些作业有资格调入内存。
()A.正确B.错误参考答案:A6.C语言的基本数据类型不包括()。
A.intB.floatC.doubleD.char参考答案:C7.存储管理的内容包括()。
A、内存的分配和释放B、虚拟存储管理技术C、地址变换D、内存保护与共享参考答案:ABCD8.从静态观点,作业有控制命令序列、程序集及数据集三部分构成。
()A、错误B、正确参考答案:B9.分区存储的基本思想是把内存划分成若干大小不等的连续区域。
()A、错误B、正确参考答案:B10.面向用户来衡量系统的调度性能主要的准则有()。
A.作业的周转时间B.作业的输入/输出时C.作业的等待时间D.作业的响应时间E.作业带权周转时间参考答案:ADE11.通道技术和DMA相比可以显著提高CPU和设备的利用率。
()A.正确B.错误参考答案:A12.在下述排序算法中,所需辅助存储空间最多的是(),所需辅助存储空间最小的是(),平均速度最快的是()。
A.快速排序B.归并排序C.堆排序D.选择排序E.插入排序参考答案:ABC13.虚拟存储技术不能提高内存空间。
()A.正确B.错误参考答案:B14.B、正确参考答案:B15.若用单链表表示队列,则应该选用()。
A.带尾指针的非循环链表B.带尾指针的循环链表C.带头指针的非循环链表D.带头指针的循环链表参考答案:B16.软件测试不是为了证明软件的正确性,而是立足于软件有错误而进行的。
()A.正确B.错误参考答案:A17.按照工作特性,可把外设分为外部设备和存储设备。
电子科技大学22春“通信工程”《软件技术基础》期末考试高频考点版(带答案)试卷号5
电子科技大学22春“通信工程”《软件技术基础》期末考试高频考点版(带答案)一.综合考核(共50题)1.下列选项中,属于多道程序带来的好处是()。
A.解决文件同名。
B.提高I/O设备利用率。
C.增加系统吞吐率。
D.提高内存利用率。
E.提高CPU的利用率。
参考答案:BCDE2.线性表的链式存储结构与顺序存储结构相比优点是()。
A.所有的操作算法实现简单B.便于随机存取C.便于插入和删除D.便于利用零散的存储器空间E.节约存储单元参考答案:CD3.适用于飞行器及火炮发射的操作系统为()。
A.网络操作系统B.批处理操作系统C.实时操作系统D.分布式操作系统参考答案:A4.存储管理就是指内存的分配和释放。
()A、错误B、正确5.双链表的基本节点一般由以下哪几部分组成?()A.数据B.尾指针C.头节点D.头指针参考答案:ABD6.下列哪些操作系统()。
A.WINDOWSB.UNIXC.OFFICED.DOS参考答案:ABD7.可作为页面大小的只有()。
A、100BB、200BC、300BD、512B参考答案:D8.顺序查找在等概率情况下其平均查找长度为(N+1)/2。
()A、错误B、正确参考答案:BA.采用资源静态分配策略,破坏“部分分配”条件B.采用资源有序分配法,破坏“环路”条件C.采用虚拟设备共享法D.允许进程剥夺使用其他进程占有的资源,从而破坏“不可剥夺”条件参考答案:C10.在计算机系统中,操作系统是()。
A、处于裸机之上的第一层软件B、处于硬件之下的低层软件C、处于应用软件之上的系统软件D、处于系统软件之上的用户软件参考答案:A11.下面属于C语言的基本类型的是()。
A、3B、'3'C、"33"D、3.3参考答案:ABD12.存储管理的目的是()。
A.方便用户和提高内存利用率B.方便用户C.提高内存利用率D.增加内存实际容量参考答案:D13.交互性是分时操作系统的主要特征。
电子科技大学22春“通信工程”《软件技术基础》期末考试高频考点版(带答案)试卷号:1
电子科技大学22春“通信工程”《软件技术基础》期末考试高频考点版(带答案)一.综合考核(共50题)1.段的保护包括()。
A.静态保护B.存取控制保护C.地址越界保护D.动态保护参考答案:BC2.目前常用的高级通信方式有()。
A.管道通信B.直接通信C.消息缓冲通信D.信箱通信参考答案:ACD3.树结构中的元素都有直接前趋。
()A.正确B.错误参考答案:B4.物理I/O设备的控制方式有()。
A.循环测试(Cyclic Test)方式B.中断驱动(Interrupt-Driven)方式C.DMA控制(DMA Control)方式D.命令控制方式E.调度控制方式5.设备分配的原则是既要充分发挥设备的效率又要防止不合理的分配造成死锁。
()A、错误B、正确参考答案:B6.进程就是程序,程序就是进程。
()A.正确B.错误参考答案:B7.面向用户来衡量系统的调度性能主要的准则有()。
A.作业的周转时间B.作业的输入/输出时C.作业的等待时间D.作业的响应时间E.作业带权周转时间参考答案:ADE8.现代计算机系统由软件和硬件两大系统组成。
()A.正确B.错误参考答案:A9.段页式管理是先分段后分页。
()A、错误B、正确10.适用于飞行器及火炮发射的操作系统为()。
A、批处理操作系统B、实时操作系统C、网络操作系统D、分布式操作系统参考答案:C11.图的遍历有()。
A、广度优先搜索遍历B、深度优先搜索遍历C、前序遍历D、后序遍历参考答案:AB12.按操作系统的使用环境和对作业的处理方式来分,操作系统的基本类型有()。
A、批处理操作系统B、实时操作系统C、网络操作系统D、分布式操作系统参考答案:ABCD13.下列哪些操作系统?()A.WINDOWSB.UNIXC.OFFICED.DOS参考答案:ABD分区的保护措施主要有()。
A.界地址保护B.程序状态字保护C.用户权限表保护D.存取控制表保护E.存储保护键法参考答案:ABE15.在计算机系统中,控制和管理各种资源、有效地组织多道程序运行的系统软件称作()。
计算机软件技术基础 第6章 查找和排序
等概率情况下其平均查找长度为
ASL log 2 (n 1) 1
即 O(log2n)
动态查找技术
动态查找技术所依赖的查找表以树状结构居多,例如二 叉排序树、B+树、B-树等。 它们的共同特点是结构灵活, 易于实现插入、删除等操作。这里主要介绍简单易用的二 叉排序树
二叉排序树的定义
二叉排序树可能为一棵空的二叉树,若非空则必须满足 以下特征: (1)根结点左子树中所有结 点的关键字小于根结点的关 键字; (2)根结点右子树中所有结 点的关键字大于或等于根结 点的关键字; (3)根结点的左右子树也都 一棵二叉排序树 是二叉排序树。
二叉排序树动态查找算法C++语言描述如下:
BinNode* Search_ Insert (BinNodePtr &p, KeyType key) { BinNode *pre=NULL; // 循环查找过程 while(p!=NULL && p->x!=key ) { pre=p; // pre为结点p的父结点指针 if( key<p->x ) p=p->left; else p=p->right; } // 查找失败,插入新结点 ( 见下一页 )
排序基本概念Байду номын сангаас
排序是计算机内经常进行的一种操作,其目的是将一组同 类型的记录序列调整为按照元素关键字有序的记录序列。 例如将学生记录按学号排序,将课程记录按课程编码排序。 排序的形式化定义为:假设含n个记录的序列为{ R1,
R2,…,Rn },其相应的关键字序列为{ K1, K2,…, Kn }。现确定一种排列p1,…,pn,使其关键字满足递增 (或递减)关系Kp1≤Kp2≤…≤Kpn,使原序列成为一个 关键字有序的序列{ Rp1, Rp2, …,Rpn },此操作称作 排序。
【精品】电子科技大学软件技术基础1孟中楼
Data_Structure=(D, R)
元素有限集 关系有限集
SCIE, University of Electronic Science and Technology of China
9
1.1数据结构中的基本术语
元素集合
元素间的关系
运算
计 算 机 系 统
元素在计算机系统里的表示
字符?字串?整数?
SCIE, University of Electronic Science and Technology of China
Ki
Kj Ki的后继
14
1.3数据的存储结构
数据的存储结构(物理结构)
是数据元素在计算机系统存储器中的存放方式 也可以说,是数据逻辑结构在存储器中的存放方 式
存储器的特点:由地址连续的单元构成
20
1.3数据的存储结构
K1 K1 K2 K3
0300
0310
K2
K3
0320
0330 0340
K4
K5
K6
K4 K5 K6
逻辑结构
通过指针,可以方便地找到关系结点 指向后继结点的指针
0350
0370
0380
物理结构
21
SCIE, University of Electronic Science and Technology of China
16
1.3数据的存储结构
K1
0300
K1 0301
K2
K2 K3 K3 K4 K5 K4 K5 K6 K6
0302
0303 0304
0305
0306
逻辑结构
物理结构
0307 0308
计算机软件技术基础(邮电)1-8
∑
计算机软件技术基础 – 数据结构
7
7
二. 顺序表的查找 1.顺序查找 基本思想 从第一个元素开始, 从第一个元素开始,逐个把元素的关键 字值和给定值比较, 字值和给定值比较,若某个元素的关键字值 和给定值相等,则查找成功;否则, 和给定值相等,则查找成功;否则,若直至 个记录都不相等, 第 n 个记录都不相等 , 说明不存在满足条件 的数据元素,查找失败。 的数据元素,查找失败。 顺序查找的适用范围 顺序存储结构组织的查找表的查找 链式存储结构组织的查找表的查找
序号 数量 1 104 2 106 3 105 4 105 5 105 6 106
20
7 107
20
计算机软件技术基础 – 数据结构
2. 模函数 这是一种简单而较常用的函数, 这是一种简单而较常用的函数,它利 用了简单的除模取余运算, 用了简单的除模取余运算,即 H(k)= H(k)=k MOD m十c m十 其中m 都是整数, 决定存储单元数, 其中m和c都是整数,m决定存储单元数, c决定存储单元地址的范围。为了得到较 决定存储单元地址的范围。 均匀的地址分布, 应取为质数。 均匀的地址分布,m应取为质数。 101, 1000时 例: m=101,c=1000时,则存储单元数 101,存储地址范围为1000至1100。 为101,存储地址范围为1000至1100。当 关键字k 5000时 用这个哈希函数可将k 关键字k=5000时,用这个哈希函数可将k 转换为地址1051。 5049时 转换为地址1051。当k=5049时,可转换 21 为地址1100。 为地址1100。 计算机软件技术基础 – 数据结构 21
地址 04 78 78 78 …… 学号 990104 990178 990278 990378 要求使用均匀的哈希函数, 要求使用均匀的哈希函数,即映象后的地址是 19 计算机软件技术基础 – 数据结构 均匀分布的 19
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件技术基础上机实验报告罗子建2016010902012上机实验五5.1一、程序流程说明——有条理的文字或流程图*二、程序代码#include<stdio.h>#include<malloc.h>#include"stdafx.h"#define MAXNUM 20typedef struct{int data[MAXNUM];int length;}list_type;void createlist(list_type *lp){int i, elem;lp->length = 0;printf("\nplease input datas of the list\n");for (i = 0; i< MAXNUM; i++){scanf_s(" %d", &elem);if (elem == -1) break;lp->data[i] = elem;lp->length++;}}int sort(list_type *list,int key){int i;for (i = 0; i < list->length; ){if (list->data[i] != key){i++;}else{printf("成功查找\n");break;}}return i+1;}int binsearch(list_type *list, int key){int low = 0, mid, high = list->length - 1;while (low <= high){mid = (low + high) / 2;if (key < list->data[mid]){high = mid - 1;}else if (key> list->data[mid]){low = mid + 1;}else{return mid;}}}int main(){int m;int i;list_type list;createlist(&list);printf("请输入你想顺序查找的元素值:");scanf_s("%d", &m);i=sort(&list, m);printf("你所查找的元素位置为:%d",i);printf("请输入你想二分查找的元素值:");scanf_s("%d", &m);i = binsearch(&list, m);printf("你所查找的元素位置为:%d", i);}三、测试数据please input datas of the list310131740435070-1请输入你想顺序查找的元素值:43成功查找你所查找的元素位置为:6请输入你想二分查找的元素值:5你所查找的元素位置为:1请按任意键继续. . .四、上机时遇到的问题(可分为编译问题和逻辑问题)对于二分查找,我之前使用的mid 一直不能求解到最正确的位置,后来通过编译调试得到正确的答案。
五、实际运行结果:六、小结体会:对于顺序查找和二分查找的理解,我又有一定的进一步认识,对于二分查找的mid的定义,对于一串数字的奇偶性判断,一定要知道int 为求整类型。
一,程序流程说明——有条理的文字或流程图*二,程序代码#include"stdafx.h"#include<stdio.h>#include<string.h>int Hash(char * cp){int n, i;int sum = 0;n = strlen(cp);for (i = 0; i < n; i++) {sum += (int)*cp;cp++;}return(sum % 30);}int main(){char hash[30][20];for (int i = 0; i <30; i++){hash[i][0] = '?';}char temp[21];int x;printf("请输入姓名:");gets_s(temp, 20);printf("\n");while (temp[0] != '\0'){x = Hash(temp);while (hash[x][0] != '?'){x++;}if (x >= 30){printf("班级人数已满!\n");}else{strcpy_s(hash[x], temp);}printf("请输入姓名:");gets_s(temp, 20);printf("\n");}printf("请输入要查找的姓名:");gets_s(temp, 25);printf("\n");x = Hash(temp);while (hash[x] != NULL&&x<30){if (!strcmp(hash[x], temp)){printf("查找成功,序号为: %d", x);break;}x++;}if (x >= 30 || hash[x] == NULL){printf("查找失败!\n");}}三,测试数据请输入姓名:alalall请输入姓名:assa请输入姓名:asasas请输入姓名:s请输入姓名:as请输入姓名:aas请输入姓名:as请输入姓名:请输入要查找的姓名:sa查找成功,序号为: 2请按任意键继续. . .四、上机时遇到的问题(可分为编译问题和逻辑问题)在对于字符串的输出的时候,确实是需要对字符串的处理函数要清楚,比如就要添加string.h的库文件。
五、实际运行结果:六、小结体会:本题利用哈西查找,需要用到字符处理的一系列函数。
这次编写程序让我温习了C语言中字符处理的一些函数,string库函数中有复制strcpy函数、查找strchr函数、拼接strcat等函数,都是一些常用函数。
5.3一,程序流程说明——有条理的文字或流程图*二,程序代码#include<stdio.h>#include"malloc.h"#include"stdafx.h"#include<stdlib.h>#define MAXNUM 20typedef struct list{int length;int data[MAXNUM];}list_type;list_type select_sort(list_type *a){int head = 0;while(head<a->length){int j = head;int min = j;while (j < a->length){if (a->data[j] < a->data[min])min = j;j++;}int temp = a->data[head];a->data[head] = a->data[min];a->data[min] = temp;head++;}return *a;}list_type insert_sort(list_type *a){int tail = 1;int j;int temp;while (tail < a->length){temp = a->data[tail];j = tail - 1;while (j > -1){if (temp < a->data[j]){a->data[j + 1] = a->data[j];a->data[j] = temp;}else{a->data[j + 1] = temp;break;}j--;}tail++;}return *a;}list_type bubble_sort(list_type *a){int turn;int flag;int i;int temp;for (turn = a->length - 1; turn >1; turn--) {flag = 0;for (i = 0; i < turn - 1; i++)if (a->data[i]> a->data[i + 1]){temp = a->data[i];a->data[i]=a->data[i + 1];a->data[i + 1] = temp;flag = 1;}}if (flag == 0)printf("完成冒泡排序\n");return *a;}void show(list_type *a){int i=0;printf("排序后的结果为: \n");while(i<a->length){printf("%d ", a->data[i]);i++;}}list_type menu(list_type *list){int m;int k;int i;printf("输入n个数据");scanf_s("%d", &m);printf("n:%d\n",m);list->length =0;for (i = 0; i < m; i++){printf("第%d个元素为:", i+1);scanf_s("%d", &k);list->data[i] = k;list->length++;}return *list;}int main(){list_type list;list=menu(&list);printf("简单选择");select_sort(&list);show(&list);printf("\n直接插入");insert_sort(&list);show(&list);printf("\n冒泡排序\n");bubble_sort(&list);show(&list);}三,测试数据输入n个数据5n:5第1个元素为:12第2个元素为:56第3个元素为:78第4个元素为:1第5个元素为:0简单选择排序后的结果为:0 1 12 56 78直接插入排序后的结果为:0 1 12 56 78冒泡排序完成冒泡排序排序后的结果为:0 1 12 56 78 请按任意键继续. . .四、上机时遇到的问题(可分为编译问题和逻辑问题)逻辑问题:在编写冒泡排序的时候,我不能对未排序的部分有所区分,想起老师说的,可以设置标志变量flag;当有需要的时候,我就可以做相应的条件判断。