【数据结构】C语言线性表-顺序表_顺序表的表现c.-程序员宅基地

技术标签: 算法  c++  数据结构与算法  数据结构  

什么是线性表

线性表是最常用且最简单的一种数据结构。简言之,一个线性表是n个数据元素的有限序列。

线性结构特点

在数据元素的非空有限集合中

  1. 存在唯一的一个被称做“第一个”的数据元素
  2. 存在唯一的一个被称做“最后一个”的数据元素
  3. 除第一个之外,集合中的每个数据元素均只有一个前驱
  4. 除最后一个之外,集合中每个数据元素均只有一个后继

顺序表的实现

顺序表示的是用一组地址连续的存储单元依次存储线性表的数据元素
以下是C++的实现过程
注:C语言不可使用引用

#include <iostream>
#include <stdlib.h>
#define SIZE 5//顺序表大小
#define ElemType int//元素数据类型
using namespace std;

typedef struct List{
    
    ElemType *elem;//存储空间基地址(动态数组)
    int length;//数组长度
    int size;//数组大小
}list;

//初始化顺序表L
int InitList(list &L);
//在顺序L中第i个位置插入NewElem元素
int InsertList(list &L,int i,ElemType NewElem);
//删除顺序表L中第i个位置上的元素,并将其值保存到常量DelElem
int DeleteList(List &L,int i,ElemType &DelElem);
//修改顺序表L中第i个位置元素为NewElem元素
int AmendList(list &L,int i,ElemType NewElem);
//查询顺序表L中元素e的位置(返回查询位置)
int SelectList(list L,ElemType e);
//遍历顺序表
void Display(list L);

int main(){
    
    list L;
    ElemType DelElem;

    InitList(L);
    cout<<"定义初始值:"<<endl;
    InsertList(L,1,1);
    InsertList(L,2,2);
    InsertList(L,3,3);
    InsertList(L,4,4);
    InsertList(L,5,5);
    Display(L);

    cout<<"在第2个位置插入元素35:"<<endl;
    InsertList(L,2,35);
    Display(L);
    
    cout<<"删除第3个元素的值为:";
    DeleteList(L,3,DelElem);
    cout<<DelElem<<endl;
    Display(L);
    
    cout<<"更改第五个位置的元素为33:"<<endl;
    AmendList(L,5,33);
    Display(L);

    cout<<"查询元素3的位置:";
    int num = SelectList(L,3);
    cout<<num<<endl;
}

int InitList(list &L){
    
    L.elem = (ElemType*)malloc(SIZE * sizeof(ElemType));
    if(!L.elem){
    
        printf("初始化失败\n");
        exit(-1);//初始化失败直接退出
    }
    L.length = 0;
    L.size = SIZE;
    return 1;
}

//在顺序表L中第i个位置插入新元素NewElem
int InsertList(list &L,int i,ElemType NewElem){
    
    //判断插入位置,不能小于1,不能大于表长度
    if(i<1 || i>L.length+1){
    
        cout<<"插入位置不合法"<<endl;
        return 0;
    }
    //判断顺序表存储空间是否满足
    if(L.length >= L.size){
    
        //使用新变量分配空间用来if判断是否分配成功,很多人使用的L.elem = (ElemType*)realloc...,即便判断也是为真
        ElemType *newbase  = (ElemType*)realloc(L.elem, (L.size+1)*sizeof(ElemType));
        if(!newbase){
    
            printf("内存分配失败\n");
            exit(-1);
        }
        L.elem = newbase;//新基址
        L.size++;
    }
    //为插入变量,元素后移
    for(int p=L.length-1; p>=i-1; p--){
    
        L.elem[p+1] = L.elem[p];
    }
    L.elem[i-1] = NewElem;
    L.length++;
    return 1;
}

//在顺序表L中删除第i个元素,并返回其值e
int DeleteList(List &L,int i,ElemType &e){
    
    if(i<1 || i>L.length){
    
        cout<<"删除位置不合法!"<<endl;
        return 0;
    }
    e = L.elem[i-1];
    for(int p=i;p<L.length;p++){
    
        L.elem[p-1] = L.elem[p];
    }
    L.length--;
    return 1;
}

//插入位置如果小于1或者大于顺序表的长度则返回-1
int AmendList(list &L,int i,ElemType NewElem){
    
    if(i<1 || i>L.length){
    
        cout<<"更改的位置有误!"<<endl;
        return 0;
    }
    L.elem[i-1] = NewElem;
    return 1;
}

//在顺序表L中查找e元素的位置,若不存在则返回-1
int SelectList(list L,ElemType e){
    
    for(int i=0;i<L.length-1;i++){
    
        if(L.elem[i] == e){
    
            return i+1;
        }
    }
    return -1;
}

void Display(list L){
    
    for(int i=0;i<L.length;i++){
    
        cout<<L.elem[i]<<" ";
    }
    cout<<endl;
}

运行结果:

定义初始值:
1 2 3 4 5 
在第2个位置插入元素35:
1 35 2 3 4 5 
删除第3个元素的值为:2
1 35 3 4 5 
更改第五个位置的元素为33:
1 35 3 4 33 
查询元素3的位置:3
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41541179/article/details/109013277

智能推荐

python3中cv2.imread返回NoneType的解决方法-程序员宅基地

文章浏览阅读2.4k次,点赞2次,收藏6次。这两天做东西真是诸事不顺,caffe各种爆炸,今天在转换数据集格式的时候python又炸了,具体情况如下:环境anacond3,python3,opencv3,代码中cv2.imread(train_filepath)后返回NoneType,百度了一圈大都是说路径不对,opencv-python包不对之类的问题,于是我仔细检查各种路径没有问题后,将anaconda到各种包全update了一...

