数据结构顺序表实现

实现了动态分配存储空间的顺序表的初始化、创建、插入和删除操作。首先定义了存储顺序表的结构体SeqList,并初始化了存储空间、长度和分配大小。接下来定义了初始化顺序表的函数Init_SeqList,创建顺序表的函数create_SeqList,插入元素的函数insert_SeqList和删除元素的函数delete_SeqList。

在create_SeqList函数中,如果需要插入的元素数量超过了当前分配的存储空间大小,会进行扩容。然后根据输入的元素个数依次将元素插入到顺序表中。

在insert_SeqList函数中,首先判断插入位置是否合法,并进行空间扩容。然后将插入位置之后的元素依次往后移动,将要插入的元素放入对应位置。

在delete_SeqList函数中,首先判断删除位置是否合法,然后将要删除的元素保存起来。接着将删除位置之后的元素往前移动,长度减一。

1. 初始化顺序表函数Init_SeqList:
这个函数的作用是初始化一个顺序表。传入参数为SeqList类型的引用L。函数首先动态分配了一个大小为InitSize的存储空间,并将其基地址赋给L.data。然后将长度L.length置为0,表示当前顺序表中没有元素。最后将分配的存储空间大小L.listsize设为InitSize。

2. 创建顺序表函数create_SeqList:
这个函数的作用是在已有的顺序表基础上创建一个新的顺序表。传入参数为SeqList类型的引用L和要创建的元素个数n。函数首先判断如果要插入的元素个数大于当前存储空间大小L.listsize,就对存储空间进行扩容。然后根据输入的元素个数n,依次读取用户输入的元素并存储到顺序表中,同时更新顺序表长度L.length。函数返回1表示创建成功,返回0表示创建失败。

3. 插入元素函数insert_SeqList:
这个函数的作用是在顺序表的第k个位置插入一个元素elem。传入参数为SeqList类型的引用L,插入位置k和要插入的元素elem。函数首先判断插入位置k是否合法,然后再判断如果当前存储空间不足,对存储空间进行扩容。然后将插入位置之后的元素依次往后移动一位,将要插入的元素elem放入对应位置。最后更新顺序表长度L.length并返回1表示插入成功,返回0表示插入失败。

4. 删除元素函数delete_SeqList:
这个函数的作用是删除顺序表中第k个位置的元素,并将其值保存在引用参数elem中。传入参数为SeqList类型的引用L,删除位置k和一个整型引用elem。函数首先判断删除位置k是否合法,然后将要删除的元素值保存在elem中。接着将删除位置之后的元素依次往前移动一位,更新顺序表长度L.length并返回1表示删除成功,返回0表示删除失败。

在主函数main中,还没有实现具体的操作逻辑,可以在主函数中调用这些函数来操作顺序表。
 

#include<iostream>
using namespace std;
/**
 * 动态分配存储空间
 */
#define InitSize 100  //动态分配存储空间时,不限制最大,只给定一个初始值
#define ListIncrement 10  //分配增量
typedef    struct
{
    int* data;   //指向所分配的存储空间的基地址
    int length;  //当前的长度,已经存储元素后占用的长度
    int listsize;  //当前分配的存储空间的大小,若不足,可再进行分配
}SeqList;

//初始化线性表
/**
 * 初始化顺序表,动态分配存储空间
 * @param L 顺序表L,引用型
 */
void Init_SeqList(SeqList& L) {
    L.data = (int*)malloc(sizeof(int) * InitSize);
    L.length = 0;
    L.listsize = InitSize;
}
//创建顺序表
int create_SeqList(SeqList& L, int n) {
    if (n > L.listsize) {
        int* newbase = (int*)realloc(L.data, sizeof(int) * (L.listsize + ListIncrement));
        if (newbase) {
            L.data = newbase;
            L.listsize += ListIncrement;
        }
        else {
            return 0;
        }
    }
    for (int i = 0; i < n; i++) {
        scanf("%d", &L.data[i]);
        L.length = n;
        return 1;
    }
}
int insert_SeqList(SeqList& L, int k, int elem) {
    if (k <= 1 || k > L.length) {
        return 0;
    }
    if (L.length > L.listsize) {
        int* newbase = (int*)realloc(L.data, sizeof(int) * (L.length + ListIncrement));
        if (newbase) {
            L.data = newbase;
            L.length += ListIncrement;

        }
    }
    for (int i = L.length; i >= k ; i--) {
        L.data[i] = L.data[i - 1];

    }
    L.data[k - 1] = elem;
    L.length++;
    return 1;
}
//删除元素
int delete_SeqList(SeqList& L, int k, int& elem) {
    if (k <= 1 || k > L.length) {
        return 0;

    }
    elem = L.data[k - 1];
    for (int i = k; i <= L.length; i++) {
        L.data[i-1] = L.data[i];

    }
    L.length--;
    return 1;
}


int main() {

    return 0;
}
 

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值