一. 线性表的几种形式:
1.线性表是最常用且最简单的一种数据结构. 线性表中元素的个数n定义为线程表的长度,n= 0时称为空表.
2. 线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素. 这种顺序存储结构的线性表为顺序表.
线性表的特点: 优点是:可以随机存取的存储结构
缺点是:插入和删除时间复杂度高,主要耗费在移动元素上. 时间复杂度O(n).内存中有许多的内存碎片,内存碎片都很小,不能,必须开辟新的空间.
数组
3.线性表的链式表示和实现 [字典,集合]
链式表是一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以不是连续的). 一般叫做线性链表或单链表. 时间复杂度为(n)
概念: 每一个元素叫做节点,
里面存储数据元素的信息叫做数据域,
存储直接后继存储位置的域叫做指针域.
头指针: 指向链表中第一个结点; 最后一个结点指针域为空”NULL”
重点: 线性表的单链表的存储结构是结构体: 数据域和指针域[本结构体类型的指针]
4. 循环链表: 另一种链式的存储结构
单循环链表: 表的最后一个结点的指针域执行头结点,整个链表形成一个环,
双向链表: 一个结点有两个指针域,一个指向直接后继,一个指向直接前继.
二 栈
栈和队列是两种重要的线性结构. 是特殊的线性表结构,操作收到了限制.
对于栈来说,表尾为栈顶, 表头为栈尾,不含元素为空栈,
先进后出的原则(LIFO)
栈的实际应用: 括号匹配的检验
栈与递归: 栈在程序设计中实现递归:
一个直接调用自己或者通过一系列的调用语句间接的调用自己的函数,叫递归函数.
这里主要讨论递归是如何执行的?
当一个函数的运行期间调用另一个函数时,在运行被调用函数之前,
系统需要先完成三件事:
(1) 将所有的实在参数,返回地址等信息传递给被调用函数保存;
(2)为被调用函数的局部变量分配存储区;(3) 将控制转移到被调用函数的入口.
而从被调用调用函数返回调用函数之前,系统也完成3件事:
(1) 保存被调函数的计算结果 (2) 释放被调函数的数据区 (3)依照被调函数保存的返回地址将控制转移到调用函数;
原理: 函数之间的信息传递和控制转移必须通过栈来实现, 程序运行的时所需的数据空间安排到一个栈中,每当调用一个函数的时候,就为她在栈顶分配一个存储区,每当从一个函数退出时,就释放它的存储区,则 当前正在运行的函数的数据区必须在栈顶. 递归函数也属于函数的嵌套调用,原理也是一样的,原则:后调用先返回;
队列: 是先进先出(FIFO)的线性表.允许插入的一端叫做队尾,允许删除的一端则称为对头; 队列在程序设计中也经常出现,一个最典型的例子就是操作系统中的作业队列;