线性表

线性表是n个具有相同特性的数据元素的有限序列。常见的线性表有:顺序表、链表、栈、队列、字符串等等

线性表是指在逻辑上是线性结构,但是在实际的物理结构上并不一定是连续的。线性表在物理上存储的时候,通常是以数组和链式结构的形式存储。

顺序表

顺序表是用一段物理地址连续的存储空间单元一次存储数据元素的线性结构。一般情况下使用数组存储。

顺序表一般分为静态顺序表和动态顺序表

静态顺序表

1 typedef struct Test
2 {
3     int arr[100];  //静态数组的长度都是固定的
4     size_t size;
5 }Test;

动态顺序表

 

1 typedef struct Test
2 {
3     int *arr;   //指向动态开辟的数组
4     size_t   size;  //有效数据个数
5     size_t  capicity;  //容量
6 }Test;

 链表

链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表的结构非常多样,分单向,双向,带头,不带头,循环,不循环。在实际中我们经常使用的是两种结构,一是无头单向非循环链表,另一个是带头双向循环链表。

无头单向非循环链表

 

1 typedef struct SListnode
2 {
3     int _data;
4     struct SListnode* _next;
5 }SListnode;

带头双向循环链表

1 typedef struct Listnode
2 {
3     int _data;
4     struct Listnode * _next;
5     struct Listnode * _prev;
6 }Listnode;

顺序表和链表的区别

顺序表:空间连续,支持随机访问,但是在数据的插入删除时间复杂度O(N),增容的代价比较大

链表:以节点为单位存储,不支持随机访问,在任意位置插入删除时间复杂度O(1),没有增容问题,插入一个数据,开辟一个单位

 

posted @ 2020-02-19 09:15  programchen  阅读(336)  评论(0)    收藏  举报