C++实现线性顺序表的初始化,插入,删除,销毁,清空等功能

C++实现线性顺序表的初始化,插入,删除,销毁,清空等功能

以下代码主要严蔚参考敏主编的《数据结构》(C语言)编写

//线性顺序表
#include <iostream>
#define MAX_INTT_LIST 100
#define Elemtype int
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
typedef int Status;


using namespace std;
typedef struct List
{
    Elemtype *Elem;
    int Length;
    int Listsize;

};
Status InitList( List &L) //初始化一个线性表;
{
    L.Elem=new Elemtype[MAX_INTT_LIST];
    if(!L.Elem)
    {
        return ERROR;
    }
    else
    {
        L.Length=0;
        L.Listsize=MAX_INTT_LIST ;
        return OK;
    }
}
void DestoryList(List &L)//销毁一个线性表
{
    delete[] L.Elem;
    L.Length=0;
    L.Listsize=0;
}
void ClearList(List &L)//清空一个线性表
{
    L.Length=0;
}
int ListLength(List L)//返回线性表的长度
{
    return L.Length;
}
Status GetElem (List L,int i, Elemtype &e)//用e返回线性表L中第i个数据元素的值
{
    if(i>ListLength(L)||i<0)
    {
        return FALSE;
    }
    else
    {
        e=L.Elem[i];
        return TRUE;
    }

}
Status ListEmpty(List L)//查看线性表L是否为空
{
    if(L.Length==0)
        return TRUE;
    else
        return FALSE;
}
Status compare(Elemtype a,Elemtype b)
{
    if(a==b)
        return TRUE;
    else
        return FALSE;
}
int LocateElem(List L, Elemtype e,Status (*compare)(Elemtype a,Elemtype b))//返回线性表中第一个与e满足compare()关系的数据元素的位序
{
    int i=1;
    while(i<=L.Length&&!(*compare)(L.Elem[i],e))
        i++;
    if(i<=L.Length)
        return i;
    else
        return 0;
}
void PriorElem(List L, Elemtype cur_e, Elemtype &pre_e)//在线性表L中求数据元素cur_e的前驱
{
    for(int i=1; i<=L.Length; i++)
    {
        if(L.Elem[i]==cur_e&&i!=1)
        {
            pre_e=L.Elem[i-1];
            break;
        }
    }

}
void NextElem(List L,Elemtype cur_e,Elemtype &next_e)//在线性表L中求数据元素cur_e的后继
{
    for(int i=1; i<=L.Length; i++)
    {
        if(L.Elem[i]==cur_e&&i!=L.Length)
        {
            next_e=L.Elem[i+1];
            break;
        }
    }
}
void ListInsert(List &L,int i,Elemtype e)//在线性表L中插入一个新的元素
{
    if(i<=L.Length+1&&i>=1)
    {
        for(int k=L.Length+1; k>i; k--)
        {
            L.Elem[k]=L.Elem[k-1];
        }
        L.Elem[i]=e;
        L.Length++;
    }
}
void ListDelete(List &L,int i,Elemtype &e)//在线性表L中删除第i个数据元素
{
    if(i<=L.Length&&i>=1&&!ListEmpty(L))
    {
        e=L.Elem[i];
        for(int k=i; k<=L.Length; k++)
        {
            L.Elem[k]=L.Elem[k+1];
        }
        L.Length--;
    }
}

Elemtype visit(List L,int i)
{
    if(L.Elem[i]!=NULL)
        return L.Elem[i];
    else
        return FALSE;
}
Elemtype ListTraverse(List L,Elemtype (*vist)(List L,int i))//遍历线性表
{
    for(int i=1; i<=L.Length; i++)
    {
        if(vist(L,i))
            return L.Elem[i];
        else
            return FALSE;
    }
}
int main()
{
    List L;
    int e=0;
    Elemtype pre_e=0,next_e=0;
    InitList(L);
    cout<<ListEmpty(L)<<endl;
    ListInsert(L,1,6);
    ListInsert(L,2,7);
    ListInsert(L,3,8);
    for(int i=1; i<=L.Length; i++)
    {
        cout<<L.Elem[i]<<" ";
    }
    cout<<endl;
    GetElem(L,2,e);
    cout<<e<<endl;
    PriorElem(L,7,pre_e);
    cout<<pre_e<<endl;
    NextElem(L,7,next_e);
    cout<<next_e<<endl;
    cout<<LocateElem(L,8,(*compare))<<endl;
    ListDelete(L,3,e);
    cout<<e<<endl;
    for(int i=1; i<=L.Length; i++)
    {
        cout<<L.Elem[i]<<" ";
    }
    cout<<endl;



}


最近在提前预习数据结构这门课,在阅读严蔚敏的《数据结构》时发现书上的这一部分并未给出详细代码,于是在这里写下自己写的代码,希望能够给同样学习这方面知识的小伙伴一点参考。
若以上代码有任何错误或可以改进的地方欢迎在评论区指出并讨论。
感谢你的阅读。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值