总代码在最后哦!
目录
一、了解顺序表
二、静态顺序表的构建
三、顺序表初始化
四、顺序表的插入
五、顺序表的删除
六、顺序表的输入和输出
七、总代码
顺序表是线性表的顺序存储,它是用一组地址连续的存储单元依次存储线性表中的数据元素,从而使得逻辑上相邻的两个元素在物理位置上也相邻。
需要注意的是顺序表中第一个元素的下标是从0开始的。
假设顺序表的元素类型为ElemType,则线性表的顺序存储类型为
typedef int ElemType;
typedef struct {
ElemType *elem;
int length;
}SqList;
(1)在这里我将元素类型(ElemType)定义为整数类型。
(2)ElemType *elem 是定义了一个指向ElemType类型的指针elem。
这段代码是定义了一个结构题类型SqList,包含一个指向ElemType类型的指针和一个整数类型的变量。
#define MAXSIZE 100
Status initList(SqList &L){
//构造一个空的顺序表L
//为顺序表分配一个大小为MAXSIZE的数组空间
L.elem = new ElemType[MAXSIZE];
//存储分配失败返回Error
if(!L.elem) return Error;
//空表长度为0
L.length=0;
return Ok;
}
这段代码是初始化一个顺序表,构造一个空的顺序表,为顺序表分配一个大小为100的数组空间,如果顺序表L的元素数组空间分配失败即顺序表的基地址(L.elem)为0,则返回Error;将顺序表L的长度设置为0,表示当前顺序表中没有元素。
Status ListInsert(SqList &L,int i,ElemType e){
//在顺序表L中第i个位置插入新的元素e,i的合法范围是1<=i<=L.length+1;
//i的值不合法返回Error
if(i<1 || i>L.length+1) return Error;
//当前存储空间已满
if(L.length==MAXSIZE) return Error;
//插入位置及以后的元素后移
for(int j=L.length-1;j>=i-1;j--){
L.elem[j+1]=L.elem[j];
}
//将新元素e放入第i个位置
L.elem[i-1]=e;
//表长加1
L.length++;
return Ok;
}
每句代码的解释如上,下面解释一下其中的for循环。
我们假设顺序表L中的数据元素有12、23、34、45、56.元素长度(L.length)为5.若在第3个位置插入一个元素0,则34、45、56.这3个元素需要各往后移一个位置,并且在移动元素时是从最后一个元素开始移动的。定义一个整数变量j,j的初始值为L.length-1=4,j的范围是大于等于i-1=2。上面已经讲了顺序表的下表是从0 开始的,第5个元素在顺序表中的下标是4,依此类推。
Status ListDelete(SqList &L,int i){
//在顺序表L中删除第i个元素,i的合法取值范围是1<=i<=L.length
//i的值不合法
if(i<1 ||i>L.length) return Error;
for(int j=i-1;j
同上面顺序表的插入差不多,不过顺序表的删除是直接将后面一个元素覆盖前一个元素,被删除元素之后的元素往前移,与顺序表的插入不同的是元素删除前移是从删除元素后的第一个元素开始移动的。
//顺序表输出
void printList(SqList L){
for(int i=0;iMAXSIZE) return Error;
if(L.length==MAXSIZE) return Error;
for(int i =0;i
#include
#include
#define MAXSIZE 100
#define Error 0
#define Ok 1
using namespace std;
typedef int ElemType;
typedef int Status;
//顺序表的存储结构
typedef struct {
//存储空间的基址
ElemType *elem;
//当前长度
int length;
}SqList; //顺序表的结构类型为SqList
//顺序表初始化
Status initList(SqList &L){
//构造一个空的顺序表L
//为顺序表分配一个大小为MAXSIZE的数组空间
L.elem = new ElemType[MAXSIZE];
//存储分配失败返回Error
if(!L.elem) return Error;
//空表长度为0
L.length=0;
return Ok;
}
//顺序表的插入
Status ListInsert(SqList &L,int i,ElemType e){
//在顺序表L中第i个位置插入新的元素e,i的合法范围是1<=i<=L.length+1;
//i的值不合法返回Error
if(i<1 || i>L.length+1) return Error;
//当前存储空间已满
if(L.length==MAXSIZE) return Error;
//插入位置及以后的元素后移
for(int j=L.length-1;j>=i-1;j--){
L.elem[j+1]=L.elem[j];
}
//将新元素e放入第i个位置
L.elem[i-1]=e;
//表长加1
L.length++;
return Ok;
}
//顺序表的删除
Status ListDelete(SqList &L,int i){
//在顺序表L中删除第i个元素,i的合法取值范围是1<=i<=L.length
//i的值不合法
if(i<1 ||i>L.length) return Error;
for(int j=i-1;jMAXSIZE) return Error;
if(L.length==MAXSIZE) return Error;
for(int i =0;ilength;
}
int main()
{
int List=0,m,e,n;
SqList La;
List=initList(La);
if(List==Ok) cout<<"顺序表La创建成功"<>m;
cout<<"请输入"<>e1;
ListInsert(La,i,e1);
}
cout<<"-------顺序表插入元素--------"<>n;
cout<<"要插入的元素:"<>e;
ListInsert(La,n,e);
cout<<"--------顺序表插入完成-------"<>n;
ListDelete(La,n);
cout<<"-------顺序表删除完成-------"<
好啦!这就是全部啦!希望能够帮助大家。