一起合同网

导航栏 ×

数据结构教案

发布时间:2026-05-19

数据结构教案(精品10篇)。

▰ 数据结构教案 ▰

摘要:随着我国信息技术产业日渐成熟,物联网这一新一代信息技术关键技术日渐受到学界重视,基于此,本文就物联网与云计算、物联网数据挖掘需要解决的关键性问题展开分析,并对基于云计算的物联网数据挖掘、实验验证进行了详细论述,期望由此能够为相关业内人士带来必须启发。

随着提出的“数字地球”概念影响力不断扩大,物联网技术与我国民众生活之间的距离日渐拉近,越来越多的物联网应用也开始进入人们视野,各界对物联网的要求也在不断提升,而为了解决物联网领域正面临的数据挖掘难题,正是本文就云计算平台下物联网数据挖掘展开具体研究的原因所在。

物联网作为学界公认的下一代网络发展方向之一,其本身由无所不在的小型传感器设备组成,无论是与我们日常生命联系紧密的计算机与智能手机,还是大型网络的服务器、超级计算机群,均属于物联网的重要组成部分,这也是很多学者将物联网称作新科技革命的原因。在S.Haller等业界权威学者的展望中,其认为物联网技术在未来将实现物理对象无缝集成到信息网络之中并成为参与者,而这些“智能对象”在保护安全与保密的前提下,则能够在网络中找到任何问题的解决方法。对于物联网来说,其具备着全面感知、可靠传递、智能处理三方面特点,而结合现有技术获得基本信息、结合传感器网络和其他通信网络实现物体信息可靠传递、在云计算与模糊识别等技术支持下处理海量异构数据则属于物联网三方面特点的具体表现,由此可见电子元器件、数据处理中心、传输通道三方面能够视作典型物联网应用的组成。

云计算本质上属于一种基于互联网的新计算方式,其能够结合互联网异构、自治服务较好满足用户的计算需要,云计算中的“云”也能够被视作对IT底层基础设施的一种抽象概念。本文研究应用的Hodoop属于典型的云计算基础开发平台,其本质上属于一个分布式系统基础的架构,Hodoop在云计算领域的地位能够说近似于IT产业的Linux系统。Hodoop的核心为分布式文件系统HDFS和MapReduce,前者具备高容错性、高伸缩性等优点,这些就使得Hodoop的布置能够较为简单且低成本的构成分布式文件系统,而后者则具备保证分析和处理的高效性潜力,由此Hodoop即可简单进行数据的整合。总之,Hodoop这一云计算基础开发平台能够透过简单组织计算机资源实现分布式计算云平台搭建,并以此实现云计算相关功用。

简单了解物联网与云计算后,物联网数据挖掘需要解决的关键性问题也应引起人们关注,那里的关键性问题主要由以下几方面构成:

属于较为传统的数据挖掘模式,但是物联网数据不同存储地点的特性则使得该模式的效用无从发挥。

物联网本身具备着数据规模、传感器节点庞大的特点,而为了同时满足其实时处理需求,高性能的中央节点硬件要求务必得到满足。

在有限的节点资源影响下,分布式节点务必负责原始数据的预处理与传递。

由于数据安全性、数据保密、法律约束等因素的影响,物联网不能够将所有数据统一存放在相同数据仓库,这同样对物联网数据挖掘提出了较高挑战。总的来说,现有技术与方式并不能较好满足物联网数据挖掘需要,这也是本文研究开展的原因所在。

结合Hodoop云计算基础开发平台进行基础平台搭建,选取用物联网数据集为例,构成了物联网感知层、传输层、数据层、数据挖掘服务层四部分模块组成的平台,各模块的实现思路与功能如下所示。

物联网感知层主要负责物联网数据的采集,这一采集需要得到目标区域布置的采集节点支持,那里的采集节点主要由摄像头、传感器、其他仪器仪表组成,而由此构成的物联网感知层无线传感器网络,便能够将各采集点采集到的网络数据汇集至节点,数据由此进行汇总储存则能够在传输层的支持下最终传递至云平台的数据中心。

本质上属于具备较高可靠性与高速性、较优无缝性特点的数据传输网络,而基于Hodoop云计算基础开发平台构建的物联网挖掘系统则结合传感器网络、有线网络、无线网络实现了数据传输网络的构建,这就使得物联网感知层所搜集的信息能够更快、更好的传递到云计算数据中心,由此实现的更高质量互通互联,则保证了系统中监测设备的网络化高速数据传输得以实现。

物联网数据具备着异构性、海量性等特点,这就使得基于Hodoop云计算基础开发平台的物联网数据挖掘系统对于物联网数据的存储与处理存在着较高要求,而在本文研究所构建的物联网数据挖掘系统数据层中,该数据层主要由数据源转换模块与分布式存储模块两部分组成,其中前者主要负责物联网异构数据的转换,而后者则主要负责分布式存储物联网所产生的海量数据,由此本文研究的物联网挖掘系统的性能和可行性便得到了较好证实。值得注意的是,分布式存储模块需要结合Hodoop云计算基础开发平台中的HDFS文件系统实现。物联网中的不同对象往往会透过不同的数据类型进行表示,这就使得异构性势必属于物联网的根本性特征,一些相同对象使用不同数据表示便较为直观说明了这一点,而这就使得物联网对数据源转换器有着较高需求。在本文构建的物联网数据挖掘系统中,数据源转换器在其中发挥着保护数据存储完整、保证数据挖掘科学顺利等功能,数据包解码、数据的分布式存储也需要得到该转化器的直接支持,这也是物联网数据挖掘系统中各NameNode节点文件类型为PML的原因。PML能够透过一种通用的方式进行物体描述,而作为基于XML建立的语言,PML在与XML相同核心思想的影响下,其便能够在物品的详细信息带给、物品信息交换等

领域发挥不俗的功能。例如,在本文研究所构建的物联网数据挖掘系统中,PML便在节点数据采集、传输、存储过程中发挥着建模功能,相关建模信息所收录的物体属性信息、位置信息、环境信息、历史元素等资料,便能够保证物品信息实现较高质量的表达,这对于物联网数据挖掘也将带来较为用心影响。

数据挖掘服务层能够细分为数据准备模块、数据挖掘引擎模块、用户模块三部分,三部分模块的具体功用如下所示:

主要负责物联网搜集数据的清理、变换、数据规约。

主要透过数据挖掘算法集、模式评估等功能为物联网数据挖掘系统带给服务,特征、区分、关联、聚类、局外者、趋势和演化分析、偏差分析、类似性分析等能够视作该模块功能的具体组成,这些功能的实现得益于数据挖掘引擎模块中的算法集,Hodoop云计算基础开发平台支持下实现的算法并行化处理则是该模块功能实现的基础。

