Bootstrap

c语言实现简易线性表

数据结构 -线性表

线性表:零个或多个数据元素的有限序列

c语言实现一个简单的友好型线性表:

#include <stdio.h>
#include <stdlib.h>

// 1.定义线性表
typedef struct
{
    int data[100]; //以数组为载体,存放线性表
    int length;    //线性表的长度
} List;

// 2.初始化线性表
List initList();

// 3.判断线性表是否非空
int isEmpty(List list);

// 4.获取线性表元素
int getData(List list, int i);

// 5.插入元素
void insertData(List *list, int i, int data);

// 6.遍历打印线性表
void printList(List list);

// 7.删除元素
void deleteData(List *list, int i);

// 8.判断线性表是否存在某个元素
int hasData(List *list, int data);

// 9.查找元素位置
int localData(List list, int data);

// 10.清空线性表 :仍然保留空间
void clearList(List *list);

// 11.获取线性表长度
int getLen(List list);

// 12.线性表操作菜单
void meau(List List);

int main()
{
    int choice;
    while (1)
    {
        printf("请选择: 1.初始化线性表 2.退出!\n");
        scanf("%d", &choice);
        switch (choice)
        {
            //关于这里为什么加大括号 :switch中case是同属于一个作用域的,在case中定义变量可能会导致错误
            // 所以c语言不允许case中:出现定义变量,所以加个大括号划分作用域
            //或者在case后加个分号
        case 1:
        {
            List list1 = initList();
            meau(list1);
            break;
        }
        case 2:
            printf("欢迎下次使用!\n");
            return 1;
        default:
            printf("选择错误,请重新选择!\n");
            break;
        }
    }
}

// 2.初始化线性表
List initList()
{
    List list;
    list.length = 0;
    printf("初始化完成!\n");
    return list;
}

// 3.判断线性表是否非空
int isEmpty(List list)
{
    if (list.length == 0)
    {
        printf("线性表为空\n");
    }
    else
    {
        printf("线性表不为空\n");
    }
}

// 4.获取线性表元素
int getData(List list, int i)
{
    return list.data[i - 1];
}

// 5.插入元素
void insertData(List *list, int i, int data)
{
    if (list->length >= 100)
    {
        printf("线性表已满!\n");
    }
    //插入位置不合理
    else if (i > list->length + 1 || i < 1)
    {
        printf("插入位置不合理!\n");
    }
    else if (hasData(list, data) == 1)
    {
        printf("线性表已经存在该元素!\n");
    }
    else
    {
        for (int k = list->length; k >= i - 1; k--)
        {
            list->data[k] = list->data[k - 1];
        }
        list->data[i - 1] = data;
        printf("插入成功!\n");
        list->length++;
    }
}

// 6.遍历打印线性表
void printList(List list)
{
    for (int i = 0; i < list.length; i++)
    {
        printf("第%d个元素为:%d\n", i + 1, list.data[i]);
    }
}

// 7.删除元素
void deleteData(List *list, int i)
{
    if (list->length == 0)
    {
        printf("线性表为空!\n");
    }
    else if (i < 1 || i > list->length)
    {
        printf("删除位置不合理!\n");
    }
    else
    {
        for (; i < list->length; i++)
        {
            list->data[i - 1] = list->data[i];
        }
        list->length--;
    }
}

// 8.判断线性表是否存在某个元素
int hasData(List *list, int data)

{
    for (int i = 0; i < list->length; i++)
    {
        if (data == list->data[i])
        {
            printf("元素存在!\n");
            return 1;
        }
    }
    printf("元素不存在!\n");
    return 0;
}

// 9.查找元素位置
int localData(List list, int data)
{
    for (int i = 0; i < list.length; i++)
    {
        if (data == list.data[i])
        {
            printf("元素位置为%d\n", i + 1);
            return i + 1;
        }
    }
    //无此元素
    printf("无此元素!\n");
    return 0;
}

// 10.清空线性表 :仍然保留空间
void clearList(List *list)
{
    list->length = 0;
    printf("清空成功!\n");
}

// 11.获取线性表长度
int getLen(List list)
{
    printf("线性表长度为%d\n", list.length);
    return list.length;
}

// 12.线性表操作菜单
void meau(List list)
{
    int choice;
    int position;
    int data;
    while (1)
    {
        printf("请选择操作:\n ");
        printf("1.插入元素\n ");
        printf("2.删除元素\n ");
        printf("3.打印线性表\n ");
        printf("4.判断线性表是否非空\n ");
        printf("5.查找元素位置\n ");
        printf("6.判断元素是否存在\n ");
        printf("7.获取线性表长度\n ");
        printf("8.清空线性表\n ");
        printf("9.退出\n ");
        printf("请选择:");
        scanf("%d", &choice);
        switch (choice)
        {
        case 1:
            printf("请输入插入位置:");
            scanf("%d", &position);
            printf("请输入插入元素:");
            scanf("%d", &data);
            insertData(&list, position, data);
            break;
        case 2:
            printf("请输入删除元素位置:");
            scanf("%d", &position);
            deleteData(&list, position);
            break;
        case 3:
            printList(list);
            break;
        case 4:
            isEmpty(list);
            break;
        case 5:
            printf("请输入查找元素:");
            scanf("%d", &data);
            localData(list, data);
            break;
        case 6:
            printf("请输入查找元素:");
            scanf("%d", &data);
            hasData(&list, data);
            break;
        case 7:
            getLen(list);
            break;
        case 8:
            clearList(&list);
            break;
        case 9:
            printf("欢迎下次使用\n");
            exit(1);
            break;
        default:
            printf("选择错误,请重新选择!\n");
            break;
        }
    }
}
;