如何在书架上摆放图书?
线性表:这个结构在逻辑上是一条线
顺序表:计算机的一种存储方式,可以以数组的形式来存储数据
顺序表的特点:一:容器里面的元素存储方式是排列在一起的。类似于数组的形式
二:顺序表结构中,容器存储的元素地址必须是连续的
三:可以通过首地址,然后通过指针偏移就能访问所有的元素;//malloc
可以拿书架来举例子,我们要往一个书架里面放书,必须要知道的是书架的结构
将顺序表比作是书架,书架要用来摆放一些图书
顺序表的操作:一:要有新书的加入 元素的增加
二:找指定的书 元素的查找
三:放弃无用的书 元素的删除
四:新书的替换烂书 元素的替换
//使用数组来实现顺序表
#include<stdio.h>
int arr[100];//顺序表可以以数组的形式来存储数据,所以我们可以先定义一个足够大的数组,看成是顺序表,这个数组现在还没有元素,这个书架里面还没有书,是空的
int len = 0;//记录当前书架中有多少书,记录这个数组中元素的个数
int maxsize = 100;//最多能存多少个,因为我们要往里面放书,要往里面存入元素,那么我们就要知道这个书架最大的容量,我们还可不可以往里面放书,往里面放元素
我们要把书放进去,元素的增加:
void insert(int date)//date用来接收要增加的元素值
{
if (len >= maxsize)
{
printf("顺序表已经存满,无法获取新的元素");
return;//存满了之后就不能存了,直接给个return,不执行后面的语句了
}
arr[len] = date;//比如说现在数组中有6个元素,那么len的值就是6,可我们是向第7个数组元素中放值,第七个数组元素的下标是6,也就是len,所以我们这样写
}
int main()
{
insert(12);//我们要将编号为12的书放进书架中,思路是写一个元素增加的函数,然后在通过主函数调用
}
输出所有的元素数据(所有进了书架的书的编号),输出下标为0到len-1的元素
void printf()
{
for (int j = 0; j <= len - 1, j++);//j代表元素的下标
{
printf("%d\t", arr[j]);//用t将这些数据分隔开
}
printf("\n");//加一个换行,为了在下次书写数据的时候,不会连在一起,为了输出的数据好看
}
元素的增加和输出:
void insert(int date)//date用来接收要增加的元素值
{
if (len >= maxsize)
{
printf("顺序表已经存满,无法获取新的元素");
return;//存满了之后就不能存了,直接给个return,不执行后面的语句了
}
arr[len] = date;//比如说现在数组中有6个元素,那么len的值就是6,可我们是向第7个数组元素中放值,第七个数组元素的下标是6,也就是len,所以我们这样写
}
int main()
{
for (intj = 0; j < 10; j++);
{
insert(j + 1);//增加数组元素1到10
}
print();
return 0
} 数组元素的修改:根据元素值来修改,如果我们要修改一个元素的值得话,首先我们需要找到被修改的元素
void change(int date,int val)//我们只要修改函数的值就行了,所以函数的返回值类型为空,date是要修改成的值,val表示要被修改的值
{
for (int j = 0; j <= len - 1; j++)//遍历所有的数组元素,因为要找到我们要修改的元素,所以要从头到尾清查一遍
{
if (arr[j] = val);//找到被修改的元素:如果它们相等,那么我们就找到了我们要修改的元素
{
arr[j] = date;//找到了元素之后,直接赋值就行了
}
}
} 元素的增加,输出,修改,:
void insert(int date)//date用来接收要增加的元素值
{
if (len >= maxsize)
{
printf("顺序表已经存满,无法获取新的元素");
return;//存满了之后就不能存了,直接给个return,不执行后面的语句了
}
arr[len] = date;//比如说现在数组中有6个元素,那么len的值就是6,可我们是向第7个数组元素中放值,第七个数组元素的下标是6,也就是len,所以我们这样写
}
int main()
{
for (intj = 0; j < 10; j++);
{
insert(j + 1);//增加数组元素1到10
}
print();
change(66, 6);
print();
return 0
} 这样的代码写法是将所有满足条件的都修改了,那如果只想修改一个呢
一:
void change(int date, int val)//我们只要修改函数的值就行了,所以函数的返回值类型为空,date是要修改成的值,val表示要被修改的值
{
for (int j = 0; j <= len - 1; j++)//遍历所有的数组元素,因为要找到我们要修改的元素,所以要从头到尾清查一遍
{
if (arr[j] = val);//找到被修改的元素:如果它们相等,那么我们就找到了我们要修改的元素
{
arr[j] = date;//找到了元素之后,直接赋值就行了
break;//或者用return也可以,函数的出口,直接跳出,返回一个空
}
}
} 二:
void change(int date, int val)//我们只要修改函数的值就行了,所以函数的返回值类型为空,date是要修改成的值,val表示要被修改的值
{
int flag = 0;//flag代表已经被修改的元素个数
for (int j = 0; j <= len - 1; j++)//遍历所有的数组元素,因为要找到我们要修改的元素,所以要从头到尾清查一遍
{
if (arr[j] = val);//找到被修改的元素:如果它们相等,那么我们就找到了我们要修改的元素
{
arr[j] = date;//找到了元素之后,直接赋值就行了
if (flag >= 1)//要是想修改两个元素,那就把1变成2
{
return;
}
}
}
} 元素的查找:通过元素的值来找,输出位置
void find(int val);//val表示要被查找的值
{
for (int j = 0; j <=len-1; j++)//遍历整个数组
{
if (arr[j] = val)
{
printf("元素值:%d 位置:%d\n", arr[j], j + 1);//位置=下标+1
}
}
}