复习顺序表基本操作功能的实现。
写于此处以便于日后查看,如有错误,欢迎指正。
#include<iostream>
using namespace std;
//D1:顺序表的存储结构
typedef int ElemType;
#define MAXSIZE 100 //顺序表可能到达的最大长度
typedef struct
{
ElemType *elem; //储存空间的基地址
int length; //当前长度
}SqList; //顺序表的结构类型为SqList
//D2:顺序表的初始化
typedef int Status;
#define OVERFLOW 0
#define OK 1
Status InitList(SqList &S)
{
S.elem=new ElemType[MAXSIZE]; //为顺序表分配一个大小为MAXSIZE的数组空间
if(!S.elem) exit(OVERFLOW); //储存失败退出
S.length=0; //空表长度为0
return OK;
}
//D3:顺序表的创建
void CreatList(SqList &S,int &n)
{
int i;
for(i=0;i<n;i++)
cin >> S.elem[i];
S.length=n;
return;
}
//D4:顺序表的打印
void ViewList(SqList S)
{
int i;
for(i=0;i<S.length;i++)
{
cout << S.elem[i] <<" ";
}
cout << endl;
return;
}
//D5:顺序表的取值
#define ERROR 0;
Status GetElem(SqList S,int i,ElemType &e1) // & ???
{
if(i<1 || i>S.length) return ERROR;//判断i值是否合理,若不合理则返回ERROR
e1=S.elem[i-1]; //elem[i-1]储存第i个元素
return OK;
}
//D6:顺序表的查找
int LocateElem(SqList S,ElemType e2)
{ //在顺序表查找值为e的数据元素,返回其符号
int i;
for (i=0;i<S.length;i++)
{
if(S.elem[i]==e2) return i+1;
}
return 0;
}
//D7:顺序表的插入
Status ListInsert(SqList &S,int i,ElemType e3)
{ //在顺序表S的第i个位置插入新的元素e,i值的合法范围为1<=i<=S.length+1
int j;
if(i<1 || i>S.length+1) return ERROR;
if(S.length==MAXSIZE) return ERROR;
for(j=S.length-1;j>=i-1;j--)
S.elem[j+1]=S.elem[j];
S.elem[i-1]=e3;
++S.length;
return OK;
}
//D7:顺序表的删除
Status ListDelete(SqList &S,int i)
{//在顺序表中删除第i个元素,i的合法范围为1<=i<=S.length
int j;
if(i<1 || i>S.length) return ERROR;
for(j=i;j<=S.length-1;j++)
S.elem[j-1]=S.elem[j];
--S.length;
return OK;
}
int main()
{
SqList A; //定义A为SqList类型的变量
InitList(A); //顺序表的初始化
int m;
cin >> m;
CreatList(A,m);
ViewList(A);
int i;
ElemType e1;
cin >> i;
GetElem(A,i,e1); //取值
cout << e1;
int j;
ElemType e2;
cin >> e2;
j=LocateElem(A,e2); //查找
cout << j;
int k;
ElemType e3;
cin >> k >> e3;
ListInsert(A,k,e3); //插入
ViewList(A);
int l;
cin >> l;
ListDelete(A,l); //删除
ViewList(A);
}