数据结构中的一些重要概念

第一章 绪论

1、时间复杂度:之最坏情况下,估算算法执行时间的一个上界。(算法的时间复杂度取决于:问题规模、待处理数据的初态、计算机的配置)。

空间复杂度:算法所需存储空间的度量

算法原地工作是指算法执行时所需要的辅助空间,其相对于输入常量而言是个常数

2、数据结构:相互之间存在一中或多种特定关系的数据元素的集合(数据元素的组织形式)。、3、逻辑结构:数据元素之间,抽象化的相互关系,与数据的存储无关,独立于计算机,是从具体问题中抽象出来的数学模型。(集合、线性结构、树、图)

4、存储结构:数据元素及其关系在计算机存储器中的存储方式。

5、线性结构:有且仅有一个开始和一个终端结点,并且所有结点都最多只有一个直接前驱和一个后继。  (线性表、栈、队列、串)

6、非线性结构:一个结点可能有多个直接前驱和直接后继。  (树、图)

7、顺序存储结构:借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系。

8:链式存储结构:借助指示元素存储地址的指针来表示数据元素之间的的逻辑关系。

9:数据的运算:插入、删除、修改、查找、排序。

10、 数据类型:一种程序设计语言中,变量所具有的数据种类  (数据结构,是类模板)

11、基本数据类型:int char double float void   (计算机中已实现的数据结构)

12、构造数据类型:数组、结构体、共用体、文件

13、算法:是指令的有限序列集,对特定问题求解步骤的一中描述。描述算法:自然语言、流程图、程序设计语言、伪码。

对一个算法的评价:正确性、可读性、健壮性、高效性

正确性:正确实现预定的功能
可读性:易于阅读和理解,以便调试、修改、扩充
健壮性:当环境发生变化时,算法可以适当做出反应或进行处理、不会产生不需要的运行结果
高效性:包括时间和空间两个方面。

第二章:线性表

关于顺序表和链表各种运算的时间复杂度(语句频度)
一、顺序表
1、取值 :O(1)
2、查找:O(n)    (n+1)/2
3、插入:O(n)     n/2
4、删除:O(n)    (n-1)/2

二、链表
1、取值:O(n)    (n-1)/2
2、查找:O(n)      (n-1)/2
3、插入:O(n)       (n-1)/2
4、删除:O(n)      (n-1)/2
前插、尾插:O(n)

链表的一些基本操作:

1、在双向链表存储结构中,删除p所指的结点时须修改指针()

p->prior->next=p->next; 
p->next->prior=p->prior;

2、带头结点的循环双链表L为空表的条件是()。

L->next==L;

3、设rear是指向非空的带头结点的循环单链表的尾元结点的指针。若想删除链表的首元结点,则应执行()操作。
s=rear->next->next; 
rear->next->next=s->next;
delete s;

4、已知L是带头结点单链表的表头指针,则从链上摘下首元结点的语句是()。

q=L->next;
L-next=q->next;

5、设一个非空的带头结点的循环单链表的头指针为L,当L->next->next->next==L时,链表的长度可能是(2)。

6、不带头结点的单链表head为空的判定条件是()。

head==NULL;

7、已知指针h指向一个带头结点的非空单循环链表,结点结构为:(data,next),其中next是指向直接后继结点的指针,p是尾指针,q为临时指针。现要删除该链表的第一个元素,正确的语句序列是(    )。

q=h->next;
h->next=q->next;
if(p==q) p=h;
free(q);

8、单链表中,将s所指结点插到p所指结点之后语句:

s->next=p->next;
p->next=s;

9、双向循环链表中,在P指针所指的结点后插入q所指向的新节点操作:
q.prior=p;
q.next=p.next;
p.next.prior=q;
p.next=q;

、设顺序线性表中有n个数据元素,则删除表中第i个元素需要移动(n-i)个元素。

 已知两个长度分别为m和n的升序链表,若将它们合并为一个长度为m+n的降序链表,则最坏情况下的时间复杂度是O(max(m,n))

将两个长度为n的递增有序表归并成一个长度为2n的递增有序表,最少需要进行关键字比较(n)次。

将两个各有n个元素的有序线性表合并成一个有序线性表,元素比较次数最多为()。

第三章  栈和队列

1、链栈相比于顺序栈的优点:不会出现栈满的情况。

关于栈的一些基本操作:

1、顺序栈存放在数组a[n]中,top指向栈顶,top= -1表示栈空。在栈不满的情况下,
元素x进栈的操作为()。

a[++top]=x;

2、链栈的结点表示为(data, next),top指向栈顶。则插入结点x的操作为()。

x->next=top;top=x;

3、链栈的结点表示为(data, link),top指向栈顶,若想删除栈顶结点,并将删除结点的值保存到x中,则应执行操作()。

