线性表的顺序存储结构--用数组实现

数据结构分按照视点不同分为逻辑结构和存储结构;
逻辑结构简单分为 线性结构 和非线性结构;
存储结构是指逻辑结构在计算机中的存储形式;
存储结构可分为 顺序存储结构 和 链式存储结构两种;
线性表首先是线性结构,是按照数逻辑结构划分;通俗理解说就是使用一根线可以把所有的数据元素都连接起来,数据之间一对一的关系;而线性表的顺序存储结构说的是线性表这种逻辑结构在计算机中的存储形式;
线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。
因为是连续的存储单元,可以使用一维数组来实现它的顺序存储结构;

使用c代码演示线性表的顺序存储结构如下:

#include 
#define MAXSIZE 20 //定义了线性表的最大长度20 线性表的长度小于等于数组的长度

typedef struct ArrayList
{
    int pBase[MAXSIZE];//数组存储元素最大的长度
    int length;//线性表当前的长度
} Arr,*pArr;

void initArray(pArr p);
bool addElement(pArr p ,int val);//线性表添加元素
bool insertElement(pArr p,int i,int val);//线性表添加元素
void showElement(pArr p);//线性表展示元素
bool deleteElement(pArr p ,int i,int * val);//线性表删除某个位置的元素

int main(void)
{
    Arr arr;
    int i;
    initArray(&arr);
    addElement(&arr,66);
    addElement(&arr,166);
    addElement(&arr,366);
    addElement(&arr,666);
    showElement(&arr);
    insertElement(&arr,2,-90);
    showElement(&arr);
     deleteElement(&arr ,2,&i);
    showElement(&arr);
    printf("删除的元素是 %d\n",i);
    return 0;
}

/*
* 初始化线性表
*/
void initArray(pArr p)
{
    p->length = 0;
}
/*
* 线性表添加元素
*/
bool addElement(pArr p ,int val)
{
    if(p->length == MAXSIZE)
    {
        return false;
    }
    p->length++;
    p->pBase[p->length-1] = val;
    return true;
}

/*
* 线性表出入元素
*/
bool insertElement(pArr p,int i,int val)
{
    if(p->length == MAXSIZE)//线性表中元素满了不在添加
    {
        return false;
    }

    if(i<1||i>p->length+1)//线性表的位置不存在
    {
        return false;
    }

    //插入元素
    if(i <= p->length)
    {
        for (int k = p->length-1;k >=i-1;k--)//将从i开始的元素往后移动一位
        {
            p->pBase[k+1] = p->pBase[k];
        }
    }
    p->pBase[i-1] = val;
    p->length++;
    return true;
}

/*
* 删除线性表中的元素
*/
bool deleteElement(pArr p ,int i,int * val)
{
    if(p->length == 0)//内部数据元素为空时,不可以删除
    {
        return false;
    }

    if(i < 1||i>p->length+1)//i不在范围内部
    {
        return false;
    }

    *val = p->pBase[i-1];

    if(i <= p->length)
    {
        for (int k = i;klength;k++)//将删除位置元素后继前移
        {
            p->pBase[k-1] = p->pBase[k];
        }
    }
    p->length--;
    return true;
}

/**
* 线性表展示元素
*/
void showElement(pArr p)
{
    int i;
    for(i=0;ilength;i++)
    {
        printf("%d  ",p->pBase[i]);
    }
    printf("\n");
    return;
}

你可能感兴趣的:(数据结构,数据结构)