自己手写一个线性表List【C风格】

cpp 复制代码
#include <iostream>

//线性表、顺序表List

#define MAX_SIZE 20
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0

typedef int Status;//返回状态类型
typedef int ElemType;//元素类型

//结构体
typedef struct 
{
    ElemType data[MAX_SIZE];//数据类型,数组
    int length;//长度
} myList;

//初始化
Status InitList(myList* list)
{
    //如果为空返回
    if (list == NULL)
        return ERROR;
    //不为空,设置为空
    list->length = 0;
    return OK;
}

//清空列表
Status ClearList(myList* list)
{
    //如果为空返回
    if (list == NULL)
        return ERROR;
    //不为空,设置为空
    list->length = 0;
    return OK;
}

//列表是否为空
Status ListIsEmpty(myList* list)
{
    //列表不存在,就是空
    if (list == NULL)
        return TRUE;
    //长度为0,为空
    if (list->length == 0)
        return TRUE;
    //否则就非空
    return FALSE;
}

//获取列表长度
Status ListLength(myList* list)
{
    return list->length;
}

//插入数据
Status ListInsert(myList* list,int index,const ElemType e)
{
    //如果列表为空
    if ((list->length == 0)&&(index == 1))
    {
        list->data[0] = e;
        list->length++;
        return OK;
    }

    //如果列表不为空
    if ((index <= list->length) && (index >= 1) && (list->length < MAX_SIZE))
    {
        for (int i = list->length - 1; i >= index - 1; i--)
        {
            list->data[i + 1] = list->data[i];
        }
        list->data[index - 1] = e;
        list->length++;
        return OK;
    }
    return ERROR;
}

//删除数据
Status ListDelete(myList* list, int index)
{
    //删除中间的元素
    if ((index < list->length) && (index > 0) )
    {
        for (int i = index; i < list->length; i++)
        {
            list->data[i-1] = list->data[i];
        }
        list->length--;
        return OK;
    }

    //删除末尾的元素
    if ((index == list->length) && (index > 0))
    {
        list->length--;
        return OK;
    }
    return ERROR;
}

//遍历元素
Status ListTraverse(myList* list)
{
    for (int i = 0; i < list->length; i++)
    {
        printf("%d-->",list->data[i]);
    }
    printf("\r\n");
    return OK;
}

//访问元素
Status GetElem(myList* list, int index, ElemType* e)
{
    if ((index > 0) && (index < list->length) && (list->length > 0))
    {
        *e = list->data[index - 1];
        return OK;
    }
    return ERROR;
}

int main()
{
    myList list;
    ElemType e;
    Status res;
    int i, j;
    res = InitList(&list);
    printf("初始化后:length = %d\n", list.length);

    //插入元素
    for (i = 0; i < 6; i++)
    {
        res = ListInsert(&list, 1, i);
    }
    ListTraverse(&list);//显示元素

    res = ListIsEmpty(&list);
    printf("list 是否为空?%d(1: 是,0: 否)\n", res);
    ClearList(&list);

    res = ListIsEmpty(&list);
    printf("list 是否为空?%d(1: 是,0: 否)\n", res);

    for (i = 0; i < 11; i++)
    {
        res = ListInsert(&list, 1, i);
    }
    ListTraverse(&list);//显示元素

    ListInsert(&list, 1, 0);
    ListTraverse(&list);//显示元素

    GetElem(&list, 5, &e);
    printf("第5元素是%d\n", e);

    j = list.length;
    res =  ListDelete(&list, j+1);
    if (res == ERROR)
        printf("删除第%d元素失败!\n", j + 1);
    else
        printf("删除第%d元素成功!\n", j);

    res = ListDelete(&list, j);
    if (res == ERROR)
        printf("删除第%d元素失败!\n", j);
    else
        printf("删除第%d元素成功!\n", j);

    ListTraverse(&list);//显示元素

    res = ListDelete(&list, 5);
    if(res == OK)printf("删除第%d元素成功!\n", 5);
    ListTraverse(&list);//显示元素

    return 0;
}
相关推荐
誰能久伴不乏8 小时前
Linux文件套接字AF_UNIX
linux·服务器·c语言·c++·unix
課代表8 小时前
Windows 文本搜索命令 findstr
windows·正则表达式·命令行·文本·匹配·搜索·findstr
吴声子夜歌8 小时前
Windows——系统配置与管理
windows
p***92489 小时前
Windows操作系统部署Tomcat详细讲解
java·windows·tomcat
小邓   ༽9 小时前
C语言课件(非常详细)
java·c语言·开发语言·python·eclipse·c#·c语言课件
白日做梦Q9 小时前
Linux/Windows系统下:traceroute 与 tracert 路由追踪命令全解析
linux·运维·windows
食品一少年9 小时前
【Day1-3】(Windows版)Open Harmony PC 命令行适配指南环境准备篇(2)
windows
烛衔溟9 小时前
C语言算法:动态规划基础
c语言·算法·动态规划·算法设计·dp基础
sinat_602035369 小时前
翁恺 6-
c语言