线性表-顺序存储结构
定义:线性表就是零个或多个类型相同的数据元素,组成的有序序列。
线性表的基本操作
empty();判断L中是否为空
ListInsert() ;顺序表的插入
ListDelete( );顺序表的删除
LocateElem();查找顺序表中值为e的元素
#pragma once
class SeqList
{
//定义一个常量以及一个结构体
#define Maxsize 50
typedef int ElemType;
//定义一个新的结构体 并且命名为SqList;
typedef struct {
ElemType data[Maxsize];
int length;
}SqList;
//本算法主要实现判断L中是否为空
bool empty(SqList &L,int i) {
if (i<1 || i>L.length)
{
return false;
}
}
//本算法主要实现顺序表的插入
bool ListInsert(SqList &L, int i, int e)
{
empty(L,i);
for (int j = L.length; j>=i ; j--)//对L进行遍历循环
{
L.data[j] = L.data[j + 1];//将L中的值向后移动一位
L.data[i-1] =e; //将移动后空缺的值由e填补上去
L.length++; //L的长度自增
}
return true;
}
//本算法主要实现了顺序表的删除
bool ListDelete(SqList &L,int i,int &e )
{
empty(L, i);
L.data[i-1] = e; //将e赋给i-1的位置 数组下表与序列差一
for (int j = L.length; j >=i ; j--) //对顺序表L进行遍历
{
L.data[j-1] = L.data[j]; //将数组中的数据依次向前移动一位
L.length--; //L的长度自减
}
return true;
}
//实现查找顺序表中值为e的元素
int LocateElem(SqList L, ElemType e) {
for (int i = 0; i < L.length; i++)
{
if (L.data[i]==e)
{
return i+1;
}
}
return 0;
}
};
线性表顺序表示的优缺点对比
优点 | 缺点 |
无需为表示结点间的逻辑关系而增加额外的存储空间。 | 当插入或删除需要移动大量的元素 |
可方便地随机存取表中的任一元素 | 当线性表长度变化较大时难以确定存储空间的容量 造成空间存储的浪费 |
感想
主要了解线性表的原理 ,理解其插入使用的元素,结构体的建立。