如何入门顺序表

如何在书架上摆放图书?

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

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

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

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

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

————————————————
版权声明:本文为CSDN博主「今晚加鸡腿」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_65334415/article/details/123612388
#c##学习路径#
全部评论
算法题有没有学习的技巧,我看不太懂
点赞 回复 分享
发布于 2022-03-23 10:14

相关推荐

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