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

一.准备工作做好:

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

  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;
    }
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,045评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,114评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,120评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,902评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,828评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,132评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,590评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,258评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,408评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,335评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,385评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,068评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,660评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,747评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,967评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,406评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,970评论 2 341

推荐阅读更多精彩内容