数据结构与算法(一)——线性表
顺序表
顺序表:顺序表,全名顺序存储结构,是线性表的一种。线性表用于存储逻辑关系为“一对一”的数据,顺序表自然也不例外。
不仅如此,顺序表对数据的物理存储结构也有要求。顺序表存储数据时,会提前申请一整块足够大小的物理空间,然后将数据依次存储起来,存储时做到数据元素之间不留一丝缝隙。
顺序表操作类似与数组,只是顺序表大部分时间操作的是动态数组
第一次写,真有点蒙,直接上才艺把
1.顺序表声明
//顺序表
struct table
{
int* head;//声明动态数组
int length;//顺序表的元素个数
int size;//顺序表的最大个数
};
2.顺序表初始化
table initTable()
{
table t;
//申请内存空间
//Size我是define的最大容量哈
t.head = (int*)malloc(sizeof(int)*Size);
if (!t.head)
{
printf("申请分配空间失败");
exit(0);
}
t.length = 0;
t.size = Size;
return t;
}
3.顺序表基本操作
(一)插入
/// <summary>
/// 顺序表插入
/// </summary>
/// <param name="t">顺序表</param>
/// <param name="elem">插入的值</param>
/// <param name="add">插入的位置</param>
/// <returns>顺序表</returns>
table addTable(table t, int elem, int add)
{
//判断插入的位置是否合理
if (add > (t.length + 1) || add < 1)
{
printf("插入位置不存在");
return t;
}
//如果表没有多余的空间,就realloc重新分配,别用malloc,细!
if (t.length == t.size)
{
t.head = (int*)realloc(t.head,sizeof(int) * (t.size + 1));
t.size += 1;
}
//数组从后往前依次向后移动一个位置,空出要插入的位置
for (int i = t.length; i >=add; i--)
{
t.head[i] = t.head[i - 1];
}
//插入
t.head[add - 1] = elem;
t.length++;
return t;
}
(二)删除
/// <summary>
/// 删除
/// </summary>
/// <param name="t">顺序表</param>
/// <param name="del">要删除的值</param>
/// <returns></returns>
table deleteTable(table t, int del)
{
int i;
//第一个循环查找要删除的值
for (i = 0; i < t.length; i++)
{
if (del == t.head[i]