计算机软件开发技术C#期末复习(含SQL语句例题)同济大学

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、数据结构

1、概念部分

1)数据结构的概念及其三要素

a.数据结构:描述了一组性质相同的数据元素及元素间的相互关系。

b.基本概念:

①数据:描述客观事物的信息集,是程序处理的对象。

①数据元素:是数据集合中的个体,构成数据对象的基本单位。一个数据元素可由若干个数据

项组成。

①数据项:是数据的最小单位。

c.数据结构的三要素:

①逻辑结构:数据元素之间的逻辑关系。

②存储结构:数据元素在计算机中的储存方式。

③运算(操作):数据元素定义上的运算集合。

2)数据逻辑结构的基本类型,数据储存表示的基本方法及其特点:

a. 数据逻辑结构的基本类型:

线性结构:1对1

树型结构:1对多

图状结构:多对多

集合:除了同属一个集合,无其他关系

b. 数据储存表示的基本方法:

顺序表示:用物理上连续的存储空间,顺序存放逻辑上相邻的数据元素。(主要用于线性数据结构)主要特点:

⒈要求存储在一片连续的地址中。

⒉结点中只有自身信息域,没有连接信息域。存储密度大,存储空间利用率高。

⒊可以通过计算直接确定数据结构中第i个结点的存储地址。可以直接对记录进行存取。

即可以对记录直接进行存取;如数组下标

⒋插入、删除运算会引起大量节点的移动(效率低)

链式表示:储存空间物理上不连续,数据元素之间的关系由指针确定

主要特点:

⒈结点由两类域组成:数据域和指针域。储存密度小。

⒉逻辑上相邻的节点物理上不必邻接,既可实现线性数据结构,又可用于表示非线性数

据结构。

⒊插入,删除操作灵活方便,不必移动结点,只要改变结点中的指针即可。

⒋程序实现复杂度高。

3)栈、队列等线性结构的基本概念、性质、存储方式及各自的特点(看129页8、9题)栈(Stack)

是一种特殊的线性数据结构,其操作被限制在一端,这一端称为栈顶,而另一端称为栈底,具

有后进先出的特点。

根据栈中数据元素存储方式的不同,分为顺序存储栈、链式存储栈。

队列(Queue)

也是操作受限的线性表,允许在表的一端进行插入,另一端进行删除。允许插入的一端叫做队

尾(tail),允许删除的一端则称队头(head)。具有先进先出的特点。

根据队列元素数据存储方式的不同,分为顺序存储队列、链式存储队列。

4)二叉树的基本概念、性质、遍历以及由遍历序列构造出二叉树的方法(看129页6、10、12题)

a. 定义:二叉树是n(n≥0)个结点的有限集合,且满足以下两条:

①或者为空二叉树,即n=0;

②或者由一个根结点和两棵互不相交的被称为根的左子树和右子树所组成,左子树和右子树分

别又是一棵二叉树。

注意:

①二叉树的结点子树要明确指出左子树和右子树,即便结点只有一棵子树。

②二叉树允许为空。

③每个结点最多有两棵子树,故二叉树不存在度大于2的结点。

b. 两种特殊的二叉树:

满二叉树:所有分支结点都有左子树和右子树,且所有叶结点都在同一层上。深度为K的满二叉树有2K-1 个结点。

完全二叉树:一棵深度为K的二叉树,其叶结点都在第K层或第K-1层上(只有最下两层的度小于2),且最下层上的结点都集中在该层最左边的若干位置上。从满二叉树叶子所

在的层次中,自右向左连续删除若干叶子所得到的二叉树就是完全二叉树。

c. 二叉树的性质:

一般二叉树的性质

性质1 在非空二叉树的第i层,最多有2i-1个结点。

性质2 高度为k的二叉树,结点总数最多为2k-1。

性质3 对任何一棵非空二叉树,若叶结点个数为n0,度为2的结点个数为n2, 则有n0 = n2 + 1。

亦即包含n个结点的二叉树必有n-1条树枝(分枝)。

完全二叉树的性质

性质4 具有n个结点的完全二叉树的高度为log2n+1

性质5 对一棵有n个结点的完全二叉树,若按自上而下,自左至右的顺序对二叉树中的所有结点从1开始编号,则对任一结点i(1≤i≤n),有:

①若i=1,则结点i是二叉树的根,无双亲;若i>1,则其双亲结点是[i/2]。

②如果2i>n,结点i无左孩子(此时结点i为叶子);否则其左孩子是结点2i。

③若2i+1>n,结点i无右孩子;否则其右孩子是结点2i+1

d. 3种遍历方法的递归算法(若树非空):

1.先序遍历(树T):根→左→右:ABDEHICFG

2.中序遍历(树T):左→根→右:DBHEIAFCG

3.后序遍历(树T):左→右→根:DHIEBFGCA

画二叉树

已知一棵二叉树的先序序列和中序序列,或者后序序列和中序序列,就可画出该二叉树;

但若只给出一棵二叉树的先序序列和后序序列,则无法画出该二叉树。

2、程序与算法

1)快速排序(一趟)、归并排序(一趟)算法思想及实现

(注:课本129页13题:{12,2,16,30,28,10,20,6,18}

一趟快速排序的结果为:6,2,10,12,28,30,20,16,18

一趟归并的结果:2,12,16,30,10,28,6,20,18)

a.快速排序(一趟)(程序在119页)

private void qkOne(int start, int end, ref int mid)

//【start, end分别为待排序列的首尾位置,mid为一趟分割后找到的分区位置】

{ int i,j,x;

i=start;

j = end;

x = data[i]; //【将第1个值保存在x中,作基准】

while (i != j)

{while (i < j && data[j]>=x)

j--; //【自右向左扫描】

if (i < j)

{data[i] = data[j];

i++;

while(i

i++; //【自左向右扫描】

if (i < j)

{data[j] = data[i];

j--; } } }

mid=i;

data[i]=x; }

b.归并排序(一趟)

private void merge(DataType[] a, int k, DataType[] b)

{int n = this.length; //【注意n应为待排序列的长度】

int i = 0;

while (i + 2 * k - 1 < n)

{two2one(a, i, i + k - 1, i + 2 * k - 1, b); //【归并长度为k的两子序列】

i = i + 2 * k; }

if (i + k < n ) //【余下两个子序列,但其中一个长度小于k】

two2one(a, i, i + k - 1, n - 1, b);

else //【将最后一个子序列追加到数组b中】

相关文档
最新文档