线性表的实现(C语言版)——详细代码

2024-03-11 1058阅读

温馨提示:这篇文章已超过377天没有更新,请注意相关的内容是否还可用!

文章目录

文章目录

线性表的实现(C语言版)——详细代码
(图片来源网络,侵删)

前言

一、线性表是什么?

二、实现步骤

1.引入头文件并定义一个宏常量

2.定义顺序表的结构

3.顺序表各种操作的实现(增删改查等)

4.主函数调用实现

5.完整代码

总结


前言

      今天对数据结构中的线性表进行了重新的梳理和复盘,有了许多收获,并花了一些时间在Devc++上进行了顺序表的基本操作的实现。本文就介绍一下自己动手过程中的一些心得和这些代码的内容。(本人小白一个,如有不当之处,请各位大佬不吝指教,万分感谢!)


一、线性表是什么?

线性表是具有相同数据类型的n个数据元素的有限序列,分为顺序表和链表。(本文阐述的是顺序表的实现)。

二、实现步骤

1.引入头文件并定义一个宏常量

代码如下(示例):

#include 
#include //malloc()、free()和exit()函数在这个头文件之中
#define Max 10

2.定义顺序表的结构

代码如下(示例):

typedef struct{
    int *data;//存放存储空间首地址的指针变量
    int length;//线性表当前的元素个数
    int Max_size;//线性表最大能存储的元素个数
}Sqlist;//把该数据类型命名为Sqlist 

该处使用定义结构体的方法 

3.顺序表各种操作的实现(增删改查等)

代码如下(示例):

//线性表的初始化 
void InitList(Sqlist &L){
    L.data=(int*)malloc(sizeof(int)*Max);
    L.length=0;
    L.Max_size=Max;
    if(L.data!=0)
        printf("初始化成功!\n");
    else     
        printf("初始化失败!\n");
}
//逐一插入线性表元素 
void Insert(Sqlist &L){
    printf("请逐个输入你要插入的元素:\n");
    for(int i=0;i=i;j--){
        L.data[j]=L.data[j-1];
    }
    L.data[i-1]=e;
    L.length++;
    return true;
} 
//按元素所在位置删除元素
bool DeleElem(Sqlist &L){
    int i;
    printf("请输入你要删除的元素所在位置:\n");
    scanf("%d",&i);
    if(L.length==0){
        printf("当前线性表为空\n");
        return false;
    }
    if(i>L.length){
        printf("超出当前元素个数!\n");
        return false;
    }
    for(int j=i;jL.length){
        printf("超出当前元素个数!\n");
        return false;
    }
    L.data[i-1]=e;
    printf("修改成功!\n");
    return true;
} 
//按元素所在位置查询元素 
bool GetElem(Sqlist &L){
    int i;
    printf("请输入你要查询的元素所在位置:\n");
    scanf("%d",&i);
    if(L.length==0){
        printf("当前线性表为空\n");
        return false;
    }
    if(i>L.length){
        printf("超出当前元素个数!\n");
        return false;
    }
    printf("线性表第%d个元素为:%d\n",i,L.data[i-1]);
    return true;
}
/*扩充空间,第一次初始化的线性表的存储空间是有限的,
通过这个函数可以在空间不够时进行添加存储空间,
从而加大线性表的存储量,但需要对之前所有元素进行复制,
会加大时间复杂度 
*/ 
void IncreaseL(Sqlist &L){
    int *p,len;
    printf("请输入你要扩充的存储单元数:\n");
    scanf("%d",&len);
    p=L.data;
    L.data=(int*)malloc(sizeof(int)*(Max+len));
    for(int i=0;iL.length){
        printf("超出当前元素个数!\n");
        return false;
    }
    printf("线性表第%d个元素为:%d\n",i,L.data[i-1]);
    return true;
}
/*扩充空间,第一次初始化的线性表的存储空间是有限的,
通过这个函数可以在空间不够时进行添加存储空间,
从而加大线性表的存储量,但需要对之前所有元素进行复制,
会加大时间复杂度 
*/ 
void IncreaseL(Sqlist &L){
    int *p,len;
    printf("请输入你要扩充的存储单元数:\n");
    scanf("%d",&len);
    p=L.data;
    L.data=(int*)malloc(sizeof(int)*(Max+len));
    for(int i=0;i
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]