线性表顺序存储结构的操作

刚刚开始接触数据结构和算法,写写相关程序练习一下。今天学习了线性表的顺序存储结构,涉及到线性表的创建,初始化,获取元素,插入元素的操作,后续操作随后记录。


/************************************************
线性表的顺序存储结构,使用一维数组实现
************************************************/
#include <iostream>
using namespace std;
//创建线性表
const int MaxSize=20;
typedef int elemType;
typedef int status;
typedef struct 
{
    elemType data[MaxSize];
    int length;
}sqList;
//操作2:获取线性表第i个位置的元素
status GetElem(sqList L,int i,elemType* e);
//操作3:线性表第i个位置插入新元素
status InsertElem(sqList* L,int i,elemType e);
//操作4:删除线性表第i个位置元素
status DeleteElem(sqList* L,int i,elemType* e);
int main()
{
    sqList L;//线性表L
    L.length=5;//线性表L长度为6
    //操作1:初始化线性表
    int i=0;
    while(i<L.length)
    {
        cin>>L.data[i];
        i++;
    }
    cout<<"输入完毕\n";
    //操作2:获取线性表第i个位置的元素
    int num1,num2,num3;
    elemType* pt=new elemType;
    cin>>num1;
    cout<<"获取线性表第"<<num1<<"个元素\n";
    GetElem(L,num1,pt);
    cout<<"线性表第"<<num1<<"个元素:"<<*pt<<endl;
    //操作3:线性表第i个位置插入新元素
    elemType eInsert;
    cin>>num2>>eInsert;
    cout<<"插入到线性表第"<<num2<<"个位置\n";
    InsertElem(&L,num2,eInsert);
    for (int i=0;i<L.length;i++)
    {
        cout<<"现在线性表"<<i+1<<"的位置为:"<<L.data[i]<<endl;
    }
    //操作4:删除线性表第i个位置元素
    elemType* eDelete=new elemType;
    cin>>num3;
    cout<<"删除线性表第"<<num3<<"个位置元素\n";
    DeleteElem(&L,num3,eDelete);
    cout<<"删除的元素是:"<<*eDelete<<endl;
    for (int i=0;i<L.length;i++)
    {
        cout<<"现在线性表"<<i+1<<"的位置为:"<<L.data[i]<<endl;
    }

    return 0;
}
//操作2:获取线性表第i个位置的元素
status GetElem(sqList L,int i,elemType* e)
{
    if (L.length==0 || i>L.length)
        return 0;
    *e=L.data[i-1];
        return 1;
}
//操作3:线性表第i个位置插入新元素
status InsertElem(sqList* L,int i,elemType e)
{
    int k;
    if (L->length==MaxSize)//线性表已满
        return 0;
    else
    {
        if (i<1 || i>L->length+1)
        return 0;
        else{
            if (i<=L->length)
            {
                for (k=L->length-1;k>=i-1;k--)
                {
                    L->data[k+1]=L->data[k];
                }
            }
        }
    }
    L->data[i-1]=e;
    L->length++;
    return 1;
}
//操作4:删除线性表第i个位置元素
status DeleteElem(sqList* L,int i,elemType* e)
{
    if (i<1 || i>L->length)
        return 0;
    *e=L->data[i-1];
    for (int k=i;k<L->length;k++)
    {
        L->data[k-1]=L->data[k];
    }
    L->length--;
    return 1;
}

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值