线性结构的定义和线性表顺序存储的简单使用

线性结构的逻辑结构就是一对一的关系,除了首尾节点外每个节点都有唯一的前驱和唯一的后继

线性结构中最常见的就是线性表,而研究某一个结构上面的操作,就先要让他可以在计算机中表示,即怎么存储他,线性表有顺序存储,也有链式存储,

下面来说说线性表的顺序存储和用顺序储存后对线性表的相关操作,顺序存储其实就是利用数组来存储,不仅仅逻辑地址相邻,物理地址也相邻,还有一个重要的特点就是顺序表可以随机存取

1.定义线性表的节点

#include<stdio.h>
#include<stdlib.h>

//定义顺序表的节点
#define MAXSIZE 100
typedef struct
{
    int* elem;   //指向顺序表数组的基地址
    int length;  //顺序表的长度
} SqList,* List;

2.初始化操作

//初始化操作
int InitList(List L)
{
    L->elem = (int*)malloc(sizeof(int) * MAXSIZE);   //动态的分配内存
    if (!L->elem) {
        L->length = 0;
        return 0;
    }
    else
    {
        return -1;
    }

}

3.取第i个元素操作

//取第i个元素操作
int GetElem(SqList L,int i)
{
    if (i<1 || i>L.length) 
    {
        return -1;
    }

    else
    {
        return L[i - 1];  //因为数组索引是从0开始的所以第i个位置的元素在数组的i-1中
    }
}

4.查找操作

//查找操作
int LocateElem(SqList L, int e)
{
    for (int i = 0; i < L.length; i++)
    {
        if (L.elem[i] == e)
            return i+1;     //返回这个元素在线性表中的位置
        return -1;      //没有找到返回-1
    }
}

5.插入操作

//插入操作
int ListInsert(List L, int i,int e) 
{
    if (i<0 || i>MAXSIZE||L->length>=MAXSIZE) {
        return -1;
    }
    else
    {
        for (int j = L->length-1; j >=i-1; j--)
        {
            L->elem[j + 1] = L->elem[j];
        }
        L->elem[i-1] = e;
        L->length++;         //之后线性表的长度还要加1
        return 0;
    }
    

}

6.删除操作

//删除操作
int ListDelete(SqList L, int i) 
{
    if (i<0||i>L.length)
    {
        return -1;
    }
    else
    {
        for (int j = i-1; j < L.length-1; j++)
        {
            L.elem[j] = L.elem[j + 1];
        }
        L.length--;    //之后线性表长度还要减1
        return 0;
    }

}

 

好了,我们下回见,peace

posted @ 2020-07-04 15:45  野评测  阅读(532)  评论(0)    收藏  举报