如何入门顺序表

如何在书架上摆放图书?

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

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

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

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

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

相关推荐

拒绝996的悲伤蛙:此贴终结|给路过的牛友分享一下心得👇 实习的时候不要光埋头干活,身边的大佬同事才是真·宝藏人脉!大胆请教他们工作以及职场上的问题以我的经历,我的带教有十几年工作经验,做过运维、后端开发、web测试,现在是高级软测,是行走的避坑指南 我之前纠结要不要学Web测试简历,被他一句话点醒:Web发展成熟,岗位需求在缩,AI对互联网的冲击可能以后架构+开发+测试一人包揽。现在用户更多用的是移动端APP/小程序,相比之下天天守着电脑刷网页的人基数小。 这里我的纠结得到反馈,于是我又把简历发给带教,获得了一对一的简历指导。 感兴趣的可以看看: 1.教育背景:本科→本科(全日制) 2.实习经历:总体问题不大,但第2点要稍作修改,可以写但做功课,如风机、水箱……可能会问用哪个供应商的?使用寿命、型号、电压电流、多少秒会触发逻辑? 3.项目经历(坑太多,大型翻车现场): - 项目名越直白越好,让人一眼就知道你干了啥。 -用的什么语言设计核心接口,异步执行做功课,涉及线程问题,被问可回答n个功能是如何错开异步执行的 - “验证任务消费……阻塞丢包”“高负载稳定性”这种词,没三五年开发功底不要写,不然面试时被问线程、数量级、CPU占用,内存带宽等影响性能的直接原地社死。 -做功课 -做功课,测了哪些模块,如何设计,接口流量抓包,token,变量…… -做功课,要熟悉网络协议…… 带教之前做互联网开发的时候面试过很多人,总的来说不要为了显得项目高大上过渡包装,写了就要做好拷打的准备
听劝,我这个简历该怎么改...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务