C语言数据结构+数据库+操做系统

http://cv.qiaobutang.com/post/55c419b20cf2009bd4607795node

第二部分是专业相关的C ,数据库,操做系统,数据结构。算法

http://c.biancheng.net/cpp/u/shuju/数据库

数据(Data)是信息的载体,它可以被计算机识别、存储和加工处理。它是计算机程序加工的原料,应用程序处理各类各样的数据。计算机科学中,所谓数据就是计算机加工处理的对象,它能够是数值数据,也能够是非数值数据。数值数据是一些整数、实数或复数,主要用于工程计算、科学计算和商务处理等;非数值数据包括字符、文字、图形、图像、语音等。数组

数据结构(Data Structure)是指互相之间存在着一种或多种关系的数据元素的集合。在任何问题中,数据元素之间都不会是孤立的,在它们之间都存在着这样或那样的关系,这种数据元素之间的关系称为结构。根据数据元素间关系的不一样特性,一般有下列四类基本的结构:数据结构

  1. 集合结构。在集合结构中,数据元素间的关系是“属于同一个集合”。集合是元素 关系极为松散的一种结构。
  2. 线性结构。该结构的数据元素之间存在着一对一的关系。
  3. 树型结构。该结构的数据元素之间存在着一对多的关系。
  4. 图形结构。该结构的数据元素之间存在着多对多的关系,图形结构也称做网状结构。

 数据的存储结构可采用顺序存储或链式存储的方法。

顺序存储方法是把逻辑上相邻的元素存储在物理位置相邻的存储单元中,由此获得的存储表示称为顺序存储结构。顺序存储结构是一种最基本的存储表示方法,一般借助于程序设计语言中的数组来实现。

链式存储方法对逻辑上相邻的元素不要求其物理位置相邻,元素间的逻辑关系经过附设的指针字段来表示,由此获得的存储表示称为链式存储结构,链式存储结构一般借助于程序设计语言中的指针类型来实现。

除了一般采用的顺序存储方法和链式存储方法外,有时为了查找的方便还采用索引存储方法和散列存储方法。函数

 

 数据类型

在高级程序设计语言中,数据类型可分为两类:一类是原子类型,另外一类则是结构类型。原子类型的值是不可分解的。如C 语言中整型、字符型、浮点型、双精度型等基本类型,分别用保留字int、char、float、double 标识。而结构类型的值是由若干成分按某种结构组成的,所以是可分解的,而且它的成分能够是非结构的,也能够是结构的。例如,数组的值由若干份量组,每一个份量能够是整数,也能够是数组等。在某种意义上,数据结构能够当作是“一组具备相同结构的值”,而数据类型则可被当作是由一种数据结构和定义在其上的一组操做所组成的。post

⒈时间复杂度

一个程序的时间复杂度(Time complexity)是指程序运行从开始到结束所须要的时间。

一个算法是由控制结构和原操做构成的,其执行时间取决于二者的综合效果。为了便于比较同一问题的不一样的算法,一般的作法是:从算法中选取一种对于所研究的问题来讲基本运算的原操做,以该原操做重复执行的次数做为算法的时间度量。通常状况下,算法中原操做重复执行的次数是规模n 的某个函数T(n)。许多时候要精确地计算T(n)是困难的,咱们引入渐进时间复杂度在数量上估计一个算法的执行时间,也可以达到分析算法的目的。

定义(大Ο记号):若是存在两个正常数c 和n0,使得对全部的n,n≥n0,有:spa

f(n) ≤ cg(n)操作系统

则有:.net

f(n) = Ο(g(n))


例如,一个程序的实际执行时间为T(n)=2.7n3+3.8n2+5.3。则T(n)=Ο(n3)。使用大Ο记号表示的算法的时间复杂度,称为算法的渐进时间复杂度(Asymptotic Complexity)。

一般用Ο(1)表示常数计算时间。常见的渐进时间复杂度有:

Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n2)<Ο(n3)<Ο(2n)

 

⒉空间复杂度


一个程序的空间复杂度(Space complexity)是指程序运行从开始到结束所需的存储量。

程序的一次运行是针对所求解的问题的某一特定实例而言的。例如,求解排序问题的排序算法的每次执行是对一组特定个数的元素进行排序。对该组元素的排序是排序问题的一个实例。元素个数可视为该实例的特征。程序运行所需的存储空间包括如下两部分:

⑴固定部分。这部分空间与所处理数据的大小和个数无关,或者称与问题的实例的特征无关。主要包括程序代码、常量、简单变量、定长成分的结构变量所占的空间。

⑵可变部分。这部分空间大小与算法在某次执行中处理的特定数据的大小和规模有关。例如100 个数据元素的排序算法与1000 个数据元素的排序算法所需的存储空间显然是不一样的。

线性表的定义


