美文网首页
数据结构(顺序线性表___C语言代码实现)

数据结构(顺序线性表___C语言代码实现)

作者: domsylavy | 来源:发表于2018-09-24 21:19 被阅读0次

一.准备工作做好:

对于需要建构顺序线性表的必备变量和结构体

  1. 状态量
  2. 内存大小量、内存增加量
  3. 重定义整形(int)类型变量
    #include<stdio.h>
    #include<stdlib.h>
    #include <malloc.h>
    
    #define LIST_INIT_SIZE 10
    #define LIST_INCREAMENT 10
    #define ERROR -2
    #define OK 1
    #define TRUE 1
    #define FLASE 0
    #define OVERFLOW -1
    
    typedef int ElemType; 
    typedef int Status; 
    typedef struct{     
        ElemType *elem;     
        int length;     
        int Listsize;
    }Sqlist;

二、构建初始化函数

  1. 分配空间(void×)malloc(LIST_INIT_SISE * sizeof(ElemType))
  2. 对于内存是否分配成功的容错性检查(特殊返回值)
  3. 对于线性表空表的长度进行初始化为0
  4. 定义内存大小(方便以后比较是否需要扩容)
    Status InitList(Sqlist &L)
    {
        L.elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));
        if(!L.elem)
        {
            printf("硬盘存储空间有限,无法开辟空间\n");
            return ERROR;
        }
        L.length = 0;
        L.Listsize = LIST_INIT_SIZE;//对于内存大小不纠结于字节数,而是能存储的元素个数
        return OK;
    }

三、对线性表进行初值填充