ESP32 Arduino引脚分配参考:您应该使用哪些 GPIO 引脚?_esp32引脚分配指南-程序员宅基地

文章浏览阅读931次。但是,如果您有外设连接到这些引脚,则在尝试上传新代码、使用新固件刷新 ESP32 或重置开发板时可能会遇到困难。如果您有一些外设连接到捆绑引脚,并且您在上传代码或刷新 ESP32 时遇到问题,可能是因为这些外设阻止了 ESP32 进入正确的模式。由于 ESP32 芯片的多路复用功能,这是可能的。这意味着,如果您有连接到这些 GPIO 的输出,则当 ESP32 重置或启动时,您可能会得到意外的结果。并非所有开发板都可以访问所有 GPIO,但无论您使用哪种开发板,每个特定 GPIO 都以相同的方式工作。_esp32引脚分配指南

智能手机芯片天梯图片_联发科的骄傲——天玑1000 网友自制手机SoC天梯图排名前列...-程序员宅基地

文章浏览阅读2.7w次。11月28日消息,今日,有网友在微博上晒出一张手机芯片的天梯图,并重点赞扬了位于顶端的天玑1000芯片。该芯片是联发科于前日正式发布的旗下首款旗舰级5G集成芯片,且预计搭载它的首款终端设备将于2020年第一季度发售。天玑1000以北斗七星之一的名字命名,象征该芯片是5G时代的领跑者,事实上该芯片也确实性能强悍。在安兔兔跑分数据中,搭载该处理器的手机跑分高达511363,这是麒麟990和骁龙855 ..._天玑1000天梯图

torch.cat() 使用详解_torch.cat 会重新申请内存吗-程序员宅基地

文章浏览阅读909次。官方文档torch.cat(inputs, dimension=0) → Tensor在给定维度上对输入的张量序列seq 进行连接操作。torch.cat()可以看做 torch.split() 和 torch.chunk()的反操作。参数:inputs (sequence of Tensors) – 可以是任意相同Tensor 类型的python 序列dimension (int, optional) – 沿着此维连接张量序列。cat() 函数可以通过下面例子更好的理解。官方例子>_torch.cat 会重新申请内存吗

oracle怎么改字符编码格式,Oracle修改字符编码-程序员宅基地

文章浏览阅读2.3k次。在操作数据库的时候,需要 根据 实际情况,修改数据库的编码 ,如下提供一个修改数据库的编码过程。 查看数据库当前编码: select userenv('language') from dual; 在windows的命令 窗口,输入 cmd 打开do s窗口。 输入:sqlplus/nolo g 打开数据连接 ;输入在操作数据库的时候,需要根据实际情况,修改数据库的编码,如下提供一个修改数据库的编码..._oracle设置编码格式

.net是什么-程序员宅基地

文章浏览阅读2.6w次,点赞2次,收藏8次。距离学习.net有一年了。直到前段时间的面试中,才发现对.net的理解有很多的问题。当时在网上简单地查了一下,大概了解了一下。现在我徒弟反映.net视频有很多不理解的地方,我们讨论了一下,也给了我一个很好的再学习机会。下面是我对.net的再理解。_net

随便推点

web前端面试题及答案整理(一)_在javascript中,如果执行语句math.round(7.25),则得到-程序员宅基地

文章浏览阅读3.4k次,点赞5次,收藏18次。web前端、HTML、CSS、JavaScript、DOM_在javascript中,如果执行语句math.round(7.25),则得到

Android app版本升级的一个简单实现_安卓versioncode 升级-程序员宅基地

文章浏览阅读7.7k次。1升级原理build.gradle 中 versionCode 1 , versionName “1.0.0” 是升级的关键,versionCode是个int,versionName是个String,其中versionCode每次要升级版本都需要+1,VersionName是给用户看的,让用户知道当前版本。升级原理:从服务器获取升级信息,包括versionCode,versionN..._安卓versioncode 升级

windows下查看端口被什么程序占用-程序员宅基地

文章浏览阅读73次。为什么80%的码农都做不了架构师?>>> ..._windows查看端口被哪个进程占用

mugen linux主程序,Mugen主程序报错汇总-程序员宅基地

文章浏览阅读4.8k次。原文来自11区民间整合的Mugen主程序报错汇总,同时加入了千寻网站平时收集的常见报错,源地址:http://mugenbinran.web.fc2.com/error.html以下皆为机翻,有空会慢慢修正翻译加载初始场景报错报错关键字:dojo.def 或 stage0.def原因:程序以debug模式运行且调用了debug场景解决方法:1、在mugen.cfg文件内找到[Debug]下的Sta..._mugen报错

python用matplotlib画折线图_from matplotlib import pyplot as plt x=range(2,26,-程序员宅基地

文章浏览阅读304次。1、from matplotlib import pyplot as pltx=range(2,26,2)y=[15,13,14.5,17,20,25,26,26,24,]22,18,15fig=plt.figure(figsize=(20,8),dpi=80)#设置图片大小plt.plot(x,y)#plt.xticks(x)#设置x轴刻度plt.xticks(range(2..._from matplotlib import pyplot as plt x=range(2,26,2) y=[15,13,14,17,20,26,26

热风枪使用之碳化温度_碳火加风枪温度-程序员宅基地

文章浏览阅读497次。_碳火加风枪温度

推荐文章

热门文章

相关标签