顺序表:以数组的形式进行储存,用数组下标进行顺序表的一些基本操作
1 构造一个空顺序表(InitList(&L))
2 创建一个顺序表(CreaterList(&L,n))
3 销毁一个顺序表(DestoryList(&L))
4 重置一个顺序表(ClearList(&L))
5 判断顺序表是否为空(ListEmpty(L))
6 返回顺序表的个数(ListLength(L))
7 返回第i 个元素(GetElem(L,i,&e))
8 返回与e相同的第一个元素的位置(LocateElem(L,e))
9 在第i个数后插入一个数(ListInsert(&L,i,e))
10 删除第i 个数(ListDelete(&L,i))
11 修改第i个数( TurnList(L, i, e))
12 遍历顺序表(TraverseList(L))
顺序表中所使用到的包及其预定义。
#include#include #include using namespace std; typedef int status;//函数返回值类型 #define OK 1 //预定义 #define ERROR 0 #define OVERERROR -2 #define MAXSIZE 1000 #define MAXSIZE2 10000
建立节点
typedef struct
{
int *elem;//储存空间的基地址
int length; //当前长度
} SqList;//顺序表的结构类型为SqList
1 构造一个空顺序表(InitList(&L))
status InitList(SqList &L) //构造一个空的顺序表L
{
L.elem = new int[MAXSIZE];//为顺序表分配一个大小为MAXSIZE的数组空间;
if(!L.elem) exit(OVERERROR);//储存分配失败退出
L.length = 0; //空间长度为0
return OK;
}
2 创建一个顺序表(CreaterList(&L,n))
void CreatList(SqList &L,int n)//n 为要存入的个数
{
for(int i=0;i>L.elem[i];
L.length++;
}
}
3 销毁一个顺序表(DestoryList(&L))
status DestoryList(SqList &L)//销毁顺序表
{
free(L.elem);
L.elem=NULL;
L.length=0;
return OK;
}
4 重置一个顺序表(ClearList(&L))
status ClearList(SqList &L) //重置顺序表L
{
L.elem = new int[MAXSIZE2];//为顺序表重新分配一个大小为MAXSIZE2的数组空间;
if(!L.elem) exit(OVERERROR);//储存分配失败退出
L.length = 0; //空间长度为0
return OK;
}
5 判断顺序表是否为空(ListEmpty(L))
status ListEmpty(SqList L)//不需要&符号,如果使用&,将会改变顺序表L
{
if(L.length!=0)
{
return OK;
}
else
{
return ERROR;
}
}
6 返回顺序表的个数(ListLength(L))
status ListLength(SqList L)//不需使用&
{
return L.length;
}
7 返回第i 个元素(GetElem(L,i,&e))
int GetElem(SqList L,int i,int &e)
{
if(i>L.length)
{
return ERROR;
}
else
{
return L.elem[i-1];
}
}
8 返回与e相同的第一个元素的位置(LocateElem(L,e))
status LocateElem(SqList L,int e)
{
int max = L.length - 1;
for(int i = 0 ; i < L.length; i++)
{
if(L.elem[i] == e;
retrun i;
}
if(max == i)
{
return ERROR
}
}
9 在第i个数后插入一个数(ListInsert(&L,i,e))
status ListInsert(SqList &L,int i,int e)//在第个数后插入一个数
{
if(i>=L.length)
{
return ERROR;
}
else
{
for(int j = L.length-1;j >=i ;j--)
{
L.elem[j+1] = L.elem[j];
}
L.length++;
L.elem[i] = e;
}
return OK;
}
10 删除第i 个数(ListDelete(&L,i))
status ListDelete (SqList &L,int i)//删除第i个元素
{
if(i>L.length)
{
return ERROR;
}
else
{
for(int j = i-1;j < L.length;j++ )
{
L.elem[j] =L.elem[j+1];
}
L.length--;
// delete L.elem[i];
}
return OK;
}
11 修改第i个数( TurnList(L, i, e))
status TurnList(SqList &L,int i,int e)//修改第n个元素
{
//cin>>e;
L.elem[i-1] = e;
return OK;
}
12 遍历顺序表(TraverseList(L))
statusTraveseList (SqList L)
{
if (L.length == 0)
{
return 0;
}
for (int k = 0; k < L.length; k++) //输出顺序表
{
cout<



