【数据结构学习笔记】顺序表的插入&&删除

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include <iostream>
#include <stdlib.h>
using namespace std;
//状态代码
#define OK 1
#define ERROR 0
#define OVERFLOW -2
//函数返回值类型
typedef int Status;
#define InitSize 10//默认最大长度
#define ElemType int
//定义顺序表结构
typedef struct
{
    int *data;//指示动态分配数组的指针
    int MaxSize;
    int length;
} SqList;
void InitList(SqList &L) //初始化
{
    L.data=(int *)malloc(InitSize*sizeof(int));//用malloc函数申请一片连续的存储空间
    L.length=InitSize-1;
    L.MaxSize=InitSize;
}
bool InsertList(SqList &L,int i,int e) //在i处插入e
{
    if(i<1||i>L.length+1)
        return false;
    if(L.length>=L.MaxSize)
        return false;
    for(int j=L.length; j>=i; j--) //将第i个元素及之后元素后移
        L.data[j]=L.data[j-1];     //最好时间复杂度O(1) 最坏O(n)
    L.data[i-1]=e;
    L.length++;
}
bool DeleteList(SqList &L,int i,int &e)
{
    if(i<1||i>L.length)//判断是否有效
        return false;
    e=L.data[i-1];//将被删除的元素赋值给e
    for(int j=i; j<L.length; j++)
        L.data[j-1]=L.data[j];
    L.length--;
    return true;

}
//增加动态数组的长度
void IncreaseSize(SqList &L,int len)
{
    int *p=L.data;
    L.data=(int *)malloc((L.MaxSize+len)*sizeof(int));//重新分配空间
    for(int i=0; i<L.length; i++)
    {
        L.data[i]=p[i];//将数据复制到新区域
    }
    L.MaxSize=L.MaxSize+len;//顺序表最大长度增加len
    free(p);//释放原来的内存空间
}
int main()
{
    SqList L;//声明一个顺序表
    InitList(L);//初始化顺序表

    if(InsertList(L,3,3)) //在3处插入3
    {
        cout<<"插入成功"<<endl;
    }
    else
    {
        cout<<"插入失败"<<endl;
    }
    int e=-1;//用e把被删元素带回
    if(DeleteList(L,3,e)) //删除第三个元素
    {
        cout<<"删除成功:"<<e<<endl;
    }
    else
    {
        cout<<"删除失败"<<endl;
    }

    cout<<"顺序表最大长度:"<<L.MaxSize<<endl;
    IncreaseSize(L,5);//新增5个长度
    cout<<"顺序表最大长度:"<<L.MaxSize<<endl;
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值