线性结构的定义和线性表顺序存储的简单使用
线性结构的逻辑结构就是一对一的关系,除了首尾节点外每个节点都有唯一的前驱和唯一的后继
线性结构中最常见的就是线性表,而研究某一个结构上面的操作,就先要让他可以在计算机中表示,即怎么存储他,线性表有顺序存储,也有链式存储,
下面来说说线性表的顺序存储和用顺序储存后对线性表的相关操作,顺序存储其实就是利用数组来存储,不仅仅逻辑地址相邻,物理地址也相邻,还有一个重要的特点就是顺序表可以随机存取
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

浙公网安备 33010602011771号