顺序表逻辑结构是线性的,物理结构一定是线性的,顺序表的底层是数组。
顺序表:分为动态顺序表和静态顺表
动态顺序表:数组长度是可以动态申请和扩容的 int*arr
静态顺序表: 底层为固定长度的数组 int arr[10]
Int*arr 存储数据的底层结构
Int capacity 顺序表的空间大小
Int size 顺序表的有效个数
单链表:由一个一个节点组成,节点由存储的数据和结构体指针组成。
struct SListNode
{
SLTDataType data;
struct SListNode* next; 节点指针
};
双向循环链表:存储数据,前驱节点指针和后继节点指针。
struct ListNode
{
LTDataType data;
struct ListNode* prev; 前驱节点指针
struct ListNode* next; 后继节点指针
}
双向链表中phead (哨兵位)不可能为空。
顺序表、单链表、双向循环链表注意学习增删查改。
指针的疑惑点
phead->(解引用) 修改的是值,不会影响phead的地址空间
LTNode* plist = node1;
plist->prev = xxx;改变的是plist的值,不是plist本身
plist->next = xxx;//改变的是plist的值,不是plist本身
plist = node2;//这才叫改变了plist
plist = malloc()//改变了plist
链表的优点:任意位置插入删除,按需申请空间。
缺点不支持下标访问。
顺序表的优点就是:尾插尾删效率不错。下标的随机访问。
缺点:插入删除数据需要挪动数据,空间不足需要扩容会造成扩容浪费。