线性表的顺序表示和实现
线性表的顺序存储表示
#define MAXSIZE 100 //顺序表可能达到的最大长度
typedef int ElemType; //根据实际需要定义
typedef struct{
ElemType *elem; //存储空间的基地址
int length; //当前长度
}SqList;
基本操作的实现
#include<cstdio>
#define MAXSIZE 100 //顺序表可能达到的实际长度
typedef int ElemType; //定义ElemType为int类型
typedef struct{
ElemType *elem;//存储空间的基地址
int length; //当前长度
}SqList;
//构造空的顺序表
void InitList(SqList &L){
L.elem=new ElemType[MAXSIZE];
if(!L.elem)
perror("error");
L.length=0;
}
//取值 根据指定的位置序号i,获取顺序表中第i个数据元素的值
void GetElem(SqList L,int i,ElemType &e){
if(i<1||i>L.length)
perror("error");
e=L.elem[i-1]; //elem[i-1]单元存储第i个元素
}
//查找某个元素
int LocateElem(SqList L,ElemType e){
//在顺序表中查找值为e的数据元素,返回序号
for(int i=0;i<L.length;i++){
if(L.elem[i]==e){
return i+1; //查找成功,返回序号i+1
}
}
return 0; //查找失败 返回0
}
//插入 第i个位置插入元素e
void ListInsert(SqList &L,int i,ElemType e){
//在顺序表L中第i个位置之前插入新的元素e,i值得合法范围是[1,L.length+1]
if((i<1)||(i>L.length+1))
perror("error");
if(L.length==MAXSIZE)
perror("error");//存储空间满了
for(int j=L.length-1;j>=i-1;j--){
L.elem[j+1]=L.elem[j];
}
L.elem[i-1]=e; //将新元素e放入第i个位置
++L.length; //表长加1
}
//删除
void ListDelete(SqList &L,int i){
//在顺序表L中删除第i个元素,i值的合法范围是[1,L.length]
if((i<1)||(i>L.length))
perror("error");
for(int j=i;j<=L.length-1;j++){
L.elem[j-1]=L.elem[j];
}
--L.length;
}
int main(){
SqList sq;
ElemType e;
int input;
InitList(sq); //初始化顺序表
//插入5个数
for(int i=0;i<5;i++){
scanf("%d",&input);
ListInsert(sq,i+1,input);
}
GetElem(sq,1,e); //获取第1个元素
printf("%d\n",e); //输出获取的第1个元素
int loc=LocateElem(sq,1);//查找1在顺序表中是第几个元素
printf("%d\n",loc);
ListDelete(sq,1);//删除第1个元素
for(int i=0;i<sq.length;i++){
printf("%d ",sq.elem[i]);//输出顺序表所有元素
}
return 0;
}