数据结构是计算机存储,组织数据的方式,数据结构是指相互之间存在一种或多种关系的数据元素的集合,数据结构往往同高效的检索算法有关。
1.线性表的定义
线性表是基本,也是最常用的一种数据结构。
线性表中的数据元素可以是各种各样的类型,但是同一个线性表中的数据元素是相同的类型
(1)存在唯一一个被称之为“第一个”的数据元素 first
(2)存在唯一一个被称之为“最后一个”的数据元素 last
(3)除了 first 以外,其他的所有元素,有且仅有一个 前驱元素
(4)除了 last 以外,其他所有元素,有且仅有一个 后继元素
2.线性表的物理结构实现
存储——物理实现方式(两种)
(1)顺序结构
用存储单元的地址的物理关系,去表示其逻辑关系
逻辑关系在前的,物理关系也在前
线性表的顺序结构指的是用一组连续的存储单元以此存储线性表各个元素——》数组
int a[10] = {123,124,125,...};
逻辑关系不一定要用物理关系来表示
每个元素在物理地址上的哪个位置并不要紧,只要能够正确描述各个元素之间的逻辑关系就ok。
(2)链表结构——》链表
在存储线性表时,不一定要用连续的导致存储,可以随意在内存的任意位置去存储数据元素,只不过需要存储前驱或后继元素的位置即可。
typedef int ElemType; //给 int 类型取一个别名 ElemType
struct node
{
ElemType data; //数据域 用来保存数据
struct node *next; //存储下一个元素的地址,指针域
};
typedef struct node Node;
练习:
获取链表的倒数第i个元素
思路1:倒数第i个元素就是正数第 n-i+1个
1,循环遍历链表求出链表元素的个数n
2,循环n-i+1次,就找到了
思路2:用数组保存链表各个元素
循环遍历链表依次把各个元素保存在数组中 a[0] - a[n-1]
a[n-i] 就是倒数第i个元素
思路3:
双向链表
思路4:
设置两个指针 p,q,首先都指向第一个元素
然后让p先往后走 i-1 步
再让p,q同时往后走,当p到末尾时,q就是倒数第i个