数据结构 —— 线性表的顺序实现(顺序表)(C++)
本文相关知识:以顺序存储结构来实现线性表(C++)
如有错误请指正~~谢谢~
定义
首先,为了增强程序的可读性,做出以下定义:
#define TURE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define MAXSIZE 100 //表的最大长度
typedef int Status; //函数返回值的类型
typedef char ElemType; //元素的类型
这里用动态数组
的方式来实现动态内存分配
typedef struct
{
ElemType *elem;
int length; //表长
}SqList;
SqList L;//定义一个表L
初始化
Status InitList(SqList &L)
{
L.elem=new ElemType[MAXSIZE];//为顺序表分配空间
//获取此数组的基地址赋值给指针elem
if(!L.elem)
return OVERFLOW;//内存分配失败,异常处理
L.length=0;//空表长度为0
return OK;
}
一点说明:顺序表示意图如下,帮助理解后续操作
补充:数组与指针的关系
int a[5]={1,2,3,4,5};
int *p=a;
则p[3]=a[3],就代表数组的第四个元素4
销毁
void DestroyList(SqList &L)
{
if(L.elem)
delete L.elem;//释放存储空间
}
清空
void ClearList(SqList &L)
{
L.length=0;//顺序表还在,只是没有元素了
}
求表长
Status GetLenth(SqList L)
{
return L.length;
}
判空
Status IsEmpty(SqList L)
{
if(L.length==0)
return TRUE;
else
return FALSE;
}
取值
//根据位置i获取相应位置的数据元素的内容
Status GetElem(SqList L,int i,ElemType &e)
{
if(i<1||i>L.length)
return ERROR;//取值位置不合法
e=L.elem[i-1];
return OK;
}
查找
//查找与指定值e相同的数据元素的位置
Status LocateElem(SqList L,ElemType e)
{
int i;
for(i=0;i<L.length;i++)
{
if(L.elem[i]==e)
return i+1;//查找成功,返回元素序号
}
return ERROR;
}
插入
//在指定位置插入元素
Status ListInsert(SqList &L,int i,ElemType e)
{
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];//包括插入点以后的元素都后移
L.elem[i-1]=e;
L.length++;//表长加一
return OK;
}
删除
Status ListDelete(SqList &L,int i)
{
if(i<1||i>L.length+1)
return ERROR;
for(int j=i;j<=L.length-1;j++)
L.elem[j-1]=L.elem[j];//删除点以后的元素都向前移
L.length--;
return OK;
}
完结撒花~ ending~ 谢谢浏览~~
欢迎浏览一枚计算机小白的学习总结库,如有错误,敬请批评指正,谢谢大家!希望我们能共同进步!