数据结构 —— 线性表的顺序实现(顺序表)(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;
}

一点说明:顺序表示意图如下,帮助理解后续操作
image

补充:数组与指针的关系
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~ 谢谢浏览~~

posted @ 2024-03-19 16:40  Vicky-han  阅读(97)  评论(0编辑  收藏  举报