1.判断当前的存储空间是否大于赋值的空间(内存大小判断检查)
(2. 新开辟空间容错性检查
(2. 循环赋值

  1. 对线性表的长度赋值
    Status ValueList(Sqlist &L)
    {
        int i,j;
        printf("请输入线性表表单个数:");
        scanf("%d",&i);
        if(i > L.Listsize)//输入表单数,大于开辟内存大小时
        {
            while(1)//开辟空间直到大于需要的范围为止
            {
                if(i > L.Listsize)
                {
                    L.elem = (ElemType *)realloc(L.elem,LIST_INCREAMENT*sizeof(ElemType));
                    L.Listsize += LIST_INCREAMENT;
                }
                else break;
            }
        }
        for(j = 0 ;j < i; j++)
                scanf("%d",&L.elem[i]);
        L.length = i;//表单长度进行赋值,保存
        printf("赋值成功!!!\n");
        return OK;
    }

三、重置空表

空表的定义:线性表中元素个数n(n>=0)定义为线性表的长度,n = 0时称为空表。

  1. 空表时指针存在,线性表个数归零。
    Status ClearList(Sqlist &L)
    {
        if(L.elem)
        {
            L.length = 0;
            printf("线性表重置成功!!!\n");
            return OK;
        }
        else
        printf("重置失败,线性表不存在!!!\n");
        return FLASE;
    }

##四、判断空表
1. 空表时指针存在,判断线性表个数是否为零。

    Status ListEmpty(Sqlist L)
    {
        if(L.elem)
        {
            if(L.length == 0){printf("此表为空表!!!\n"); return TRUE;}
            printf("此表不为空表!!!\n");
            return FLASE;
        }
        else
        printf("判断失败,线性表不存在!!!\n");
        return ERROR;
    }

五、线性表长度

  1. 直接返回值L.length
    Status ListLength(Sqlist L)
    {
        printf("%d",L.length);
        return OK;
    }

六、获取线性表元素

  1. 确定传输参数类型
  2. 判断获取的索引号是否出边界
    Status GetElem(Sqlist L ,int index )
    {
        int e;
        if(index < 1 || index > L.length)
        {
            printf("获取值失败!!!索引超出边界。\n");
            return ERROR;
        }
        e = L.elem[index];
        return e;
    }

七、查找线性表元素

  1. 遍历元素,找到输出返回
  2. 找不到,返回ERROR。
    Status Search(Sqlist L,ElemType e)
    {
        int j = 0;
        for(;j < L.length; j++)
        {
            if(L.elem[j] == e)
            {
                printf("找到索引元素!!!其编号是%d号\n",j+1);
                return j+1;
            }
            else
            printf("未找到元素!!!\n");
            return FLASE;
        }
    return OK;
    }

八、删除线性表元素

  1. 判断删除索引是否大于线性表最大元素索引
  2. 找到指定位置,向前一位赋值。
    Status DeleteList(Sqlist &L,int index)
    {
        if(index < 1 || index > L.length)
            {
                printf("删除失败!!!索引超出边界。\n");
                return ERROR;
            }
        else
            {
                int j = index- 1;
                for(; j >= L.length-1 ; j++)
                    L.elem[j+1] = L.elem[j];
                L.length--;
                return OK;
            }
    }

九、插入线性表

  1. 插入值的范围[ 1 ~ L.length+1 ] (在每一位的前面插入元素)
  2. 判断是否出了索引边界
     Status DeleteList(Sqlist &L,int index)
        {
            if(index < 1 || index > L.length)
                {
                    printf("删除失败!!!索引超出边界。\n");
                    return ERROR;
                }
            else
                {
                    int j = index- 1;
                    for(; j >= L.length-1 ; j++)
                        L.elem[j+1] = L.elem[j];
                    L.length--;
                    return OK;
                }
        }

十、主菜单

    int main()
    {
    
        Sqlist L;
        int e = 0,index;
        while(1)
        {
            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("10. 打印\n");
            printf("11. 退出\n");
            int x;
            scanf("%d",&x);
        switch(x)
            {
            case 1: InitList(L);  break;
            case 2: ValueList(L); break;
            case 3: ClearList(L); break;
            case 4: ListEmpty(L); break;
            case 5: ListLength(L); break;
            case 6:
                {
                    printf("请输入想要查找元素的索引号:\n");
                    scanf("%d",&index);
                    GetElem(L,index);
                }break;
            case 7:
                {
                    printf("请输入想要查找的元素:\n");
                    scanf("%d",&e);
                    Search(L,e);
                }break;
            case 8:
                {
                    printf(" 请输入删除元素的索引号:\n");
                    scanf("%d",&index);
                    DeleteList(L,index);
                }break;
            case 9:
                {
                    printf("请输入插入元素的位置索引号:\n");
                    scanf("%d",&index);
                    printf("请输入想要插入的元素:\n");
                    scanf("%d",&e);
                    InsertList(L,index,e);
                }break;
            case 10: PrintList(L);
            case 11: exit(0);
            }
        }
    return 0;
    }

相关文章

  • 数据结构(顺序线性表___C语言代码实现)

    一.准备工作做好: 对于需要建构顺序线性表的必备变量和结构体 状态量 内存大小量、内存增加量 重定义整形(int)...

  • (一)线性表C语言实现

    线性表 线性表是最简单最常用的一种数据结构 C语言实现 实例

  • 【数据结构】顺序表的实现与操作

    整理数据结构代码,回顾顺序表的实现方法 认识线性表 线性表(Linear_list)是最常用且最简单的一种数据结构...

  • 线性表的顺序存储

    一、概念 线性表的顺序存储指的是用一组地址连续的存储单元依次存储线性表的数据结构。——《数据结构》C语言版 简而言...

  • 线性表

    学习内容来自数据结构详解——线性表(C++实现) 线性表(List):零个或多个数据元素的有限序列。顺序表(数组)...

  • 数据结构

    参考书:《数据结构(C语言版)》,严蔚敏、吴伟民编著 1 线性表 1.1 顺序存储结构 只要确定了线性表的起始位置...

  • # 数据结构和算法系列1 线性表之顺序表

    阅读目录 什么是线性表线性表的两种存储结构顺序表的存储结构表示顺序表的常见操作和代码实现 数据结构与算法这块一直是...

  • 「数据结构 一」C 语言实现顺序表

    作者原创,转载请注明出处。 个人博客:renzhe.name 用 C 语言实现顺序存储结构的线性表,即顺序表。 下...

  • 目前的计算机能力

    数据结构、操作系统、计算机网络,几乎没有代码量。 需要进阶: c语言-->数据结构c语言实现-->能够用c语言手写...

  • 数据结构的标准形式(C、Python版本):1.顺序表

    一:C语言版本 顺序表基本操作 顺序表的定义/*****InitSize 线性表长度MaxSize 线性表允许的...

网友评论

      本文标题:数据结构(顺序线性表___C语言代码实现)

      本文链接:https://www.haomeiwen.com/subject/ckmhoftx.html