软件设计师数据结构之线性结构复习小结

来源:互联网 发布:通信软件slack 编辑:程序博客网 时间:2024/06/05 06:22

1.1 线性表的定义
一个线性表是n(n>=0)个元素的有限序列,通常表示为(a1,a2,a3…,an)。非空线性表的特点如下:
1)存在唯一的表头和表尾
2)除第一个元素外,序列中的每个元素均只有一个直接前驱。
3)除最后一个元素外,序列中的每个元素均只有一个直接后驱。
1.2 线性表的存储结构
线性表的存储结构分为顺序存储和链式存储
1)顺序存储
用一组地址连续的存储单元依次存储线性表中的数据元素,从而使得逻辑上相邻的两个元素在物理位置上也相邻,在这种存储方式下,元素的逻辑关系无需占用额外的空间来存储。
以LOC(ai)表示线性表中第一个元素的存储位置,在顺序存储结构中,第i个元素ai对存储位置为:
LOC(ai)=LOC(a1)+(i-1)*L
L是表中每个数据元素所占空间的字节数
优点:可以随机存储表中的元素
缺点:插入和删除的操作需要移动元素
举例说明:体育课排队,按个字从高到矮从左到右排队,这时候突然迟到的中等个子小王同学来了,老师让他进入队列,那么就要从比他高一点点的小李同学后面拨出一个空位让小王插入,而比小王矮的同学因为小王的插入都需要往右移动一位。
2)链式存储
用节点来存储数据
数据域用于存储数据元素的值,指针域则存储当前元素的直接前驱或者直接后继的位置信息,指针域中的信息称为指针or链
存储各数据元素的结点的地址并不要求是连续的,因此存储数据元素的同时必须存储元素之间的逻辑关系
优点:插入和删除操作无需移动元素,操作方便
缺点:增加了存储空间的开销,不能随机访问
举例说明:带一帮小朋友去看电影,但是电影院没有连续的座位了,这个时候怎么安排呢?有一种方式就是小明同学先坐下(1排1座),然后让他记住小红同学的座位(3排5座),再让小红同学记下小芳同学的座位(7排4座)……依次,即使中间来了一个小风同学,也可以让小郭同学记下小风的座位号,然后让小风去记下小郭同学本来记的那位同学的座位号,这个可以理解为链式存储
3)其它链表结构

  • 双向链表:每个节点包含两个指针,分别指出当前结点元素的直接前驱和直接后继
  • 循环链表:在单向链表或者双向链表的基础上令表结尾的结点的指针指向第一个节点,构成循环链表。其特点是可以从表中任意节点开始遍历整个链表
  • 静态链表:借助数组来描述线性表的链式存储结构

1.3 栈和队列
1)栈的定义
栈是只能通过访问它的一端来实现数据存储和检索的一种线性数据结构,按照先进后出的原则进行。在栈中进行插入和删除操作的一端称为栈顶(top),相应地,另一端称为栈底(bottom)。
顺序存储:用一组地址连续的存储单元依次存储自栈顶到栈底的数据元素,同时附设指针top指示栈顶元素的位置。在顺序栈中,需要判断是否栈满(栈空间中没有空闲单元),否则如果栈满,元素入栈会发生上溢现象。
链式存储:栈中元素的插入和删除仅在栈顶一段进行,因此不必另外设置头指针,链表的头指针就是栈顶指针
举例说明: 平时洗碗洗碟子的时候,洗完的碟子总是从下往上堆起来,如果下次要用到这堆碟子,肯定是从最上方的碟子拿起,而这个最上方的碟子,就是上一次洗碗的时候最后洗完的那一只碟子。这就是先进后出原则。
2)队列
队列是一种先进先出(First In First Out,FIFO)的线性表,它只允许在表的一段插入元素,而在表的另一端删除元素。在队列中,允许插入元素的一段称为队尾(rear),允许删除元素的一端称为队头(front)
队列的顺序存储:顺序队列,它是利用一组地址连续的存储单元存放队列中的元素。由于队列中元素的插入和删除限定在表的两段进行,因此设置队头和队尾指针,分别指出当前的队首和队尾
队列的链式存储:链队列,给链队列添加一个头结点,并令头指针指向头结点。因此,队列为空的判断条件是头指针和尾指针的值相同,且均指向头结点。
举例说明:我们在排队买票的时候,插入的人是在队伍最后排插入,而买完票的人会从队伍最前排离开,这就是先进先出。如果队伍中没人,那么头指针和尾指针的值是相同的,而且都指向卖票口,这就是队列为空
1.4 串
1)串的定义
串是仅由字符构成的有限序列,是取值范围受限的线性表。
S=’a1a2…an’
其中S是串名,单引号括起来的字符序列是串值
2)串的几个基本概念

  • 空串:长度为零的串,空串不包含任何字符
  • 空格串:由一个或多个空格组成的串。虽然空格是要给空白的字符,但是它也是一个字符,在计算串长度时要将其计算在内
  • 子串:有串中任意长度的连续字符构成的序列称为子串。含有子串的串称为主串。子串在主串中的位置是指子串首次出现时,该子串的第一个字符在主串中的位置。空串是任何串的子串。举例:主串为abcde,子串为cb
  • 串相等:指两个串长度相等且对应序列号的字符也相同
  • 串比较:两个串比较大小时以字符的ASCII码值(或者其他字符编码集合)作为依据。实质上,比较操作从两个串的第一个字符开始进行,字符的码值大者所在的串为大,若其中第一个串先结束,则以串长较大者为大
0 0
原创粉丝点击