由于线性表中的数据类型相同,因此计算机可以通过快速找到对应数据。
一.线性表的顺序存储--也叫顺序表
sizeof(int) = 4 ,返回字节数;
1.静态书序表就是数组
2.动态数组自定义一个线性表,可以扩展空间的线性表
#include <stdlib.h>
#define Initize 10 //初始化时候数据长度
typedef struct{
int *data; //数据区
int MaxSize; //属性区,最大size
int length; //当前长度
}MyList;
int main()
{
MyList *mylist;
InitList(mylist);
IncreaseSize(mylist,5);
return 0;
}
void InitList(MyList &L) //初始化
{
L->data = (int *)malloc(sizeof(int)*Initize);
L->MaxSize = Initize ;
L->length = 0;//没写入之前只能是0
}
void IncreaseSize(MyList &L,int len) //扩展空间
{
int *p = l->data;
L->data = (int *)malloc(sizeof(int)*(l->MaxSize+len));
for(int i=0;i<l->length;i++)
{
l->data[i] = p[i]; //把之前的数据搬到新的空间
}
L->MaxSize = MaxSize+len;
free(p);
}
特点:
1.随机访问,可以在O(1)时间找到第i个元素
2.插入元素复杂,不方便
3.逻辑上相邻的数据元素在物理上也相邻。
链表
一种前插的插入方法,
前插是一定不可能
核心理念就是先建立一个空结点,将该空节点插入p的后端,然后将p中的数据向后移动到新的结点中,把新数据放入老的p结点中,这样只是更换了p中的数据没有剪断p,虽然我们不知道前面的结点,但是前面的结点还是能找到p。时间复杂度O(1)
删除结点也有类似操作,但是删除的结点是尾结点时有BUG