Ⅰ 数据结构算法的相关知识有哪些
输入:一个算法具有零个或者多个输出。以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件。后面一句话翻译过来就是,如果一个算法本身给出了初始条件,那么可以没有输出。比如,打印一句话:NSLog。输出:算法至少有一个输出。也就是说,算法一定要有输出。输出的形式可以是打印,也可以使返回一个值或者多个值等。也可以是显示某些提示。有穷性:算法的执行步骤是有限的,算法的执行时间也是有限的。确定性:算法的每个步骤都有确定的含义,不会出现二义性。可行性:算法是可用的,也就是能够解决当前问题。算法的设计取决于数据(逻辑)结构,而算法的实现依赖于采用的存储结构。数据的存储结构实质上是它的逻辑结构在计算机存储器中的实现,为了全面的反映一个数据的逻辑结构,它在存储器中的映象包括两方面内容,即数据元素之间的信息和数据元素之间的关系。不同数据结构有其相应的若干运算。数据的运算是在数据的逻辑结构上定义的操作算法,如检索、插入、删除、更新和排序等。数据的运算是数据结构的一个重要方面,讨论任一种数据结构时都离不开对该结构上的数据运算及其实现算法的讨论。数据结构不同于数据类型,也不同于数据对象,它不仅要描述数据类型的数据对象,而且要描述数据对象各元素之间的相互关系。
数据类型是一个值的集合和定义在这个值集上的一组操作的总称。数据类型可分为两类:原子类型、结构类型。在程序设计语言中,每一个数据都属于某种数据类型。类型明显或隐含地规定了数据的取值范围、存储方式以及允许进行的运算。可以认为,数据类型是在程序设计中已经实现了的数据结构。在程序设计过程中,当需要引入某种新的数据结构时,总是借助编程语言所提供的数据类型来描述数据的存储结构。基带信号:指的是没有经过调制(进行频谱搬移和变换)的原始电信号。基带通信(又称基带传输):指传输基带信号。进行基带传输的系统称为基带传输系统。传输介质的整个信道被一个基带信号占用.基带传输不需要调制解调器,设备化费小,具有速率高和误码率低等优点,.适合短距离的数据传输,传输距离在100米内,在音频市话、计算机网络通信中被广泛采用。
Ⅱ C语言这个程序怎么设计
1.掌握算法的基本概念。
2.掌握基本数据结构及其操作。
3.掌握基本排序和查找算法。
4.掌握逐步求精的结构化程序设计方法。
5.掌握软件工程的基本方法,具有初步应用相关技术进行软件开发的能力。
6.掌握数据库的基本知识,了解关系数据库的设计。
考试内容
一、基本数据结构与算法
1.算法的基本概念;算法复杂度的概念和意义(时间复杂度与空间复杂度)。
2.数据结构的定义;数据的逻辑结构与存储结构;数据结构的图形表示;线性结构与非线性结构的概念。
3.线性表的定义;线性表的顺序存储结构及其插入与删除运算。
4.栈和队列的定义;栈和队列的顺序存储结构及其基本运算。
5.线性单链表、双向链表与循环链表的结构及其基本运算。
6.树的基本概念;二叉树的定义及其存储结构;二叉树的前序、中序和后序遍历。
7.顺序查找与二分法查找算法;基本排序算法(交换类排序,选择类排序,插入类排序)。
二、程序设计基础
1.程序设计方法与风格
2.结构化程序设计。
3.面向对象的程序设计方法,对象,方法,属性及继 承与多态性。
三、软件工程基础
1.软件工程基本概念,软件生命周期概念,软件工具与软件开发环境。
2.结构化分析方法,数据流图,数据字典,软件需求规格说明书。
3.结构化设计方法,总体设计与详细设计。
4.软件测试的方法,白盒测试与黑盒测试,测试用例设计,软件测试的实施,单元测试、集成测试和系统测试。
5.程序的调试,静态调试与动态调试。
四、数据库设计基础
1.数据库的基本概念:数据库,数据库管理系统,数据库系统。
2.数据模型,实体联系模型及E―R图,从E―R图导出关系数据模型。
3.关系代数运算,包括集合运算及选择、投影、连接运算,数据库规范化理 论。
4.数据库设计方法和步骤:需求分析、概念设计、逻辑设计和物理设计的相关策略。
考试方式
1.公共基础知识的考试方式为笔试,与C语言程序设计(C++语言程序设计、Java语言程序设计、Visual Basic语言程序设计、Visual FoxPro数据库程序设计或Access数据库程序设计)的笔试部分合为一张试卷,公共基础知识部分占全卷的30分。
2.公共基础知识有l0道选择题和5道填空题。
C语言程序设计
基本要求
1.熟悉TURBO C集成环境。
2.熟练掌握结构化程序设计的方法,具有良好的程序设计风格。
3.掌握程序设计中简单的数据结构和算法。
4.TURBO C的集成环境下,能够编写简单的C程序,并具有基本的纠错和调试程序的能力。
考试内容
一、C语言的结构
1.程序的构成,MAIN函数和其他函数。
2.头文件,数据说明,函数的开始和结束标志。
3.源程序的书写格式。
4.C语言的风格。
二、数据类型及其运算
1.C的数据类型(基本类型,构造类型,指针类型,空类型)及其定义方法。
2.C运算符的种类、运算优先级和结合性。
3.不同类型数据间的转换与运算。
4.C表达式类型(赋值表达式,算术表达式,关系表达式,逻辑表达式,条件表达式,逗号表达式)和求值规则。
三、基本语句
1.表达式语句,空语句,复合语句。
2.数据的输入与输出,输入输出函数的调用。
3.复合语句。
4.GOTO语句和语句标号的使用。
四、选择结构程序设计
1.用IF语句实现选择结构。
2.用SWITCH语句实现多分支选择结构。
3.选择结构的嵌套。
五、循环结构程序设计
1.FOR循环结构。
2.WHILE和DO WHILE循环结构。
3.CONTINUE语句和BREAK语句。
4.循环的嵌套。
六、数组的定义和引用
1.一维数组和多维数组的定义、初始化和引用
2.字符串与字符数组。
七、函数
1.库函数的正确调用。
2.函数的定义方法。
3.函数的类型和返回值。
4.形式参数与实在参数,参数值的传递。
5.函数的正确调用,嵌套调用,递归调用。
6.局部变量和全局变量。
7.变量的存储类别(自动,静态,寄存器,外部),变量的作用域和生存期。
8.内部函数与外部函数。
八、编译预处理
1.宏定义:不带参数的宏定义;带参数的宏定义。
2.“文件包含”处理。
九、指针
1.指针与指针变量的概念,指针与地址运算符。
2.变量、数组、字符串、函数、结构体的指针以及指向变量、数组、字符串、函数、结构体的指针变量。通过指针引用以上各类型数据。
3.用指针作函数参数。
4.返回指针值的指针函数。
5.指针数组,指向指针的指针,MAIN函数的命令行参数。
十、结构体(即“结构”)与共用体(即“联合”)
1.结构体和共用体类型数据的定义方法和引用方法。
2.用指针和结构体构成链表,单向链表的建立、输出、删除与插入。
十一、位运算
1.位运算符的含义及使用。
2.简单的位运算。
十二、文件操作
只要求缓冲文件系统(即高级磁盘I/O系统),对非标准缓冲文件系统(即低级磁盘I/O系统)不要求。
1.文件类型指针(FILE类型指针)。
2.文件的打开与关闭(FOPEN,FCLOSE)。
3.文件的读写(FPUTC,FGETC,FPUTS,FGETS,FREAD,FWRITE,FPRINTF,FSCANF函数),文件的定位(REWIND,FSEEK函数)。
考试方式
1.笔试:120分钟,满分100分,其中含公共基础知识部分的30分。
2.上机:60分钟,满分乏鼎催刮诎钙挫水旦惊100分。
上机操作包括:
(1)填空。
(2)改错。
(3)编程。
多做历年题
祝愿你顺利通过考试!
Ⅲ 数据结构算法实现
struct list *i;这句只是声明了个指针,没有分配内存
改成
struct list *i = new struct list;
即可
Ⅳ 数据结构算法提问:(C语言)
先将二个线性表按升序(或降序)排列,然后各遍历一次,就可以完成插入了.
比如:
LA 1-3-5-7
LB 2-3-4
LA的第一个结点是1,LB的第一个结点是2,这样,LA找下个结点,发现是3,比LB大,说明LA里没有2,这样把2插入LA,再判断LA的3和LB的3,相等,LA后移,LB也后移,发现LA是5,LB是4,LA比LB大,说明LA里不存在4,在LA里插入4
指向LA的指针设置二个,一个指向移之前的,这样比如移到3的时候发现3比LB的2大,就用移之前的插入2这个结点就行了,没啥别的特别的了,
程序应该比较简单就不实现了,只说明下我的思路!~
Ⅳ 什么是数据结构什么是算法算法与程序有什么关系
在计算机编程领域,数据结构与算法的应用是无处不在。比如图像视频处理、数据压缩、数据库、游戏开发、操作系统、编译器、搜索引擎、AR、VR、人工智能、区块链等领域,都是以数据结构与算法为基石。
数据结构与算法属于开发人员的基本内功,也能训练大脑的思考能力,掌握一次,终生受益。扎实的数据结构与算法功底,能让我们站在更高的角度去思考代码、写出性能更优的程序,能让我们更快速地学习上手各种新技术(比如人工智能、区块链等),也能让我们敲开更高级编程领域的大门。
数据结构与算法更是各大名企面试题中的常客,如果不想被行业抛弃、想进入更大的名企、在IT道路上走得更远,掌握数据结构与算法是非常有必要。
Ⅵ 用c语言怎么实现数据结构算法
c语言主要通过自己定义函数来实现数据结构,比如实现堆栈,实现了先输入后输出,用函数来实现各个接口;
但是C++也可以通过这个办法,来实现数据结构,
还有很简单,就是STL 框架,这个是系统自动定义的函数。用起来容易
Ⅶ 什么是算法与数据结构
算法(Algorithm)是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。
算法可以理解为有基本运算及规定的运算顺序所构成的完整的解题步骤。或者看成按照要求设计好的有限的确切的计算序列,并且这样的步骤和序列可以解决一类问题。
一个算法应该具有以下五个重要的特征:
1、有穷性: 一个算法必须保证执行有限步之后结束;
2、确切性: 算法的每一步骤必须有确切的定义;
3、输入:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定除了初始条件;
4、输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;
5、可行性: 算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。
计算机科学家尼克劳斯-沃思曾着过一本着名的书《数据结构十算法= 程序》,可见算法在计算机科学界与计算机应用界的地位。
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
一般认为,一个数据结构是由数据元素依据某种逻辑联系组织起来的。对数据元素间逻辑关系的描述称为数据的逻辑结构;数据必须在计算机内存储,数据的存储结构是数据结构的实现形式,是其在计算机内的表示;此外讨论一个数据结构必须同时讨论在该类数据上执行的运算才有意义。
在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因素。许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重的依赖于是否选择了最优的数据结构。许多时候,确定了数据结构后,算法就容易得到了。有些时候事情也会反过来,我们根据特定算法来选择数据结构与之适应。不论哪种情况,选择合适的数据结构都是非常重要的。
选择了数据结构,算法也随之确定,是数据而不是算法是系统构造的关键因素。这种洞见导致了许多种软件设计方法和程序设计语言的出现,面向对象的程序设计语言就是其中之一。
在计算机科学中,数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象(数据元素)以及它们之间的关系和运算等的学科,而且确保经过这些运算后所得到的新结构仍然是原来的结构类型。
“数据结构”作为一门独立的课程在国外是从1968年才开始设立的。 1968年美国唐·欧·克努特教授开创了数据结构的最初体系,他所着的《计算机程序设计技巧》第一卷《基本算法》是第一本较系统地阐述数据的逻辑结构和存储结构及其操作的着作。“数据结构”在计算机科学中是一门综合性的专业基础课。数据结构是介于数学、计算机硬件和计算机软件三者之间的一门核心课程。数据结构这一门课的内容不仅是一般程序设计(特别是非数值性程序设计)的基础,而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序的重要基础。
计算机是一门研究用计算机进行信息表示和处理的科学。这里面涉及到两个问题:
信息的表示
信息的处理
而信息的表示和组又直接关系到处理信息的程序的效率。随着计算机的普及,信息量的增加,信息范围的拓宽,使许多系统程序和应用程序的规模很大,结构又相当复杂。因此,为了编写出一个“好”的程序,必须分析待处理的对象的特征及各对象之间存在的关系,这就是数据结构这门课所要研究的问题。众所周知,计算机的程序是对信息进行加工处理。在大多数情况下,这些信息并不是没有组织,信息(数据)之间往往具有重要的结构关系,这就是数据结构的内容。数据的结构,直接影响算法的选择和效率。
计算机解决一个具体问题时,大致需要经过下列几个步骤:首先要从具体问题中抽象出一个适当的数学模型,然后设计一个解此数学模型的算法(Algorithm),最后编出程序、进行测试、调整直至得到最终解答。寻求数学模型的实质是分析问题,从中提取操作的对象,并找出这些操作对象之间含有的关系,然后用数学的语言加以描述。计算机算法与数据的结构密切相关,算法无不依附于具体的数据结构,数据结构直接关系到算法的选择和效率。运算是由计算机来完成,这就要设计相应的插入、删除和修改的算法 。也就是说,数据结构还需要给出每种结构类型所定义的各种运算的算法。
数据是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并由计算机程序处理的符号的总称。
数据元素是数据的基本单位,在计算机程序中通常作为一个整体考虑。一个数据元素由若干个数据项组成。数据项是数据的不可分割的最小单位。有两类数据元素:一类是不可分割的原子型数据元素,如:整数"5",字符 "N" 等;另一类是由多个款项构成的数据元素,其中每个款项被称为一个数据项。例如描述一个学生的信息的数据元素可由下列6个数据项组成。其中的出身日期又可以由三个数据项:"年"、"月"和"日"组成,则称"出身日期"为组合项,而其它不可分割的数据项为原子项。
关键字指的是能识别一个或多个数据元素的数据项。若能起唯一识别作用,则称之为 "主" 关键字,否则称之为 "次" 关键字。
数据对象是性质相同的数据元素的集合,是数据的一个子集。数据对象可以是有限的,也可以是无限的。
数据处理是指对数据进行查找、插入、删除、合并、排序、统计以及简单计算等的操作过程。在早期,计算机主要用于科学和工程计算,进入八十年代以后,计算机主要用于数据处理。据有关统计资料表明,现在计算机用于数据处理的时间比例达到80%以上,随着时间的推移和计算机应用的进一步普及,计算机用于数据处理的时间比例必将进一步增大。
数据结构是指同一数据元素类中各数据元素之间存在的关系。数据结构分别为逻辑结构、存储结构(物理结构)和数据的运算。数据的逻辑结构是对数据之间关系的描述,有时就把逻辑结构简称为数据结构。逻辑结构形式地定义为(K,R)(或(D,S)),其中,K是数据元素的有限集,R是K上的关系的有限集。
数据元素相互之间的关系称为结构。有四类基本结构:集合、线性结构、树形结构、图状结构(网状结构)。树形结构和图形结构全称为非线性结构。集合结构中的数据元素除了同属于一种类型外,别无其它关系。线性结构中元素之间存在一对一关系,树形结构中元素之间存在一对多关系,图形结构中元素之间存在多对多关系。在图形结构中每个结点的前驱结点数和后续结点数可以任意多个。
数据结构在计算机中的表示(映像)称为数据的物理(存储)结构。它包括数据元素的表示和关系的表示。数据元素之间的关系有两种不同的表示方法:顺序映象和非顺序映象,并由此得到两种不同的存储结构:顺序存储结构和链式存储结构。顺序存储方法:它是把逻辑上相邻的结点存储在物理位置相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现,由此得到的存储表示称为顺序存储结构。顺序存储结构是一种最基本的存储表示方法,通常借助于程序设计语言中的数组来实现。链接存储方法:它不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系是由附加的指针字段表示的。由此得到的存储表示称为链式存储结构,链式存储结构通常借助于程序设计语言中的指针类型来实现。索引存储方法:除建立存储结点信息外,还建立附加的索引表来标识结点的地址。散列存储方法:就是根据结点的关键字直接计算出该结点的存储地址。
数据结构中,逻辑上(逻辑结构:数据元素之间的逻辑关系)可以把数据结构分成线性结构和非线性结构。线性结构的顺序存储结构是一种随机存取的存储结构,线性表的链式存储结构是一种顺序存取的存储结构。线性表若采用链式存储表示时所有结点之间的存储单元地址可连续可不连续。逻辑结构与数据元素本身的形式、内容、相对位置、所含结点个数都无关。
算法的设计取决于数据(逻辑)结构,而算法的实现依赖于采用的存储结构。数据的运算是在数据的逻辑结构上定义的操作算法,如检索、插入、删除、更新的排序等。
Ⅷ 数据结构与算法实验
计算机科学系
计算机科学与技术专业 培养具有良好综合素质和开拓创新能力,系统掌握本专业的基本理论、基础知识和基本技能与方法,具有实际应用和科学研究能力的计算机及其相关技术与产业领域的复合型应用技术人才。
主要课程:数学分析、高等代数、数理逻辑、集合论与图论、计算机科学导论、程序设计基础、数字电路与逻辑设计、计算机组成原理、数据结构与算法、操作系统原理、汇编语言程序设计、数据库系统原理、编译原理、软件工程导论、计算机网络、计算机体系结构、并行与分布式计算、计算机图形学、信息安全技术、多媒体技术、Linux原理与应用等。专业课程还将安排相关的实验(实习)、课程设计或社会实践,以加强学生的实践能力与开拓能力。高年级同学还可以选修本学院其它专业的相关课程。
网络工程专业 培养具有实际运用先进的工程化方法和工具从事网络规划、设计、开发和维护等工作,具备工程项目的组织与管理能力的实用型、复合型网络工程技术与管理的高级人才。
主要课程:数学分析、高等代数、数理逻辑、集合论与图论、计算机科学导论、程序设计基础、数字电路与逻辑设计、计算机组成原理、数据结构与算法、计算机网络、操作系统原理、计算机体系结构、计算机接口技术、通信原理、网络系统设计、密码学与网络安全、无线通信与网络、Linux原理与应用等。专业课程还将安排相关的实验(实习)、课程设计或社会实践,以加强学生的实践能力与开拓能力。高年级同学还可以选修本学院其它专业的相关课程。
信息安全专业 培养具有扎实的数理基础,较好的外语和计算机技术运用能力,掌握信息安全的基本理论与技术、计算机与网络通信及其安全技术以及信息安全法律法规等方面的知识,能运用所学知识与技能去分析和解决相关的实际问题,具有较高的综合业务素质、较强的创新与实践能力,可以在政府、国防、金融、公安和商业等部门从事信息安全产品研发、信息系统安全分析与设计、信息安全技术咨询与评估服务、信息安全教育、信息安全管理与执法等工作的高级专业人才。
主要课程:数学分析、数理逻辑、集合论与图论、信息安全数学基础、计算机组成原理、程序设计基础、数据结构与算法、数据库系统原理、软件工程导论、计算机接口技术、计算机网络、通信原理、信息论基础、操作系统安全、Linux原理与应用、网络协议与验证、移动计算、计算机密码学、网络安全技术、计算机病毒、信息隐藏技术、电子商务技术、信息安全法律法规等。专业课程还将安排相关的实验(实习)、课程设计或社会实践,以加强学生的实践能力与开拓能力。高年级同学还可以选修本学院其它专业的相关课程。
上述专业的毕业生适合在计算件软硬件企业、网络公司、电信企业、金融、交通、银行等各类企事业单位就职,从事计算机技术管理、计算机控制、软件和信息安全产品的生产、开发、应用和维护工作,也可在政府管理部门、金融和经济管理部门从事计算机应用、网络信息管理和维护工作,还可在高等学校和研究部门从事教学、科研工作。
电子与通信工程系
电子信息科学与技术专业 培养基础扎实、知识面较宽、素质高、能力强,有一定创新能力、科学研究能力和解决实际问题的能力,适应21世纪社会和经济发展的需要,能从事电子信息科学与技术领域的科学研究、教学与应用技术等工作的复合型人才。
毕业生具有坚实的数理基础,掌握电子学与信息系统的基本理论和方法。熟悉电路与系统、电磁场与电磁波理论、微波与射频技术、计算机网络以及通信和计算机应用等技术。具有较高的实验能力和一定的分析和解决实际问题的能力;了解电子学与信息系统的新发展并具有一定的科学研究、应用研究、技术开发及教学等方面的能力。较为熟练地使用一种外国语阅读专业书刊及外文资料。
学生毕业后适合在通讯、银行、企业、机关等部门,从事电子技术和计算机技术管理、生产方面的开发应用,以及在高等学校和研究部门从事教学、科研工作。
主要课程:高等数学、概率论与数理统计、大学物理及实验、高级程序设计、电路基础理论、模拟电子技术及实验、数字电路与逻辑设计及实验、微型计算机原理及实验、高频电路、信号与系统、电磁场与电磁波、集成电路设计、信息论、微波技术与实验、数字信号处理、计算机通信与网络、通信原理、EDA原理及应用、单片机原理及应用、数据结构与算法、现代通信技术、数据库系统原理等,学生还可选修学校及学院其他专业的相关课程。
自动化专业 自动化是以电子技术、计算机技术、检测技术、通信技术和控制理论为基础,研究自动控制系统的组成结构、控制规律及其应用的学科。该专业培养德、智、体全面发展,注重德、智、体、美、劳,具有健全的心理素质和健康的体格。基础扎实、知识面宽、综合素质高、实践能力强,适应适应21世纪社会和经济发展的需要,能从事自动化和计算机网络控制工程领域的先进技术研究、设计、应用开发及教学等方面的高级复合型人才。
毕业生应具有控制科学与工程学科扎实的基础理论、基本技能和方法;具有对电子电气电路、控制系统进行分析、设计和研究开发的能力;掌握信号自动检测、数据处理的基础知识与技能;掌握计算机与网络控制技术;有严谨的科学作风和创新能力;具有独立进行科学研究、应用研究、分析和解决实际问题的能力。
学生毕业后适合在各类企业、国家政府部门、事业、通信、银行、军事等部门从事电子技术、计算机技术、通信技术及生产过程自动化方面的应用研究、产品开发及行政管理工作,以及在高等学校和研究等部门从事教学、科研及管理工作。
主要课程:高等数学、概率论与数理统计、工程数学、数值计算、高级程序设计、大学物理及实验、电路基础理论及实验、模拟电子技术及实验、数字电路与逻辑设计及实验、电力电子技术、电机及拖动基础、微型计算机原理及实验、自动控制原理及实验、信号与系统、现代控制理论、计算机控制技术及实验、计算机通信与网络、数字信号处理、电气与可编程控制器、过程控制工程、单片机原理及应用、自动测量技术、电力拖动自动控制系统、虚拟仪器技术、数据结构、操作系统、数据库系统原理、科技信息检索等,学生还可选修学校及学院其他专业的相关课程。
通信工程专业 培养基础扎实、知识面较宽、综合素质高、实践能力强,适应21世纪社会和经济发展的需要,系统掌握电路分析与信号处理理论、通信原理、网络理论、电磁场理论、传输原理、现代电信交换等专业基础理论;掌握各类通信网、通信系统及其主要设备的构成原理、技术性能、设计、调试、运行维护和管理的基本知识;对国内外通信工程及相关学科的现状和发展趋势有一定的了解;有严谨的科学作风和创新能力;具有独立对一般的通信系统和网络进行分析、设计和研究开发的能力。能从事现代通信工程和电信网络先进技术研究、设计、开发及教学等方面的高级复合型人才。
学生毕业后适合在电信企业、邮电管理部门、银行、交通等部门从事通信、电子技术和计算机应用等方面的管理和技术开发工作,也可以在高等学校和研究部门从事教学和科研工作。
主要课程:高等数学、概率论与数理统计、高级程序设计、大学物理及实验、电路基础理论、模拟电子技术及实验、数字电路与逻辑设计及实验、微型计算机原理及实验、高频电路、信号与系统、电磁场与电磁波、微波技术实验、通信原理、计算机网络、数字信号处理、信息论、操作系统、数据库系统原理、数字通信系统及实验、无线通信原理、现代电信交换、光纤通信、数字图象处理、数据结构、单片机原理及应用、计算机视觉等。学生还可选修该学院其他专业的相关课程。
谢谢
Ⅸ 设计数据结构相关算法的演示系统。
//顺序表
#include<iostream>
#include<string>
using namespace std;
#define N 100
//主串和子串的输入格式均为$abcdefg...,开始匹配的位置为1(或其他合法位置)匹配结果不包括'$'
int Index_KMP(string& s,string& p,int start_pos)
{
int in=1,jn=0;
int* next=new int[p.length()];
next[1]=0;
while(in<p.length()-1)
{
if(jn==0||p[in]==p[jn]){++in;++jn;next[in]=jn;}
else jn=next[jn];
}
cout<<"子串"<<p<<"的next数组值为:"<<endl;
int i;
for( i=1;i<p.length();i++)
cout<<next[i]<<endl;
i=start_pos;
int j=1;
while(i<=s.length()-1&&j<=p.length()-1)
{if(j==0||s[i]==p[j]){++i;++j;}
else j=next[j];
}
if(j>=p.length()) return i-p.length()+1;
else return 0;
}
typedef struct node
{
char data;
struct node *next;
}link;
link * get(link *l, int i)
{
link *p;int j=0;
p=l;
while((j<i) && (p->next!=NULL))
{p=p->next;j++;}
if(j==i)
return p;
else
return NULL;
}
link * ins (link *l, char ch,int i)
{ link *p,*s;
p=get(l,i-1);
if(p==NULL)
cout<<"输入有误"<<endl;
else
{
s=(link *)malloc(sizeof(link));
s->data=ch;
s->next=p->next;
p->next=s;
}
return l;
}
link * find(link *l, char ch)
{
link *p; int i=0; int j=0;
p=l;
while(p!=NULL)
{ i++;
if(p->data!=ch)
p=p->next;
else {cout<<"您查找的数据在第"<<i-1<<"个位置."<<endl;
j=1;p=p->next;
}
}
if(j!=1)
cout<<"您查找的数据不在线性表中."<<endl;
return l;
}
link * del(link *l, int i)
{
link *p,*s;
p=get(l,i-1);
if(p==NULL)
cout<<"输入有误"<<endl;
else
{
s=p->next;
p->next=s->next;
free(s);
}
return l;
}
link * add(link *l )
{
link *p,*s;
cout<<"请输入一串单字符数据,以*结束!"<<endl;
char ch;
link *HEAD;
link *R,*P,*L;
HEAD=(link *)malloc(sizeof(link));
HEAD->next=NULL;
R=HEAD;
getchar();
ch=getchar();
while(ch!='*')
{
P=(link *)malloc(sizeof(link));
P->data=ch;P->next=NULL;
R->next=P;R=R->next;
getchar();
ch=getchar();
}
L=HEAD;
cout<<"当前输入的线性表为:"<<endl;
P=L;P=P->next;
if(L!=NULL)
do
{cout<<P->data<<" ";
P=P->next;
}while(P!=NULL);
cout<<endl;
p=l;
while(p->next!=NULL)
p=p->next;
s=L;
p->next=s->next;
p=l;
return l;
}
link * print(link *l)
{ int i,k;
char ch;
link *p,*q;
cout<<"当前线性表为:"<<endl;
p=l;p=p->next;
if(l!=NULL)
do
{cout<<p->data<<" ";
p=p->next;
}while(p!=NULL);
cout<<endl;
cout<<" ╔=========================================================╗\n";
cout<<" 链表 \n";
cout<<" ╚=========================================================╝\n";
cout<<" 请选择您要的操作: \n";
cout<<" ╔=========================================================╗\n";
cout<<" * 1、插入 * \n";
cout<<" * 2、查找 * \n";
cout<<" * 3、删除 * \n";
cout<<" * 4、合并 * \n";
cout<<" * 0、退出 * \n";
cout<<" ╚=========================================================╝\n";
cout<<endl;
cin>>k;
if(k==1)
{
cout<<" 请输入您要插入的数据值:";
cin>>ch;
cout<<" 请输入您要插入的位置:";
cin>>i;
p=ins(l,ch,i);
q=print(l);
}
else if(k==2)
{
cout<<" 请输入您要查找的数据值:";
cin>>ch;
p=find(l,ch);
q=print(l);
}
else if(k==3)
{
cout<<" 请输入您要删除的数据的位置:";
cin>>i;
p=del(l,i);
q=print(l);
}
else if(k==4)
{ p=add(l);
q=print(l);
}
else if(k==0)
;
else
{cout<<"输入错误!"<<endl;
q=print(l);}
return l;
}
#define MaxSize 100
typedef int DataType;
class SeqList
{
DataType list[MaxSize];
int length;
public:
SeqList(){length=0;}
void SLCreat(int n);
void SLInsert(int i,DataType x);
void SLDelete(int i);
int GetLength(){return length;}
int SLFind(DataType x);
DataType SLGet(int i);
int SLIsEmpty();
void SLPrint();
};
//创建顺序表
void SeqList::SLCreat(int n)
{
DataType x;
cout << "请输入数据元素:";
for (int i=0;i<n;i++){
cin >>x;
list[i]=x;
length++;
}
}
//在顺序表L中的i位置插入数据元素x
void SeqList::SLInsert(int i,DataType x)
{
int k;
if (length>=MaxSize)
cout<< "表已满,无法插入!"<<endl;
else if (i<0||i>length)
cout <<"参数i不合理!" <<endl;
else
{
for (k=length;k>i;k--)
{list[k]=list[k-1];}
list[i]=x;
length++;
}
}
//删除第i个位置的数据元素
void SeqList::SLDelete(int i)
{
int k;
if (!SLIsEmpty())
cout << "表已空,无法删除!"<<endl;
else if (i<0||i>length)
cout << "参数i不合理!"<<endl;
else
{
for (k=i-1;k<length;k++)
list[k]=list[k+1];
length--;
}
}
//查找数据元素x在表中的位置
int SeqList::SLFind(DataType x)
{
int i=0;
while (i<length&&list[i]!=x) i++;
if (i>=length) return -1;
else return i+1;
}
//获取第i个位置的元素的数值
DataType SeqList::SLGet(int i)
{
if (i<0||i>length)
{
cout<<"参数i不合理!"<<endl;
return 0;
}
else
return list[i-1];
}
//判断顺序表是否为空
int SeqList::SLIsEmpty()
{
if (length<=0) return 0;
else return 1;
}
//奖顺序表显示在屏幕上
void SeqList::SLPrint()
{
if (!SLIsEmpty())
cout<<"空表!"<<endl;
else
for (int i=0;i<length;i++)
cout<<list[i]<<" ";
cout <<endl;
}
int main()
{
int select;
char Continue='Y';
while(Continue=='Y')
{
cout<<" ╔=========================================================╗\n";
cout<<" 数据结构演示系统 \n";
cout<<" ╚=========================================================╝\n";
cout<<" 请选择操作: \n";
cout<<" ╔=========================================================╗\n";
cout<<" * 1.顺序表操作 * \n";
cout<<" * 2.链表操作 * \n";
cout<<" * 3.字符串匹配 * \n";
cout<<" ╚=========================================================╝\n";
cout<<endl;
cin>>select;
switch(select)
{
case 1:
{
SeqList myList;
int i,n,flag=1,select1;
DataType x;
cout<<" ╔=========================================================╗\n";
cout<<" 顺序表 \n";
cout<<" =========================================================== \n";
cout<<" * 1、建立顺序表 * \n";
cout<<" * 2、求第i个位置上的数值 * \n";
cout<<" * 3、求x数值的位置: * \n";
cout<<" * 4、在第i个位置插入数值元素x * \n";
cout<<" * 5、删除第i个位置上的数值 * \n";
cout<<" * 6、退出 * \n";
cout<<" ╚=========================================================╝\n";
cout<<endl;
while (flag)
{
cout<<"请选择操作: ";
cin>>select1;
switch(select1)
{
case 1:
cout<<"请输入顺序表的长度: ";
cin>>n;
myList.SLCreat(n);
cout<<"你所输入的顺序表为: ";
myList.SLPrint();
break;
case 2:
cout<<"请输入i的位置: ";
cin>>i;
cout<<"第"<<i<<"个位置上的数值为: "<<myList.SLGet(i)<<endl;
break;
case 3:
cout<<"请输入x的值: ";
cin>>x;
i=myList.SLFind(x);
if(i!=-1) cout<<"x的位置为: "<<i<<endl;
else cout<<"没有找到!";
break;
case 4:
cout<<"请输入要插入的元素的位置i和数值x: ";
cin>>i>>x;
myList.SLInsert(i,x);
cout<<"插入后的顺序表为: ";
myList.SLPrint();
break;
case 5:
cout<<"请输入要删除的元素的位置: ";
cin>>i;
myList.SLDelete(i);
cout<<"删除后的顺序表为: ";
myList.SLPrint();
break;
case 6:
flag=0;
//break;
}
}
}
break;
case 2:
{
cout<<"请输入一串单字符数据,以*结束!"<<endl;
char ch;
//link *head;
link *r,*p,*q,*l;
l=(link *)malloc(sizeof(link));
l->next=NULL;
r=l;
ch=getchar();
// getchar();
while(ch!='*')
{
p=(link *)malloc(sizeof(link));
p->data=ch;p->next=NULL;
r->next=p;r=r->next;
ch=getchar();
// getchar();
}
//l=head;
q=print(l);
//return 0;
}
break;
case 3:
{
string s,p;
int pos,start_pos;
cout<<"输入主串:"<<endl;
cin>>s;
cout<<"输入子串"<<endl;
cin>>p;
cout<<"输入从主串开始匹配的位置:"<<endl;
cin>>start_pos;
pos=Index_KMP(s,p,start_pos);
if(!pos) cout<<"There's no substring("<<p<<")in mainstring("<<s<<")"<<endl;
else cout<<"The postion of substring("<<p<<")in mainstring("<<s<<")is "<<pos<<endl;
//system("pause");
//return 0;
}
break;
default :break;
}
}
cout<<"Continue(Y/N)?"<<endl;
cin>>Continue;
return 0;
}
Ⅹ 数据结构与算法分析
本文出自:
www点54manong点com
请尊重原创,转载请注明出处,谢谢!
什么是数据结构,为什么要学习数据结构?数据结构是否是一门纯数学课程?它在专业课程体系中起什么样的作用?我们要怎么才能学好数据结构?… 相信同学们在刚开始《数据结构》这门课的学习时,心里有着类似前面几个问题的这样那样的疑问。希望下面的内容能帮助大家消除疑惑,下定决心坚持学好这门课:
1 学习数据数据结构的意义
数据结构是计算机科学与技术专业、计算机信息管理与应用专业,电子商务等专业的基础课,是十分重要的核心课程。所有的计算机系统软件和应用软件都要用到各种类型的数据结构。因此,要想更好地运用计算机来解决实际问题,仅掌握几种计算机程序设计语言是难以应付当前众多复杂的课题。要想有效地使用计算机、充分发挥计算机的性能,还必须学习和掌握好数据结构的有关知识。打好“数据结构”这门课程的扎实基础,对于学习计算机专业的其他课程,如操作系统、数据库管理系统、软件工程、编译原理、人工智能、图视学等都是十分有益的。
2 为什么要学习数据结构
在计算机发展的初期,人们使用计算机的目的主要是处理数值计算问题。当我们使用计算机来解决一个具体问题时,一般需要经过下列几个步骤:首先要从该具体问题抽象出一个适当的数学模型,然后设计或选择一个解此数学模型的算法,最后编出程序进行调试、测试,直至得到最终的解答。例如,求解梁架结构中应力的数学模型的线性方程组,可以使用迭代算法来求解。
由于当时所涉及的运算对象是简单的整型、实型或布尔类型数据,所以程序设计者的主要精力是集中于程序设计的技巧上,而无须重视数据结构。随着计算机应用领域的扩大和软、硬件的发展,非数值计算问题越来越显得重要。据统计,当今处理非数值计算性问题占用了85%以上的机器时间。这类问题涉及到的数据结构更为复杂,数据元素之间的相互关系一般无法用数学方程式加以描述。因此,解决这类问题的关键不再是数学分析和计算方法,而是要设计出合适的数据结构,才能有效地解决问题。下面所列举的就是属于这一类的具体问题。
例1:图书馆信息检索系统。当我们根据书名查找某本书有关情况的时候;或者根据作者或某个出版社查找有关书籍的时候,或根据书刊号查找作者和出版社等有关情况的时候,只要我们建立了相关的数据结构,按照某种算法编写了相关程序,就可以实现计算机自动检索。由此,可以在图书馆信息检索系统中建立一张按书刊号顺序排列的图书信息表和分别按作者、书名、出版社顺序排列的索引表,如图1.1所示。由这四张表构成的文件便是图书信息检索的数学模型,计算机的主要操作便是按照某个特定要求(如给定书名)对图书馆藏书信息文件进行查询。
诸如此类的还有学生信息查询系统、商场商品管理系统、仓库物资管理系统等。在这类文档管理的数学模型中,计算机处理的对象之间通常存在着的是一种简单的线性关系,这类数学模型可称为线性的数据结构。
例2:八皇后问题。在八皇后问题中,处理过程不是根据某种确定的计算法则,而是利用试探和回溯的探索技术求解。为了求得合理布局,在计算机中要存储布局的当前状态。从最初的布局状态开始,一步步地进行试探,每试探一步形成一个新的状态,整个试探过程形成了一棵隐含的状态树。如图1.2所示(为了描述方便,将八皇后问题简化为四皇后问题)。回溯法求解过程实质上就是一个遍历状态树的过程。在这个问题中所出现的树也是一种数据结构,它可以应用在许多非数值计算的问题中。
例3:教学计划编排问题。一个教学计划包含许多课程,在教学计划包含的许多课程之间,有些必须按规定的先后次序进行,有些则没有次序要求。即有些课程之间有先修和后续的关系,有些课程可以任意安排次序。这种各个课程之间的次序关系可用一个称作图的数据结构来表示,如图1.3所示。有向图中的每个顶点表示一门课程,如果从顶点vi到vj之间存在有向边<vi,vj>,则表示课程i必须先于课程j进行。由以上三个例子可见,描述这类非数值计算问题的数学模型不再是数学方程,而是诸如线性表、树、图之类的数据结构。因此,可以说数据结构课程主要是研究非数值计算的程序设计问题中所出现的计算机操作对象以及它们之间的关系和操作的学科。
学习数据结构的目的是为了了解计算机处理对象的特性,将实际问题中所涉及的处理对象在计算机中表示出来并对它们进行处理。与此同时,通过算法训练来提高学生的思维能力,通过程序设计的技能训练来促进学生的综合应用能力和专业素质的提高。
3数据结构课程的内容
数据结构与数学、计算机硬件和软件有十分密切的关系,它是介于数学、计算机硬件和计算机软件之间的一门计算机专业的核心课程,是高级程序设计语言、操作系统、编译原理、数据库、人工智能、图视学等课程的基础。同时,数据结构技术也广泛应用于信息科学、系统工程、应用数学以及各种工程技术领域。
数据结构课程重在讨论软件开发过程中的方案设计阶段、同时设计编码和分析阶段的若干基本问题。此外,为了构造出好的数据结构及其实现,还需考虑数据结构及其实现的评价与选择。因此,数据结构的内容包括三个层次的五个“要素”,如图1.3所示。
数据结构的核心技术是分解与抽象。通过分解可以划分出数据的三个层次;再通过抽象,舍弃数据元素的具体内容,就得到逻辑结构。类似地,通过分解将处理要求划分成各种功能,再通过抽象舍弃实现细节,就得到运算的定义。上述两个方面的结合使我们将问题变换为数据结构。这是一个从具体(即具体问题)到抽象(即数据结构)的过程。然后,通过增加对实现细节的考虑进一步得到存储结构和实现运算,从而完成设计任务。这是一个从抽象(即数据结构)到具体(即具体实现)的过程。熟练地掌握这两个过程是数据结构课程在专业技能培养方面的基本目标。
结束语:数据结构作为一门独立的课程在国外是从1968年才开始的,但在此之前其有关内容已散见于编译原理及操作系统之中。20世纪60年代中期,美国的一些大学开始设立有关课程,但当时的课程名称并不叫数据结构。1968年美国唐.欧.克努特教授开创了数据结构的最初体系,他所着的《计算机程序设计技巧》第一卷《基本算法》是第一本较系统地阐述数据的逻辑结构和存储结构及其操作的着作。从20世纪60年代末到70年代初,出现了大型程序,软件也相对独立,结构程序设计成为程序设计方法学的主要内容,人们越来越重视数据结构。从70年代中期到80年代,各种版本的数据结构着作相继出现。目前,数据结构的发展并未终结,一方面,面向各专门领域中特殊问题的数据结构得到研究和发展,如多维图形数据结构等;另一方面,从抽象数据类型和面向对象的观点来讨论数据结构已成为一种新的趋势,越来越被人们所重视。