实现对数据挖掘知识的可视化表示。用户模块是本文研究物联网数据挖掘平台面向使用人员的部分,因此在设计中笔者注重了系统操作的友好性,简单的数据挖掘任务开展、简单获得能够被理解知识均属于设计的优势所在。值得注意的是,为了保证本文研究的物联网数据挖掘系统具备较高的可移植性,设计人员在设计之初便为数据挖掘服务层底层模块设计了开放接口,由此该物联网数据挖掘系统的应用丰富性就能够得到较好保障,表1对本文研究的物联网数据挖掘系统组成进行了直观展示。

基于Hodoop云计算基础开发平台的物联网数据挖掘系统工作流程能够概括为:“用户→主控节点→主控节点允许用户请求→主控节点调用数据挖掘算法→调用数据挖掘算法成功→准备物联网数据→分布式数据挖掘→将结果传递给用户”,而结合这一流程本文将围绕以下几部分开展具体的物联网数据挖掘系统工作流程描述,具体描述如下:

在用户请求物联网数据挖掘系统进行数据挖掘后,系统的主控节点将决定该任务是否能够进行,而在确定能够进行后系统将首先向用户传递能够进行的信息,并随后开始具体的数据挖掘。

在确定物联网数据挖掘系统能够进行数据挖掘后,系统的主控节点将有针对性的选取数据挖掘算法满足用户需要,并结合MapReduce思想与Master/Slave结构进行数据挖掘任务的划分。

在数据挖掘任务的划分下,需要完成具体工作的节点将被分配任务,由此物联网数据挖掘系统的具体数据处理便由此开展,同时JobTracker负责的调度和执行则将最后将数据挖掘结果传递给用户。

为了能够直观决定基于Hodoop云计算基础开发平台物联网数据挖掘系统可行性和性能水平,明晰MapReduce数据挖掘算法在系统中发挥的作用,本文选取了结合Apriori算法开展实验验证的方法,实验验证的环境、过程、结果如下所示。

实验选取了4G内存、500G硬盘、Windows7系统的计算机作为实验基础,并在该计算机中透过虚拟机安装部署了多个分布式节点,其中共3个虚拟机中的一个为NameNodeLinux系统,其余两个则为DateNodeLinux系统。为了保证实验质量与效率,笔者还在该计算机中安装了专门用于Linux系统的Eclipse7.5集成开发环境,在Windows系统中安装了SSHSecureShellClient、各个虚拟机操作系统中安装了SSH服务,由此即可保证本文研究的基于Hodoop云计算基础开发平台物联网数据挖掘系统的顺利使用。

实验环境的搭建后,本文选取了一组用于关联规则算法的实验数据,并将该数据透过C++代码编写的程序透过关键字搜索方式转换成立标准类型大小为1G的PML文件,在HDFS命令下该文件被放入Hadoop平台进行分布式存储,而在运行Java语言编写的Apriori算法后,即可得到物联网数据挖掘系统的运行结果,透过查看系统使用中是否找到了实验数据集中的所有频繁项集便能够直观决定其性能。值得注意的是,为了提升实验的有效性,本文选取了不同大小的文件开展实验,由此实现比较物联网数据挖掘系统运行时间更深入了解其性能。

表2对基于物联网数据挖掘系统的实验结果进行了直观展示,结合该表不难发现,文件大小的提升直接导致物联网数据挖掘系统运行时间的增长,这种增长存在典型的线性趋势,而由于应用Apriori算法的物联网数据挖掘系统实现了频繁项集的发现,本文研究的基于Hodoop云计算基础开发平台物联网数据挖掘系统的扩展性便得到了较为直观展现,其所具备的物联网海量数据挖掘潜力也得到了较好证实。

综上所述,云计算平台能够较好服务于物联网的数据挖掘。而在此基础上,本文研究所提出了完善性与科学性较高的基于Hodoop云计算基础开发平台物联网数据挖掘系统,便直观证明了全文的实践价值。因此,在相关领域的理论研究与实践探索中,本文资料便能够发挥必须参考作用。

[1]汤勇峰.基于云计算平台的物联网数据挖掘研究[J].电脑知识与技术,,1307:218-219.

[2]陈俊丽.基于云计算平台的物联网数据挖掘研究[J].中国新通信,,1821:74-75.

[3]武桂云.基于hadoop平台的分布式数据挖掘系统研究与设计[D].天津大学,.

[4]林昕.基于云计算的大数据挖掘平台构建研究[J].山东工业技术,(17):104.

▰ 数据结构教案 ▰

数据结构试卷

(一)一、选择题(20分)

1.组成数据的基本单位是()。

(A)数据项(B)数据类型(C)数据元素(D)数据变量

2.设数据结构A=(D,R),其中D={1,2,3,4},R={r},r={<1,2>,<2,3>,<3,4>,<4,1>},则数据结构A是()。

(A)线性结构(B)树型结构(C)图型结构(D)集合 3.数组的逻辑结构不同于下列()的逻辑结构。

(A)线性表(B)栈(C)队列(D)树 4.二叉树中第i(i≥1)层上的结点数最多有()个。

ii-1(A)2i(B)2(C)2(D)2i-1 5.设指针变量p指向单链表结点A,则删除结点A的后继结点B需要的操作为()。

(A)p->next=p->next->next(B)p=p->next

(C)p=p->next->next(D)p->next=p 6.设栈S和队列Q的初始状态为空,元素E1、E2、E3、E4、E5和E6依次通过栈S,一个元素出栈后即进入队列Q,若6个元素出列的顺序为E2、E4、E3、E6、E5和E1,则栈S的容量至少应该是()。

(A)6(B)4(C)3(D)2 7.将10阶对称矩阵压缩存储到一维数组A中,则数组A的长度最少为()。

(A)100(B)40(C)55(D)80 8.设结点A有3个兄弟结点且结点B为结点A的双亲结点,则结点B的度数数为()。

(A)3(B)4(C)5(D)1 9.根据二叉树的定义可知二叉树共有()种不同的形态。

(A)4(B)5(C)6(D)7 10.设有以下四种排序方法,则()的空间复杂度最大。

(A)冒泡排序(B)快速排序(C)堆排序(D)希尔排序

二、填空题(30分)1.设顺序循环队列Q[0:m-1]的队头指针和队尾指针分别为F和R,其中队头指针F指向当前队头元素的前一个位置,队尾指针R指向当前队尾元素所在的位置,则出队列的语句为F =____________。

2.设线性表中有n个数据元素,则在顺序存储结构上实现顺序查找的平均时间复杂度为___________,在链式存储结构上实现顺序查找的平均时间复杂度为___________。3.设一棵二叉树中有n个结点,则当用二叉链表作为其存储结构时,该二叉链表中共有________个指针域,__________个空指针域。

