线性表--顺序表的实现

来源:互联网 发布:云计算基础设施建设 编辑:程序博客网 时间:2024/06/08 06:00
/*
顺序表
*/

//存储结构定义
const int MaxSize = 10;        //最多存放10个元素
typedef int DataType;        //数据类型
typedef struct
{
    DataType data[MaxSize];        //存放数据元素数组
    int length;            //线性表长度
}SeqList;


//初始化顺序表

void InitList(SeqList &L)
{
    L.length = 0;        //初始化为0;
}

//建立顺序表:将给定数据元素放到一个长度为n的顺序表中,并将元素个数作为长度

void Creat(SeqList &L,DataType a[],int n)
{
    if(n>MaxSize){printf("参数非法");exit(-1);}
    for(i=0;i<n;i++)
    {
        L.data[i] = a[i];
        L.length = n;
    }
}

//求顺序表的长度

int Length(SeqList &L)
{
    return L.length;
}

//按位查找:时间复杂度为O(1)

DataType Get(SeqList &L,int i)
{
    if(i<1 && i>L.length) {printf("查找位置非法");exit(-1);}
    else return L.data[i-1];        //按位查找第i个元素,下标为i-1
}

//按值查找
int Locate(SeqList &L,DataType x)
{
    for(i=1;i<L.length;i++)
        if(L.data[i] == x)        //下标为i的元素等于x,返回i+1
            return i+1;            //查找失败,退出循环
        return 0;
}

//插入操作
void Insert(SeqList &L,int i,DataType x)
{
    if(L.length >= MaxSize)
        {
            printf("上溢");        //表满时上溢
            exit(-1);
        }
    if(i<1||i>length+1)
    {
        printf("位置");            //位置不合理
        exit(-1);
    }
    for(j = L.length;j>=i;j--)            //j表示元素序号
        L.data[j] = L.data[j-1];
    L.data[i-1] == x;
    L.length++;
    
}

//删除操作:等概率情况下,时间复杂度O(n)

DataType Delete(SeqList &L,int i)
{
    if(L.length == 0)
    {
        printf("下溢");
        exit(-1);
    }
    if(i<1||i>L.length)
    {
        printf("位置");
        exit(-1);
    }
    x = L.data[i-1];
    for(j=i;j<L.length;j++)
        L.data[j-1] = L.data[j];
    L.length--;
    return x;
}

//判空操作

int Empty (SeqList &L)
{
    if(L.length == 0)        //顺序表为空返回1
        return 1;
    else
        return 0;
}

//遍历操作

void PrintList(SeqList &L)
{
    for(i=0;i<l.length;i++)
        printf(L.data[i]);        //依次输出线性表元素
}
原创粉丝点击