美文网首页数据结构和算法分析
数据结构-线性表的顺序表示以及实现(C语言)

数据结构-线性表的顺序表示以及实现(C语言)

作者: 小明同学机器人 | 来源:发表于2020-02-01 14:55 被阅读0次

    数据结构-线性表的顺序表示

    • 线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素,这种表示也称作线性表的顺序存储结构或者顺序映像。

    代码解析

    • 导入头文件
    #include<stdio.h>
    #include<stdlib.h>
    
    • 定义结构类型
    #define MAXSIZE 100
    typedef int ElemType; 
    typedef struct  //顺序表的结构类型
    {
    ElemType *data;        //存储空间的基地址(存储数据)
    int length;        //当前长度 
    }LineArray;
    
    • 声明函数
    void initList(LineArray *lineArray);    //初始化顺序表
    int LocateElem(LineArray *lineArray,ElemType type); //循序表查找
    int ListInsert(LineArray *lineArray,int position,ElemType e);//顺序表增加
    int ListDelete(LineArray *linearray,int position);//顺序表删除
    void printList(LineArray *LineArray);                    //顺序表遍历
    
    • 实现函数-初始化顺序表
    void initList(LineArray *lineArray){
    lineArray=malloc(1);
    lineArray->data=malloc(MAXSIZE);
    lineArray->length=0;
    if(!lineArray->data)
     {
          printf("实例化失败");
            return;
     }
     else 
     {
         printf("实例化完成");
     }
    };
    
    • 实现函数-循序表查找
    int LocateElem(LineArray *lineArray,ElemType type){
    for (size_t i = 0; i < lineArray->length; i++)
    {
        /* code */
        if(lineArray->data==type) //依次和e作比较 相等返回指标+1(即为位置)
        {
            return i+1;
        }
    }
    
    
    • 实现函数-顺序表插入
    int ListInsert(LineArray *lineArray, int position, ElemType e)
    {
    
        if (position <= 0 ||( position > lineArray->length + 1))
        {
            printf("插入位置不合适");
            return 0;
        } //插入位置不合适 返回0;
        if (lineArray->length == MAXSIZE)
        {
            printf("顺序表已满");
            return 0;
        }
        for (int i = lineArray->length-1; i > position - 1; i--)
        {
            /* code */
            lineArray->data[i+1] = lineArray->data[i];
        }//从后往前,依次往后移一位。直到移到position 为止
        lineArray->data[position-1] = e;  //移动完成后将position 的数据替换为需要插入的数据e
        ++lineArray->length;
        printf("添加完成");
        return 1;
    };
    
    • 实现函数-顺序表删除
    int ListDelete(LineArray *lineArray,int position){
    if(position<1||( position > lineArray->length )) 
    return 0;
    for(int j=position;j<lineArray->length-1;j++)
    {
        lineArray->data[j-1]=lineArray->data[j];
    }
    --lineArray->length;
    return 1;
    };
    
    • 实现函数-顺序表遍历
    void printList(LineArray *L)
    {
        printf("遍历结果如下\n");
        for (int i = 0; i < L->length; i++)
        {
            /* code */
            printf("%d\t", L->data[i]);
        }
    };
    

    顺序表的存储方式

    • 顺序存储:存储单元地址连续,它以“物理位置相邻”来表示线性表中数据元素间的逻辑关系,可随机存取表中任一元素。
    • 链式存储:存储单元地址为任意一组,它的存储单元可以是连续的,也可以是不连续的。在表示数据元素之间的逻辑关系时,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置),这两部分信息组成数据元素的存储映像,称为结点(node)。

    相关文章

      网友评论

        本文标题:数据结构-线性表的顺序表示以及实现(C语言)

        本文链接:https://www.haomeiwen.com/subject/znwtxhtx.html