4.设指针变量p指向单链表中结点A,指针变量s指向被插入的结点B,则在结点A的后面插入结点B的操作序列为______________________________________。

5.设无向图G中有n个顶点和e条边,则其对应的邻接表中有_________个表头结点和_________个表结点。

6.设无向图G中有n个顶点e条边,所有顶点的度数之和为m,则e和m有______关系。7.设一棵二叉树的前序遍历序列和中序遍历序列均为ABC,则该二叉树的后序遍历序列为__________。

8.设一棵完全二叉树中有21个结点,如果按照从上到下、从左到右的顺序从1开始顺序编号,则编号为8的双亲结点的编号是___________,编号为8的左孩子结点的编号是_____________。

9.下列程序段的功能实现子串t在主串s中位置的算法,要求在下划线处填上正确语句。

int index(char s[ ], char t[ ]){ i=j=0;while(i

三、应用题(30分)

1.设完全二叉树的顺序存储结构中存储数据ABCDE,要求给出该二叉树的链式存储结构并给出该二叉树的前序、中序和后序遍历序列。

2.设给定一个权值集合W=(3,5,7,9,11),要求根据给定的权值集合构造一棵哈夫曼树并计算哈夫曼树的带权路径长度WPL。

3.设一组初始记录关键字序列为(19,21,16,5,18,23),要求给出以19为基准的一趟快速排序结果以及第2趟直接选择排序后的结果。

4.设一组初始记录关键字集合为(25,10,8,27,32,68),散列表的长度为8,散列函数H(k)=k mod 7,要求分别用线性探测和链地址法作为解决冲突的方法设计哈希表。5.设无向图G(所右图所示),要求给出该图的深度优先和广度优先遍历的序列并给出该图的最小生成树。

四、算法设计题(20分)1.设计判断单链表中结点是否关于中心对称算法。2.设计在链式存储结构上建立一棵二叉树的算法。3.设计判断一棵二叉树是否是二叉排序树的算法。

数据结构试卷

(一)参考答案

一、选择题

1.C 2.C 3.D 4.C 5.A 6.C 7.C 8.B 9.B 10.B

二、填空题 1.(F+1)% m 2.O(n),O(n)3.2n,n+1 4.s->next=p->next;s->next=s 5.n, 2e 6.m=2e 7.CBA 8.4,16 9.i-j+1,0 10.n-1

三、应用题

1.链式存储结构略,前序ABDEC,中序DBEAC,后序DEBCA。2.哈夫曼树略,WPL=78 3.(18,5,16,19,21,23),(5,16,21,19,18,23)

h0h18h2012345674.线性探测: 链地址法:h310

81025322768h42532h568h6275.深度:125364,广度:123456,最小生成树T的边集为E={(1,4),(1,3),(3,5),(5,6),(5,6)}

四、算法设计题

1.设计判断单链表中结点是否关于中心对称算法。

typedef struct {int s[100];int top;} sqstack;int lklistsymmetry(lklist *head){

sqstack stack;=-1;lklist *p;

for(p=head;p!=0;p=p->next){++;stack.s[]=p->data;}

for(p=head;p!=0;p=p->next)if(p->data==stack.s[])=-1;else return(0);

return(1);} 2.设计在链式存储结构上建立一棵二叉树的算法。

typedef char datatype;typedef struct node {datatype data;struct node *lchild,*rchild;} bitree;void createbitree(bitree *&bt){

char ch;scanf(“%c”,&ch);

if(ch=='#'){bt=0;return;} bt=(bitree*)malloc(sizeof(bitree));bt->data=ch;createbitree(bt->lchild);createbitree(bt->rchild);} 3.设计判断一棵二叉树是否是二叉排序树的算法。

int minnum=-32768,flag=1;typedef struct node{int key;struct node *lchild,*rchild;}bitree;void inorder(bitree *bt){

if(bt!=0)

{inorder(bt->lchild);if(minnum>bt->key)flag=0;minnum=bt->key;inorder(bt->rchild);} }

▰ 数据结构教案 ▰

一、单选题(每题 2 分,共20分)

1. 栈和队列的共同特点是( )。

A.只允许在端点处插入和删除元素

B.都是先进后出

C.都是先进先出

D.没有共同点

2. 用链接方式存储的队列,在进行插入运算时( ).

A. 仅修改头指针 B. 头、尾指针都要修改

C. 仅修改尾指针 D.头、尾指针可能都要修改

3. 以下数据结构中哪一个是非线性结构( )

A. 队列 B. 栈 C. 线性表 D. 二叉树

4. 设有一个二维数组A[m][n],假设A[0][0]存放位置在644(10),A[2][2]存放位置在

676(10),每个元素占一个空间,问A[3][3](10)存放在什么位置脚注(10)表示用10进制表示。

A.688 B.678 C.692 D.696

5. 树最适合用来表示( )。

A.有序数据元素 B.无序数据元素

C.元素之间具有分支层次关系的数据 D.元素之间无联系的数据

6. 二叉树的第k层的结点数最多为( ).

kk-1 A.2-1 B.2K+1 C.2K-1 D. 2

7. 若有18个元素的有序表存放在一维数组A[19]中,第一个元素放A[1]中,现进行二

分查找,则查找A〔3〕的比较序列的下标依次为( )

A. 1,2,3 B. 9,5,2,3

C. 9,5,3 D. 9,4,2,3

8. 对n个记录的文件进行快速排序,所需要的辅助存储空间大致为

A. O(1) B. O(n) C. O(1og2n) D. O(n2)

9. 对于线性表(7,34,55,25,64,46,20,10)进行散列存储时,若选用H(K)

=K %9作为散列函数,则散列地址为1的元素有( )个,

A.1 B.2 C.3 D.4

10. 设有6个结点的无向图,该图至少应有( )条边才能确保是一个连通图。

A.5 B.6 C.7 D.8

二、填空题(每空1分,共26分)

1. 通常从四个方面评价算法的质量:_________、_________、_________和_________。

2. 一个算法的时间复杂度为(n3+n2log2n+14n)/n2,其数量级表示为________。

3. 假定一棵树的广义表表示为A(C,D(E,F,G),H(I,J)),则树中所含的结点数

为__________个,树的深度为___________,树的度为_________。

4. 后缀算式9 2 3 +- 10 2 / -的值为__________。中缀算式(3+4X)-2Y/3对应的后缀算式

为_______________________________。

5. 若用链表存储一棵二叉树时,每个结点除数据域外,还有指向左孩子和右孩子的两个指

针。在这种存储结构中,n个结点的二叉树共有________个指针域,其中有________个指针域是存放了地址,有________________个指针是空指针。

6. 对于一个具有n个顶点和e条边的有向图和无向图,在其对应的邻接表中,所含边结点

分别有_______个和________个。

7. AOV网是一种___________________的图。

8. 在一个具有n个顶点的无向完全图中,包含有________条边,在一个具有n个顶点的有

向完全图中,包含有________条边。

9. 假定一个线性表为(12,23,74,55,63,40),若按Key % 4条件进行划分,使得同一余数的元

素成为一个子表,则得到的四个子表分别为____________________________、___________________、_______________________和__________________________。

10. 向一棵B_树插入元素的过程中,若最终引起树根结点的分裂,则新树比原树的高度

___________。

11. 在堆排序的过程中,对任一分支结点进行筛运算的时间复杂度为________,整个堆排序

过程的时间复杂度为________。

12. 在快速排序、堆排序、归并排序中,_________排序是稳定的。

三、计算题(每题 6 分,共24分)

1. 在如下数组A中链接存储了一个线性表,表头指针为A [0].next,试写出该线性表。

data next 2.

3. 已知一个图的顶点集V和边集E分别为:V={1,2,3,4,5,6,7};

E={(1,2)3,(1,3)5,(1,4)8,(2,5)10,(2,3)6,(3,4)15,

(3,5)12,(3,6)9,(4,6)4,(4,7)20,(5,6)18,(6,7)25};

用克鲁斯卡尔算法得到最小生成树,试写出在最小生成树中依次得到的各条边。

4. 画出向小根堆中加入数据4, 2, 5, 8, 3时,每加入一个数据后堆的变化。

数据结构试卷(一)参考答案

一、选择题(每题2分,共20分)

1.A 2.D 3.D 4.C 5.C 6.D 7.D 8.C 9.D 10.A

二、填空题(每空1分,共26分)

1. 正确性 易读性 强壮性 高效率

2. O(n)

3. 9 3 3

4. -1 3 4 X * + 2 Y * 3 / -

5. 2n n-1 n+1

6. e 2e

7. 有向无回路

8. n(n-1)/2 n(n-1)

9. (12,40) ( ) (74) (23,55,63)

10.增加1

11.O(log2n) O(nlog2n)

12.归并

三、计算题(每题6分,共24分)

1. 线性表为:(78,50,40,60,34,90)

0111

02. 邻接矩阵:11100101101101011110

邻接表如图11所示:

图11

3. 用克鲁斯卡尔算法得到的最小生成树为:

(1,2)3, (4,6)4, (1,3)5, (1,4)8, (2,5)10, (4,7)20

4. 见图12

26


▰ 数据结构教案 ▰

上学时没学过数据结构和算法,于是现在有机会就自学。下面是我最近在等待进入项目组期间,花了1小时学习了一下迷宫问题。

一.需求设计:以一个m*m 的方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口的通道,或得出没有通路的结论。

二.概要设计:

存储结构:

采用了数组以及结构体来存储数据,在探索迷宫的过程中用到的栈,属于顺序存储结构。

/*八个方向的数组表示形式*/

int move[8][2]={{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1, 0},{-1, 1}};

/*用结构体表示位置*/

struct position

{int x,y;};

position stack[m*m+1];

基本算法:

走迷宫的过程可以模拟为一个搜索的过程:每到一处,总让它按东、东南、南、西南、西、西北、北、东北8个方向顺序试探下一个位置;如果某方向可以通过,并且不曾到达,则前进一步,在新位置上继续进行搜索;如果8个方向都走不通或曾经到达过,则退回一步,在原来的`位置上继续试探下一位置。

每前进或后退一步,都要进行判断:若前进到了出口处,则说明找到了一条通路;若退回到了入口处,则说明不存在通路。

用一个字符类型的二维数组表示迷宫,数组中每个元素取值“或“。迷宫的入口点在位置(处,出口点在位置(m,m)处。设计一个模拟走迷宫的算法,为其寻找一条从入口点到出口点的通路。

二维数组的第第m+第第m+1列元素全置成“1”,表示迷宫的边界;第1行第1列元素和第m行第m列元素置成“0”,表示迷宫的入口和出口;其余元素值用随机函数产生。

假设当前所在位置是(x,y)。沿某个方向前进一步,它可能到达的位置最多有8个。

如果用二维数组move记录8个方向上行下标增量和列下标增量,则沿第i个方向前进一步,可能到达的新位置坐标可利用move数组确定:

x=x+move[i][0]

y=y+move[i][1]

从迷宫的入口位置开始,沿图示方向顺序依次进行搜索。在搜索过程中,每前进一步,在所到位置处做标记“”(表示这个位置在通路上),并将该位置的坐标压入栈中。每次后退的时候,先将当前所在位置处的通路标记“”改成死路标记“×”(表示这个位置曾到达过但走不通,以后不要重复进入),然后将该位置的坐标从栈顶弹出。搜索到出口位置时,数组中那些值为“”的元素形成一条通路。

▰ 数据结构教案 ▰

摘要:人类利用图书馆产生信息活动时所表现出的最基础、最平常、最通用的一种关系,便是用户资源和图书馆之间的关系。从这种关系出发,分析嫁接起这一简单联系的规律,便是数据挖掘技术。本文认为对图书馆用户资源分析研究应以数据挖掘技术为逻辑起点,从云计算、信息共享、数据排查、智能搜索、大数据存储等对图书馆用户资源进行整合和建设。应对信息资源日益丰富的这天,数据挖掘技术对管理图书馆信息资源技术带给了巨大便利。

数据挖掘,即数据系统中的信息发现。随着计算机技术,个性是云计算、大数据记忆技术的快速发展,传统的手动查找信息模式被大数据智能检索替代。数据挖掘技术广泛应用于市场、工业、金融行业、科学界、互联网行业以及医疗业。数据挖掘技术在图书馆的应用,能够将海量的用户资源进行聚类、关联、整合,能够对用户搜索记录、图书流通记录、用户借阅信息等数据进行精确预判,发现一些隐蔽的联系,为图书馆采购图书、淘汰文献资料带给科学推荐,也能够为用户带给个性化订阅服务,创新用户服务模式,为图书馆建设整个信息网络带给有力支撑。

图书馆用户资源是透过数字技术进行组织和管理的:(1)经过数据关联分析,把数据库中存在的两个或两个以上用户之间的相同性提取出来,提高支持度和说服力;(2)把用户信息按照相似性归纳成几个类别,建立宏观概念,发现其间的相互关系;其次定义这些相互关系,概念产生以后,即等同于这些相互关系的整体信息,用于建构分类规则或者数据模型;其次利用以上数据找出变化规律,对此规律进行模型化处理,并由数据模型对未知信息进行预判;(3)把用户资源进行时序排序,检索出高重复率的模型;(4)进行偏差比对,检查数据之中的异常状况。图书馆利用超多的用户访问信息获取用户兴趣,发现用户群体,为不同的群体定制信息,还能够建立一个共享信息平台,让不同用户建立网络交流。

大数据形势下,图书馆能够获取的用户资源不仅仅限于用户个人信息和搜索记录,也包括档案、学术研究、教学模式、用户评价和反馈等,数据丰富。同时,数据分布广泛,在互联网时代,可从图书馆应用系统、数据系统记录以及各种网页、移动终端的信息获取,显示出用户资源的分散性。

数据系统里的存储方式不同,服务器不同,系统开发平台不同,致使许多用户资源无法交流互换。图书馆用户资源有半模型化、模型化和非模型化之分。传统的图书馆用户资源中,用户只是图书资源的使用者,与图书馆之间只是点对点单线互动,用户之间不存在交流,而在大数据网络平台下,用户之间能够建立资料共享互动平台,使得用户资源的资料更加多元化。

用户资源图书馆具备信息量大的特点,用户可获得各方各面的信息,且从服务的个性化和全方位化而言,图书馆可根据社会热点或用户需求定制服务。一方面,建立用户资源图书馆,使各类用户信息在同一界面统一呈现,方便用户的选取和检索。另一方面,利用数据挖掘技术建立的用户资源图书馆,服务器众多,具有较强的计算潜力和存储潜力,拥有较高的数据处理潜力,能同时容纳多数用户。因数据量大所导致的硬件费用和后期运行费用剧增,可透过构建用户资源图书馆平台以及应用服务得到解决。为应付不断提高的用户资源存储方面的压为,目前亟需的就是投入超多资金以扩容存储设备,无疑,建立用户资源平台能够解决此问题。

强大的互联网呈现功能和用户信息保存的可靠性功能,用户资源存储的复杂性问题可得到很好的解决。其次,数据挖掘技术对于资源整合方面具有优势,透过分布式的存储模式整合超多信息资源带给给用户检索。不同的数据之间的互相操作以及全方位的互联网服务得以实现,很好的解决了资源重复建设的问题。因此,利用数据挖掘使得图书馆资源数字化具备可行性。从这个好处上来看,资源的馆藏数字化将会加快发展,而不只是图书书目的剧增。

随着各类用户资源利用步伐的加快,加之依靠因特网的用户对服务的可行性和效率性要求更高,超多不同体系的服务器布置在机房,系统维护人员的压力也相应増大。透过数据挖掘技术,可有效进行资源整合和优化,无需透过人力进行。

数据挖掘技术能够利用用户资源计算出用户模型,这是研究用户需求、偏好、行为的一种常规方式,一般认为用户模型是对用户在某段时间内相对稳定的信息需求的记录。用户模型反过来对获取用户资源有十分重要的作用,建构用户模型,能够使图书馆更加精深、准确地掌握当前用户资源。透过对用户资源的处理来预测用户需求,进而到达持续提高服务质量和用户满意度的目的。一方面,预判用户心理是利用图书馆用户资源更加深入的表现。随着用户环境与图书馆环境的不断变化,这种预判力覆盖范围已经不单单是用户信息行为的某个过程或某几个过程,相反,用户心理能够对用户需求的强弱、层次、方向产生极为重要的影响,同时也能够对获取用户资源全部过程产生重要影响。另一方面,最先研究用户体验研究当属企业营销活动,主要用来研究用户与企业、产品或服务之间的互动。数据挖掘技术能够更精准预测用户的实际感受,透过研究用户情感体验与用户行为动作,提高用户的满意度,满足用户需求。

在数据大爆发时代,重视图书馆用户资源,透过多渠道、多方式汇聚用户资源,采用数据挖掘、数据归档分析等技术,掌握用户资源特征,有助于图书馆精准定位用户群体,对调整图书馆运营策略有重要前置作用,更能创新图书馆服务的资料和形式,实现图书馆资源的有效利用。

[2]郭崇慧等.北京数据挖掘教程[M].北京:清华大学出版社,.

[3]徐永丽等.网络环境中用户信息需求障碍分析[J].图书馆理论与实践,.

▰ 数据结构教案 ▰

摘要:大数据和智慧旅游都是当下的热点,没有大数据的智慧旅游无从谈“智慧”,数据挖掘是大数据应用于智慧旅游的核心,文章探究了在智慧旅游应用中,目前大数据挖掘存在的几个问题。

随着人民生活水平的进一步提高,旅游消费的需求进一步上升,在云计算、互联网、物联网以及移动智能终端等信息通讯技术的飞速发展下,智慧旅游应运而生。大数据作为当下的热点已经成了智慧旅游发展的有力支撑,没有大数据带给的有利信息,智慧旅游无法变得“智慧”。

旅游业是信息密、综合性强、信息依存度高的产业[1],这让其与大数据自然产生了交汇。20,江苏省镇江市首先提出“智慧旅游”的概念,虽然至今国内外对于智慧旅游还没有一个统一的学术定义,但在与大数据相关的描述中,有学者从大数据挖掘在智慧旅游中的作用出发,把智慧旅游描述为:透过充分收集和管理所有类型和来源的旅游数据,并深入挖掘这些数据的潜在重要价值信息,然后利用这些信息为相关部门或对象带给服务[2]。这必须义充分肯定了在发展智慧旅游中,大数据挖掘所起的至关重要的作用,指出了在智慧旅游的过程中,数据的收集、储存、管理都是为数据挖掘服务,智慧旅游最终所需要的是利用挖掘所得的有用信息。

,我国提出用十年时间基本实现智慧旅游的目标[3],过去几年,国家旅游局的相关动作均为了实现这一目标。但是,在借助大数据推动智慧旅游的可持续性发展中,大数据所产生的价值却亟待提高,原因之一就是在收集、储存了超多数据后,对它们深入挖掘不够,没有发掘出数据更多的价值。

智慧旅游的发展离不开移动网络、物联网、云平台。随着大数据的不断发展,国内许多景区已经实现Wi-Fi覆盖,部分景区也已实现人与人、人与物、人与景点之间的实时互动,多省市已建有旅游产业监测平台或旅游大数据中心以及数据可视化平台,从中进行数据统计、行为分析、监控预警、服务质量监督等。透过这些平台,已基本能掌握跟游客和景点相关的数据,能够实现更好旅游监控、产业宏观监控,对该地的旅游管理和推广都能发挥重要作用。

但从智慧化的发展来看,我国的信息化建设还需加强。虽然通讯网络已基本能保证,但是大部分景区还无法实现对景区全面、透彻、及时的感知,更为困难的是对平台的建设。在数据共享平台的建设上,除了必备的硬件设施,大数据实验平台还涉及超多部门,如政府管理部门、气象部门、交通、电子商务、旅行社、旅游网站等。如此多的部门相关联,要想建立一个完整全面的大数据实验平台,难度可想而知。

大数据时代缺的不是数据,而是方法。大数据在旅游行业的应用前景十分广阔,但是应对超多的数据,不懂如何收集有用的数据、不懂如何对数据进行挖掘和利用,那么“大数据”犹如矿山之中的废石。旅游行业所涉及的结构化与非结构化数据,透过云计算技术,对数据的收集、存储都较为容易,但对数据的挖掘分析则还在不断探索中。大数据的挖掘常用的方法有关联分析,相似度分析,距离分析,聚类分析等等,这些方法从不同的角度对数据进行挖掘。其中,相关性分析方法透过关联多个数据来源,挖掘数据价值。但针对旅游数据,采用这些方法挖掘数据的价值信息,难度也很大,因为旅游数据中冗余数据很多,数据存在形式很复杂。在旅游非结构化数据中,一张图片、一个天气变化、一次舆情评价等都将会对游客的旅行计划带来影响。对这些数据完全挖掘分析,对游客“行前、行中、行后”大数据的实时性挖掘都是很大的挑战。

,数据安全事件屡见不鲜,伴着大数据而来的数据安全问题日益凸显出来。在大数据时代,无处不在的数据收集技术使我们的个人信息在所关联的数据中心留下痕迹,如何保证这些信息被合法合理使用,让数据“可用不可见”[4],这是亟待解决的问题。同时,在大数据资源的开放性和共享性下,个人保密和公民权益受到严重威胁。这一矛盾的存在使数据共享程度与数据挖掘程度成反比。此外,经过大数据技术的分析、挖掘,个人保密更易被发现和暴露,从而可能引发一系列社会问题。

大数据背景下的旅游数据当然也避免不了数据的安全问题。如果游客“吃、住、行、游、娱、购”的数据被放入数据库,被完全共享、挖掘、分析,那游客的人身财产安全将会受到严重影响,最终降低旅游体验。所以,数据的安全管理是进行大数据挖掘的前提。

大数据背景下的智慧旅游离不开人才的创新活动及技术支持,然而与专业相衔接的大数据人才培养未能及时跟上行业需求,加之创新型人才的外流,以及数据统计未来3~5年大数据行业将面临全球性的人才荒,国内智慧旅游的构建还缺乏超多人才。

在信息化建设上,加大政府投入,加强基础设施建设,整合结构化数据,抓取非结构化数据,打通各数据壁垒,建设旅游大数据实验平台;在挖掘方法上,对旅游大数据实时性数据的挖掘就应被放在重要位置;在数据安全上,从加强大数据安全立法、监管执法及强化技术手段建设等几个方面着手,提升大数据环境下数据安全保护水平。加强人才的培养与引进,加强产学研合作,培养智慧旅游大数据人才。

[1]翁凯.大数据在智慧旅游中的应用研究[J].信息技术,2015,24:86-87.

[2]梁昌勇,马银超,路彩虹.大数据挖掘,智慧旅游的核心[J].开发研究,2015,5(180):134-139.

[3]张建涛,王洋,刘力刚.大数据背景下智慧旅游应用模型体系构建[J].企业经济,2017,5(441):116-123.

[4]王竹欣,陈湉.保障大数据,从哪里入手[N].人民邮电究,2017-11-30.

▰ 数据结构教案 ▰

一、实验目的及要求

1)掌握栈和队列这两种特殊的线性表,熟悉它们的特性,在实际问题背景下灵活运用它们。

本实验训练的要点是“栈”和“队列”的观点;

二、实验内容

1) 利用栈,实现数制转换。

2) 利用栈,实现任一个表达式中的语法检查(选做)。

判队列空、入队列、出队列);

三、实验流程、操作步骤或核心代码、算法片段

顺序栈:

Status InitStack(SqStack &S)

{

S.base=(ElemType*)malloc(STACK_INIT_SIZE*sizeof(ElemType));

if(!S.base)

return ERROR;

=S.base;

S.stacksize=STACK_INIT_SIZE;

return OK;

}

Status DestoryStack(SqStack &S)

{

free(S.base);

return OK;

}

Status ClearStack(SqStack &S)

{

=S.base;

return OK;

}

Status StackEmpty(SqStack S)

{

if(S.base==)

return OK;

return ERROR;

}

int StackLength(SqStack S)

{

return -S.base;

}

Status GetTop(SqStack S,ElemType &e)

{

if(-S.base>=S.stacksize)

{

S.base=(ElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(ElemType));

if(!S.base) return ERROR;

=S.base+S.stacksize;

S.stacksize+=STACKINCREMENT;

}

*++=e;

return OK;

}

Status Push(SqStack &S,ElemType e)

{

if(-S.base>=S.stacksize)

{

S.base=(ElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(ElemType));

if(!S.base)

return ERROR;

=S.base+S.stacksize;

S.stacksize+=STACKINCREMENT;

}

*++=e;

return OK;

}

Status Pop(SqStack &S,ElemType &e)

{

if(==S.base)

return ERROR;

e=*--;

return OK;

}

Status StackTraverse(SqStack S)

{

ElemType *p;

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

if(!p) return ERROR;

p=;

while(p!=S.base)//上面一个...

{

p--;

printf("%d ",*p);

}

return OK;

}

Status Compare(SqStack &S)

{

int flag,TURE=OK,FALSE=ERROR;

ElemType e,x;

InitStack(S);

flag=OK;

printf("请输入要进栈或出栈的元素:");

while((x= getchar)!='#'&&flag)

{

switch (x)

{

case '(':

case '[':

case '{':

if(Push(S,x)==OK)

printf("括号匹配成功! ");

break;

case ')':

if(Pop(S,e)==ERROR || e!='(')

{

printf("没有满足条件 ");

flag=FALSE;

}

break;

case ']':

if ( Pop(S,e)==ERROR || e!='[')

flag=FALSE;

break;

case '}':

if ( Pop(S,e)==ERROR || e!='{')

flag=FALSE;

break;

}

}

if (flag && x=='#' && StackEmpty(S))

return OK;

else

return ERROR;

}

链队列:

Status InitQueue(LinkQueue &Q)

{

Q.front =Q.rear=

(QueuePtr)malloc(sizeof(QNode));

if (!Q.front) return ERROR;

Q.front->next = NULL;

return OK;

}

Status DestoryQueue(LinkQueue &Q)

{

while(Q.front)

{

Q.rear=Q.front->next;

free(Q.front);

Q.front=Q.rear;

}

return OK;

}

Status QueueEmpty(LinkQueue &Q)

{

if(Q.front->next==NULL)

return OK;

return ERROR;

}

Status QueueLength(LinkQueue Q)

{

int i=0;

QueuePtr p,q;

p=Q.front;

while(p->next)

{

i++;

p=Q.front;

q=p->next;

p=q;

}

return i;

}

Status GetHead(LinkQueue Q,ElemType &e)

{

QueuePtr p;

p=Q.front->next;

if(!p)

return ERROR;

e=p->data;

return e;

}

Status ClearQueue(LinkQueue &Q)

{

QueuePtr p;

while(Q.front->next )

{

p=Q.front->next;

free(Q.front);

Q.front=p;

}

Q.front->next=NULL;

Q.rear->next=NULL;

return OK;

}

Status EnQueue(LinkQueue &Q,ElemType e)

{

QueuePtr p;

p=(QueuePtr)malloc(sizeof (QNode));

if(!p)

return ERROR;

p->data=e;

p->next=NULL;

Q.rear->next = p;

Q.rear=p; //p->next 为空

return OK;

}

Status DeQueue(LinkQueue &Q,ElemType &e)

{

QueuePtr p;

if (Q.front == Q.rear)

return ERROR;

p = Q.front->next;

e = p->data;

Q.front->next = p->next;

if (Q.rear == p)

Q.rear = Q.front; //只有一个元素时(不存在指向尾指针)

free (p);

return OK;

}

Status QueueTraverse(LinkQueue Q)

{

QueuePtr p,q;

if( QueueEmpty(Q)==OK)

{

printf("这是一个空队列! ");

return ERROR;

}

p=Q.front->next;

while(p)

{

q=p;

printf("%ddata);

q=p->next;

p=q;

}

return OK;

}

循环队列:

Status InitQueue(SqQueue &Q)

{

Q.base=(QElemType*)malloc(MAXQSIZE*sizeof(QElemType));

if(!Q.base)

exit(OWERFLOW);

Q.front=Q.rear=0;

return OK;

}

Status EnQueue(SqQueue &Q,QElemType e)

{

if((Q.rear+1)%MAXQSIZE==Q.front)

return ERROR;

Q.base[Q.rear]=e;

Q.rear=(Q.rear+1)%MAXQSIZE;

return OK;

}

Status DeQueue(SqQueue &Q,QElemType &e)

{

if(Q.front==Q.rear)

return ERROR;

e=Q.base[Q.front];

Q.front=(Q.front+1)%MAXQSIZE;

return OK;

}

int QueueLength(SqQueue Q)

{

return(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;

}

Status DestoryQueue(SqQueue &Q)

{

free(Q.base);

return OK;

}

Status QueueEmpty(SqQueue Q) //判空

{

if(Q.front ==Q.rear)

return OK;

return ERROR;

}

Status QueueTraverse(SqQueue Q)

{

if(Q.front==Q.rear)

printf("这是一个空队列!");

while(Q.front%MAXQSIZE!=Q.rear)

{

printf("%d

Q.front++;

}

return OK;

}

▰ 数据结构教案 ▰

数据结构

数据结构是计算机科学中的一个基础概念,用于描述数据之间的组织方式和关系。在计算机程序中,数据结构常用来存储和操作数据,可大大提高程序的效率和可靠性。本文将介绍数据结构的基本概念、常用算法和应用实例。

一、基本概念

1.数据类型

数据类型指数据的属性和操作集合。在计算机程序中,常用的数据类型包括整数、浮点数、字符串等。

2.数据结构

数据结构是一组数据的组织方式和关系。常见的数据结构包括数组、链表、栈、队列、树和图等。

3.算法

算法是解决问题的方法或步骤。在计算机程序中,常用的算法包括查找、排序、递归等。

二、常用算法

1.查找

在数据集合中查找指定的元素。常用的查找算法包括顺序查找、二分查找和哈希查找。

2.排序

对数据集合进行排序。常用的排序算法包括冒泡排序、插入排序、选择排序、快速排序和归并排序。

3.递归

通过递归调用自身来解决问题的方法。常见的递归应用包括树的遍历和图的遍历。

4.动态规划

将大问题分解为小问题,并找到最优解的方法。常见的应用包括背包问题和最长公共子序列问题。

三、应用实例

1.数据存储

数据结构被广泛应用于数据存储中。常见的应用包括数据库、文件系统和内存管理。

2.搜索引擎

搜索引擎是一种利用数据结构进行信息检索的工具。搜索引擎使用索引存储文本数据,并使用算法对索引进行搜索和排序。

3.图形图像处理

数据结构可用于处理图形和图像数据。常见的应用包括图像压缩和人脸识别。

四、总结

数据结构是计算机科学中的一个基础概念,其应用广泛,能够提高程序的效率和可靠性。本文介绍了数据结构的基本概念、常用算法和应用实例,希望能够为读者提供一个基本的了解和思路。

▰ 数据结构教案 ▰

本次课程设计所用到的知识完全是上学期的知识,通过这次课程设计,我认识到了我对数据结构这门课的掌握程度。

首先我这个课程设计是关于二叉树的,由于是刚接触二叉树,所以我掌握的长度并不深。在编程之前我把有关于二叉树的知识有温习了一遍,还好并没有忘掉。二叉树这章节难度中上等,而且内容广泛,所以我只掌握了百分之六七十。

然后,在编程中我认识到了自己动手能力的不足,虽然相比较大二而言进步很大,但是我还是不满意,有的在编程中必须看书才能写出来,有的靠百度,很少是自己写的。还好,我自己组装程序的能力还行,要不这东拼西凑的程序根本组装不了。在编程中我还认识到了,编程不能停下,如果编程的时间少了,知识忘的会很快,而且动手也会很慢。同时,同学之间的合作也很重要,每个人掌握的知识都不一样,而且掌握程度也不一样,你不会的别的同学会,所以在大家的共同努力下,编程会变得很容易。在这次编程中,我了解到了自己某些方面的不足,比如说链表的知识,虽然我能做一些有关于链表的编程,但是很慢,没有别人编程的快,另外,二叉树和图的知识最不好掌握,这方面的知识广泛而复杂。以前,没动手编程的时候觉得这些知识很容易,现在编程了才发现自己错了,大错特错了,我们这个专业最重视的就是动手编程能力,如果我们纸上写作能力很强而动手编程能力很差,那我们就白上这个专业了。计算机这个专业就是锻炼动手编程能力的,一个人的理论知识再好,没有动手编程能力,那他只是一个计算机专业的“入门者”。在编程中我们能找到满足,如果我们自己编程了一个程序,我们会感到自豪,而且充实,因为如果我们专研一个难得程序,我们会达到忘我的境界,自己完全沉浸在编程的那种乐趣之中,完全会废寝忘食。编程虽然会乏味很无聊,但是只要我们沉浸其中,你就会发现里面的乐趣,遇到难得,你会勇往直前,不写出来永不罢休;遇到容易的,你会找到乐趣。编程是很乏味,但是那是因为你没找到编程重的乐趣,你只看到了他的不好,而没有看到他的好。其实,只要你找到编程中得乐趣,你就会完全喜欢上他,不编程还好,一编程你就会变成一个两耳不闻窗外事的“植物人”。可以说只要你涉及到了计算机,你就的会编程,而且还要喜欢上他,永远和他打交道,我相信在某一天,我们一定会把他当作我们不可或缺的好朋友。

▰ 数据结构教案 ▰

2014-2015学第一学期《数据结构》

期中考试试卷

一、选择题(每题2分,共20分)

1.计算机内部数据处理的基本单位是(B)。

A.数据 B.数据元素

C.数据项

D.数据库 2.设语句x++的时间是单位时间,则以下语句的时间复杂度为(B)。

for(i=1;i<=n;i++)for(j=i;j<=n;j++)x++;A.O(1)B.O(n)C.O(n)

D.O(n)

33.在一个长度为n的顺序表中删除第i个元素(0<=i<=n)时,需向前移动(A)个元素。

A.n-i B.n-i+l C.n-i-1 D.i 4.在一个单链表中,已知q结点是p结点的前趋结点,若在q和p之间插入s结点,则须执行(B)。

A.s->next=p->next;p->next=s B.q->next=s;s->next=p C.p->next=s->next;s->next=p D.p->next=s;s->next=q 5.在一个具有n个单元的顺序栈中,假定以地址低端(即0单元)作为栈底,以top作为栈顶指针,当做出栈处理时,top变化为______。C A.top不变

B.top=0 C.top--D.top++ 6.在具有n个单元的顺序存储的循环队列中,假定front和rear分别为队头指针和队尾指针,则判断队满的条件为________。D A.rear%n= = front B.(front+l)%n= = rear C.rear%n-1= = front D.(rear+l)%n= = front 7.两个字符串相等的条件是(D)。

A.两串的长度相等 B.两串的长度相等,并且两串包含的字符相同 C.两串包含的字符相同 D.两串的长度相等,并且对应位置上的字符相同

8.数组A中,每个元素的长度为3个字节,行下标i从1到8,列下标j从1到10,从首地址SA开始连续存放在存储器内,该数组按行存放时,元素A[8][5]的起始地址为(C)。A.SA+141 B.SA+144 C.SA+222 D.SA+225 9.设有广义表D=(a,b,D),其长度为(B),深度为(A)。A.无穷大 B.3

C.2 D.5 10.假设在一棵二叉树中,双分支结点数为15,单分支结点数为30个,则叶子结点数为(B)个。

A.15

B.16

C.17

D.47

二、填空题(每空1分,共20分)

1.数据的逻辑结构有四种基本形态,分别是________________、__________________、__________________和__________________。2.集合,线性,树,图

2.一个算法的效率可分为__________________效率和__________________效率。4.时间,空间

3.当对一个线性表经常进行存取操作,而很少进行插入和删除操作时,则采用_______存储结构为宜。相反,当经常进行的是插入和删除操作时,则采用_______存储结构为宜。7.顺

(第1页,共3页)

序,链接

4.对于一个具有n个结点的单链表,在已知的结点p后插入一个新结点的时间复杂度为______,在给定值为x的结点后插入一个新结点的时间复杂度为_______。12.O(1),O(n)5.可以在线性表的______位置插入和删除元素;对于栈只能在_______位置删除元素;对于队列只能在_______位置插入元素。9任何,栈顶,队尾 6.设字符串S1= “ABCDEF”,S2= “PQRS”,则运算S=CONCAT(SUB(S1,2,LEN(S2)),SUB(S1,LEN(S2),2))后的串值为___________________。3.“BCDEDE”

7.一维数组的逻辑结构是______________,存储结构是______________;对于二维或多维数组,分为______________和______________两种不同的存储方式。1.线性结构,顺序结构,以行为主序,以列为主序

8.三维数组R[c1„d1,c2„d2,c3„d3]共含有______________个元素。(其中:c1≤d1,c2≤d2,c3≤d3)9.(d1-c1+1)×(d2-c2+1)×(d3-c3+1)

9.数组A[1„10,-2„6,2„8]以行优先的顺序存储,设第一个元素的首地址是100,每个元素占3个存储长度的存储空间,则元素A[5,0,7]的存储地址为______________。10.913

三、简答题(每题6分,共18分)1.已知L是无表头结点的单链表,且P结点既不是首元结点也不是尾元结点,试写出合适的语句序列。(1)在P结点后插入S结点。(2)在表首插入S结点。(3)在表尾插入S结点。2已知L是带表头结点的非空单链表,且P结点既不是首元结点也不是尾元结点,试写出合适的语句序列。(1)删除P结点的直接后继结点。(2)删除P结点。(3)删除尾元结点。3. LinkList mynote(LinkList L){//L是不带头结点的单链表的头指针 if(L&&L->next){ q=L;L=L->next;p=L;

S1: while(p->next)p=p->next; S2: p->next=q;q->next=NULL;

} return L; } 请回答下列问题:(1)说明语句S1的功能;(2)说明语句组S2的功能;(3)设链表表示的线性表为(a1,a2, „,an),写出算法执行后的返回值所表示的线性表。

该算法的功能是:将开始结点摘下链接到终端结点之后成为新的终端结点,而原来的第二个结点成为新的开始结点,返回新链表的头指针。

四、算法设计题(每题14分,共42分)1.假设有一个循环链表的长度大于1,且表中既无头结点也无头指针,已知p为指向链表中某结点的指针,设计在链表中删除p所指结点的前趋结点的算法。

解:可引入一个指针q,当q->next=p时,说明此时q所指的结点为p所指结点的前趋结点,从而可得算法如下:

void delete(LinkList *p){ //在链表中删除p所指结点的前趋结点 LinkList *q,*t;

q=p;

while(q->next->next!=p)//q->next不是p的前趋结点

(第2页,共3页)

q=q->next;

t=q->next;//t指向要删除结点

q->next=p;//删除t结点

free(t);}

2.已知线性表的元素是无序的,且以带头结点的单链表作为存储结构。设计一个删除表中所有值小于max但大于min的元素的算法。

2.算法描述如下:

delete(LinkList *head, int max, int min){ LinkList *p,*q;

q=head;

p=head->next;

while(p!=NULL)

if((p->data<=min)||(p->data>=max))

{ q=p;

p=p->next;

} else { q->next=p->next;free(p);p=q->next;} }

3.假设表达式有单字母变量和双目四则运算符构成。试写一个算法,对一个通常书写形式且书写正确的表达式求值。

(第3页,共3页)

文章来源://www.hc179.com/hetongfanben/192187.html