x=top;top=top->link;

4、若一个栈以向量V[1,…,n]存储,初始栈顶指针top设为n+1,则元素x进栈的正确操作是(    )。

top--;V[top]=x;

2、队列的基本操作

1、数组a[0…n]用来存放循环队列,则入队时的操作是()。

rear=(rear+1) mod n

2、循环队列存放在数组Q[n]中。h指向头元素,t指向队尾元素的后一个位置。设队列中元素个数小于n,则队列中一共有()个元素。

(n+h-t)% n

3、循环队列存放在数组a[15]中,front指向队头元素的前一个位置,rear指向队尾元素。当front=8, rear=3时,队列的长度为()。

    10

4、链队中队头指针为front,队尾指针为rear,则将x结点插入队列需要执行的操作是()。

x->next=null; rear->next=x; rear=rear->next;

5、循环队列存放在数组a[0…m]中。end1指向队头元素,end2指向队尾元素的后一个位置。设队列两端都可以进行入队出队操作,且初始时为空。则判断队空和队满的条件是()。

队空:end1==end2;

队满:end1==(end2+1)mod(m+1)

第四章  数组字符串广义表

串:零个或多个字符组成的优先序列

串的长度:串中字符数目。
空串:零个字符的串(并不是由空格组成的串)。
子串:任意个连续字符组成的子序列。
主串:包含子串的串。

串、栈、队列都是特殊的线性表,栈和队列是操作受到限制,字符串是内容受限,字符串中的每个数据元素只能是一个字符,而不能是其他类型的数据。

串和线性表的区别:线性表更关注的是单个元素的操作,比如说查找一个元素,插入或者删除一个元素,但串中更多的是查找子串位置,得到指定子串,替换子串等操作。

数组是由类型相同的数据元素构成的有序集合,每个元素称为数组元素。
数组的定义:数组是由类型相同的数据元素构成的有序集合,每个元素称为数组元素,每个元素受 n(n>=1) 个线性关系的约束,每个元素在 n 个线性关系中的序号i1, i2, …,in 称为该元素的下标,可以通过下标访问该数据元素。

设主串的长度为n,子串的长度为m,那么对于KMP算法,平均时间复杂度为O(m+n)
BF算法时间复杂度:O(m+n)
模式匹配:字符串S1中寻找子串S2首次出现的位置  (子串的定位运算)

字符串的模式匹配不一定要从主串的第一个位置开始,可以指定主串中查找的起始位置 。

压缩存储:若多个数据元素的值都相同,则只分配一个元素值的存储空间,且零元素不占存储空间。 

2. 什么样的矩阵能够压缩?       
一些特殊矩阵,如:对称矩阵,对角矩阵,三角矩阵,稀疏矩阵等。

3. 什么叫稀疏矩阵?
矩阵中非零元素的个数较少(一般小于5%)

稀疏矩阵压缩存储后, 必会失去随机存取功能。

在稀疏矩阵中,非零元素的分布是没有规律的,为了进行压缩存储,需要将每一个非零元素的值和其所在的行号、列号作为一个结点存放在一起,这样的结点组成的线性表称作三元组表。因为该结点已不是简单的向量,是无法根据下标进行存取的,所以说稀疏矩阵压缩存储后,必会失去随机存取功能。

广义表与线性表的区别:

线性表的成分都是结构上不可分的单元素

广义表的成分可以是单元素,也可以是有结构的表

线性表是一种特殊的广义表

广义表不一定是线性表,也不一定是线性结构

广义表的长度和宽度:广义表的长度是指广义表中所含元素的个数,深度是指广义表中括号的层数。 

L=(a,b,L)是一个递归的表,长度为3,L相当于一个无限的广义表L=(a,b,(a,b(a,b,…))),深度是正无穷。

(1)求表头GetHead(L):非空广义表的第一个元素,可以是一个单元素,也可以是一个子表 (2)求表尾GetTail(L):非空广义表除去表头元素以外其它元素所构成的表。表尾一定是一个表

1、广义表可以为其他广义表所共享。
广义表具有共享性,如广义表 B 就共享表 A。在表 B 中不必 列出表 A 的内容,只要通过子表的名称就可以引用该表。

2、广义表又称列表,一种非线性的数据结构,是线性表的一种推广。即广义表中放松对表元素的原子限制,容许它们具有其自身结构。

3、若由于广义表(a1,a2,a3,…an)中的数据元素可以具有不同的结构,(或是原子,或是广义表),因此,难以用顺序存储结构表示,通常采用链式存储结构,每个数据元素可用一个结点表示。

数组的存储结构:若频繁地对线性表进行插入和删除操作,该线性表采用链式存储结构比较合适。

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值