数据结构 – 顺序表

动态分配顺序表

Status InitList(SQList &L); // 初始化表:构造一个空的线性表
void DestoryList(SQList &L); // 摧毁表
void ClearList(SQList &L); // 清空表
bool Empty(SQList L); // 判断表是否为空
Status Length(SQList L); // 求表长
Status LocateElem(SQList L, ElemType e); // 按值查找元素
Status GetElem(SQList L, int id); // 按位查找元素
bool ListInsert(SQList &L, int id, ElemType e); // 插入节点
bool ListDelete(SQList &L, int id, ElemType &e); // 删除节点
void PrintList(SQList L); // 输出顺序表
顺序表定义
typedef int Status;
typedef int ElemType;
const int MAXSIZE = 100;

typedef struct {
    ElemType *data;
    int length;     // 当前长度
    int listsize;   // 当前分配的存储容量
} SQList;
初始化顺序表
Status InitList(SQList &L) 
{   // 初始化表:构造一个空的线性表
    L.data = (ElemType *)malloc(MAXSIZE * sizeof(ElemType));
    if (!L.data)
        exit(_OVERFLOW);
    L.length = 0;
    L.listsize = MAXSIZE;
    return true;
}
摧毁顺序表
void DestoryList(SQList &L)
{   // 摧毁表
	free(L.data);
	L.length = 0;
	L.listsize = 0;
}
清空顺序表
void ClearList(SQList &L)
{   // 清空表
    memset(L.data, 0, sizeof(L.data));
    L.length = 0;
	L.listsize = 0;
}
判断表是否为空
bool Empty(SQList L)
{   // 判断表是否为空
    if (L.length)
        return false;
    else
        return true;
}
求表长
Status Length(SQList L)
{   // 求表长
    return L.length;
}
按值查找元素
Status LocateElem(SQList L, ElemType e)
{   // 按值查找元素
    for (int i = 0; i < L.length; i++)
        if (L.data[i] == e)
            return i + 1;
    return 0;
}
按位查找元素
Status GetElem(SQList L, int id)
{   // 按位查找元素
    if (id < 1 || id > L.length || Empty(L))
        return false;
    return L.data[id - 1];
}
插入节点
bool ListInsert(SQList &L, int id, ElemType e)
{
    if (id < 1 || id > L.length)
        return false;
    if (L.length >= L.listsize) {
        ElemType *newbase = (ElemType *)realloc(L.data, (L.length + MAXSIZE) * sizeof(ElemType));
        if (!newbase)
            return false;
        L.listsize += MAXSIZE;
    }
    for (int i = L.length; i >= id; i--)
        L.data[i] = L.data[i - 1];
    L.data[id] = e;
    L.length++;
    return true;
}
删除节点
bool ListDelete(SQList &L, int id, ElemType &e)
{
    if (id < 1 || id > L.length)
        return false;
    e = L.data[id - 1];
    for (int i = id; i < L.length; i++)
        L.data[i - 1] = L.data[i];
    L.length--;
    return true;
}
输出顺序表
void PrintList(SQList L)
{
    if (L.length < 1)
        return;
    printf("SQList L: %d", L.data[0]);
    for (int i = 0; i < L.length; i++)
        printf(" %d", L.data[i]);
    printf("\n");
}
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值