数据结构C语言实现之顺序表

#include <stdlib.h>
#include <stdio.h>
//宏定义顺序表的空间大小
#define LISTSIZE 20
//宏定义函数返回值
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0

//类型定义
typedef int ElemType;
//函数返回状态类型定义
typedef int State;

//声明顺序表类型结构体
typedef struct _SqList
{
    ElemType data[LISTSIZE];
    int length;
} SqList;
//初始化顺序表
void InitList(SqList *list)
{
    list->length = 0;
}

//顺序表清空
State ClearList(SqList *list)
{
    list->length = 0;
    return OK;
}

//判断顺序表是否为空,为空返回TRUE,否则返回FALSE
State IsListEmpty(SqList *list)
{
    if(list->length == 0)
        return TRUE;
    else
        return FALSE;
}
//获得当前顺序表的长度
int GetLength(SqList *list)
{
    return list->length;
}

//返回表中第index处的元素值(index从1到Length)
//判断表空
ElemType GetElement(SqList *list, int index)
{
    //判断是否位空表
    if(list->length <= 0)
    {
        printf("The array is empty");
        exit(EXIT_FAILURE);
    }
    //检查是否越界
    if(index < 1 || index > list->length)
    {
        printf("Array Index Out Of Bounds");
        exit(EXIT_FAILURE);
    }

    return list->data[index-1];
}

//在表中第index处插入值为e的元素
//忘记判断表是否已满,忘记给长度加1

State InsertElement(SqList *list, int index, ElemType e)
{
    //检查表空间是否已满
    if(list->length >= LISTSIZE)
    {
        printf("Array Space Is Full");
        return ERROR;
    }

    //检查插入位置是否合法
    if(index<1 || index>list->length+1)
    {
        printf("Illegal Inserted Position");
        return ERROR;

    }

    //元素移位
    int i;
    for(i = list->length; i>=index; i--)
    {
        list->data[i] = list->data[i-1];
    }

    //在位置index处插入元素e
    list->data[index-1] = e;
    //更新顺序表长度
    list->length++;

    return OK;

}

//删除表中第index处的元素
//注意判断表是否为空,给长度减1
State DeleteElement(SqList *list, int index)
{
    //判断是否位空表
    if(list->length <= 0)
    {
        printf("The array is empty");
        return ERROR;
    }
    //检查删除位置是否合法
    if(index<1 || index>list->length)
    {
        printf("Illegal deleted Position");
        return ERROR;
    }

    //元素移位
    int i;
    for(i = index+1; i <= list->length; i++)
        list->data[i-2] = list->data[i-1];
    //更新表长度
    list->length--;

    return OK;
}

//返回L中第1个与e满足关系的数据元素的位序。 若这样的数据元素不存在,则返回值为-1
//考虑是否为空表,返回的是i+1
int LocateElement(SqList *list,ElemType e)
{
    int i;
    //判断是否位空表
    if(list->length <= 0)
    {
        printf("The array is empty");
        return -1;
    }

    for(i = 0; i < list->length; i++)
    {
        if(list->data[i] == e)
            return i+1;
    }
    //不存在
    return -1;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值