线性表是一种线性结构。线性结构的特色是数据元素之间是一种线性关系,数据元素“一个接一个的排列”。在一个线性表中数据元素的类型是相同的,或者说线性表是由同一类型的数据元素构成的线性结构。在实际问题中线性表的例子是不少的,如学生状况信息表是一个线性表:表中数据元素的类型为学生类型; 一个字符串也是一个线性表:表中数据元素的类型为字符型,等等。

综上所述,线性表定义以下:线性表是具备相同数据类型的n(n>=0)个数据元素的有限序列,一般记为:

(a1,a2,… ai-1,ai,ai+1,…an)

其中n为表长, n=0 时称为空表。
表中相邻元素之间存在着顺序关系。将ai-1 称为ai 的直接前趋,ai+1 称为ai 的直接后继。就是说:对于ai,当i=2,...,n 时,有且仅有一个直接前趋ai-1.,当i=1,2,...,n-1 时,有且仅有一个直接后继ai+1,而a1 是表中第一个元素,它没有前趋,an 是最后一个元素无后继。

 线性表的基本操做


在第一章中提到,数据结构的运算是定义在逻辑结构层次上的,而运算的具体实现是创建在存储结构上的,所以下面定义的线性表的基本运算做为逻辑结构的一部分,每个操做的具体实现只有在肯定了线性表的存储结构以后才能完成。

线性表上的基本操做有:

⑴ 线性表初始化:Init_List(L)
初始条件:表L不存在操做结果:构造一个空的线性表

⑵ 求线性表的长度:Length_List(L)
初始条件:表L存在
操做结果:返回线性表中的所含元素的个数

⑶ 取表元:Get_List(L,i)
初始条件:表L存在且1<=i<=Length_List(L)
操做结果:返回线性表L中的第i个元素的值或地址

⑷ 按值查找:Locate_List(L,x),x是给定的一个数据元素。
初始条件:线性表L存在
操做结果:在表L中查找值为x的数据元素,其结果返回在L中首次出现的值为x的那个元素的序号或地址,称为查找成功; 不然,在L中未找到值为x的数据元素,返回一特殊值表示查找失败。

⑸ 插入操做:Insert_List(L,i,x)
初始条件:线性表L存在,插入位置正确(1<=i<=n+1,n为插入前的表长)。
操做结果:在线性表L的第i 个位置上插入一个值为x 的新元素,这样使原序号为i , i+1, ... , n 的数据元素的序号变为i+1,i+2, ... , n+1,插入后表长=原表长+1。

⑹ 删除操做:Delete_List(L,i)
初始条件:线性表L存在,1<=i<=n。
操做结果:在线性表L中删除序号为i的数据元素,删除后使序号为i+1, i+2,..., n的元素变为序号为i, i+1,...,n-1,新表长=原表长-1。

线性表的顺序存储是指在内存中用地址连续的一块存储空间顺序存放线性表的各元素,用这种存储形式存储的线性表称其为顺序表。由于内存中的地址空间是线性的,所以,用物理上的相邻实现数据元素之间的逻辑相邻关系是既简单,又天然的。如图2.1 所示。

设a1的存储地址为Loc(a1),每一个数据元素占d个存储地址,则第i个数据元素的地址为:

Loc(ai)=Loc(a1)+(i-1)*d 1<=i<=n

单链表


链表是经过一组任意的存储单元来存储线性表中的数据元素的,那么怎样表示出数据元素之间的线性关系呢?为创建起数据元素之间的线性关系,对每一个数据元素ai,除了存放数据元素的自身的信息ai 以外,还须要和ai一块儿存放其后继ai+1 所在的存贮单元的地址,这两部分信息组成一个“结点”,结点的结构如图2.6 所示,每一个元素都如此。存放数据元素信息的称为数据域,存放其后继地址的称为指针域。所以n个元素的线性表经过每一个结点的指针域拉成了一个“链子”,称之为链表。由于每一个结点中只有一个指向后继的指针,因此称其为单链表。

链表是由一个个结点构成的,结点定义以下:
typedef struct node
{ datatype data;
struct node *next;
} LNode,*LinkList;

定义头指针变量:
LinkList H;

 

在链表的头部插入结点创建单链表

链表与顺序表不一样,它是一种动态管理的存储结构,链表中的每一个结点占用的存储空间不是预先分配,而是运行时系统根据需求而生成的,所以创建单链表从空表开始,每读入一个数据元素则申请一个结点,而后插在链表的头部,如图2.10 展示了线性表:(25,45,18,76,29)之链表的创建过程,由于是在链表的头部插入,读入数据的顺序和线性表中的逻辑顺序是相反的。

在单循环链表上的操做基本上与非循环链表相同,只是将原来判断指针是否为NULL变为是不是头指针而已,没有其它较大的变化。

下面先请看图2.22 ,在图2.22中,规模较大的结构数组sd[MAXSIZE] 中有两个链表: 其中链表SL是一个带头结点的单链表,表示了线性表(a1, a2, a3, a4, a5),而另外一个单链表AV是将当前sd 中的空结点组成的链表。

相关文章
相关标签/搜索