顺序表(一)

如何在书架上摆放图书?

线性表:这个结构在逻辑上是一条线

顺序表:计算机的一种存储方式,可以以数组的形式来存储数据

顺序表的特点:一:容器里面的元素存储方式是排列在一起的。类似于数组的形式

二:顺序表结构中,容器存储的元素地址必须是连续的

三:可以通过首地址,然后通过指针偏移就能访问所有的元素;//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

    }

}

}

全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务