一、存储结构:
1、顺序存储结构:逻辑相邻的元素地址也相邻
1、1特点:
节省存储空间
随机存取
插入删除移动大量数据
表容量:第一中空间不足/空间闲置和浪费、第二种动态申请时间开销大。
1、2创建方式:
float x[100]
float *x=new float[100]
1、3操作 时间复杂度:
增:[O(n)/O(1)/O(n/2)]
删:[O(n-1)/O(1)/O(n)]
查:下标查[O(1)],按值查[O((n-1)/2)]
2、链式存储结构:逻辑相邻物理不一定相邻
2、1 特点:
2、2 单链表:
2、2、1 创建:
头插法:s=new Node; cin>>s->data; s->next=p->next; p->next=s;
尾插法:s=new Node; cin>>s->data; p->next=s; p=s;
2、2、2 查找:
按值查找:O(n)
按位查找:O(n)
2、2、3插入:O(n)
s=new Node; s->data=e; s->next=p->next; p-next=s;
2、2、4删除:O(n)
p->next=p->next->next;
2、3静态链表:
2、3、1 一维数组表示单链表,容量一定
2、3、2 结点中的指针域放的是数组的位置
2、3、3 增加空闲链,记录谁是空闲的,实现无需按顺序存放
2、3、4删除/插入无需移动数据,只修改下标
2、3、5没有解决连续存储分配带来表长度问题
2、4循环链表:
2、4、1单循环:头节点:(尾节点)rear->next->next
2、4、2多重循环:
2、5双向循环链表:前驱结点:
2、5、1p节点前插入一个节点s:
s->prior=p->prior;//1
s->next=p;
p->prior->next=s;//2
p->prior=s;//在1 2之后
2、5、2p指向要删除的节点:
p->prior->next=p->next;
p->next->prior=p->prior;
delete p;