返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言数据结构中的线性表怎么使用
  • 615
分享到

C语言数据结构中的线性表怎么使用

2023-06-30 14:06:59 615人浏览 独家记忆
摘要

这篇文章主要介绍“C语言数据结构中的线性表怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言数据结构中的线性表怎么使用”文章能帮助大家解决问题。一、分文件编写1、分文件编写概念在Visua

这篇文章主要介绍“C语言数据结构中的线性表怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言数据结构中的线性表怎么使用”文章能帮助大家解决问题。

    一、分文件编写

    1、分文件编写概念

    在Visual Stdio 编译器中我们可以通过创建.h头文件和.cpp源文件来实现程序运行,使代码更美观,可读性高,如图所示:

    C语言数据结构中的线性表怎么使用

    sqlist.h 头文件 和 Sq.List.cpp 源文件分别存放全局变量、结构体及函数的声明 和 对应函数的完整实现代码。我们需要注意的是头文件和源文件的名称要一致,而且源文件要引用头文件(#include"SqList.h"),使用""而不用<>的原因是头文件是我们自己写的,只能用""引用。

    2、代码展示

    SqList.cpp内容如下:

    tips: #pragma once 代码是为了避免重复引入头文件,我们稍作记忆即可

    #pragma once#include<stdio.h>  #include<stdlib.h>  #include<malloc.h>#define LIST_INIT_SIZE  10  #define LISTINCREMENT   10    #define OK              1  #define ERROR           0  typedef struct SqList {    int* elem;    int len;    int size;}SqList;int InitList_Sq(struct SqList* L);//初始化顺序表int ListInsert_Sq(struct SqList* L, int i, int e);// 向顺序表中插入数据int ListDelete_Sq(struct SqList* L, int i, int* e);//删除顺序表中的数据  void ListShow_Sq(struct SqList* L, const char* s);//输出顺序表中的数据  void DestroyList(SqList* L);//销毁表

    SqList.cpp部分内容如下:

    #include"SqList.h"int InitList_Sq(struct SqList* L){    L->elem = (int*)malloc(LIST_INIT_SIZE * sizeof(int));    if (!L->elem)exit(0);    L->len = 0;    L->size = LIST_INIT_SIZE;    return OK;}

    二、动态分布内存malloc

    1、初识malloc

    C语言中malloc是动态内存分配函数。

    函数原型:void *malloc(unsigned int num_bytes);

    参数:num_bytes 是无符号整型,用于表示分配的字节数。

    返回值:如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回空指针NULL。void* 表示未确定类型的指针,void *可以指向任何类型的数据,更明确的说是指申请内存空间时还不知道用户是用这段空间来存储什么类型的数据(比如是char还是int等等)

    2、使用方法

    typedef struct SqList {    int* elem;    int len;    int size;}SqList;int InitList_Sq(struct SqList* L){    L->elem = (int*)malloc(LIST_INIT_SIZE * sizeof(int));    if (!L->elem)exit(0);    L->len = 0;    L->size = LIST_INIT_SIZE;    return OK;}

    我们可以看到此行代码"L->elem = (int*)malloc(LIST_INIT_SIZE * sizeof(int));"这里的L->elem就是形参结构体变量L调用int * elem 属性,因此malloc需要返回(int *)类型的指针,同时malloc右边括号放的是内存空间,大小就是宏定义的数值乘以整型(int)所占字节数,在这里说白了就是10*4个字节。模板可以这样看:(分配类型 *)malloc(分配元素个数 *sizeof(分配类型)) 如果成功,则返回该空间首地址,该空间没有初始化,如果失败,则返回0

    三、创建链表并进行增删操作

    1、初始化链表

    int InitList_Sq(struct SqList* L)

    {
        L->elem = (int*)malloc(LIST_INIT_SIZE * sizeof(int));
        if (!L->elem)exit(0);
        L->len = 0;
        L->size = LIST_INIT_SIZE;
        return OK;
    }

    首先为 int*elem分配内存空间,如果失败返回零,成功就返回内存空间首地址,并把链表长度置为零,链表最大长度设为 LIST_INIT_SIZE(大小为10)

    2、在链表中增加数据

    int ListInsert_Sq(struct SqList* L, int i, int e){    if (i<0 || i>L->len)        return ERROR;    if (L->len >= L->size) {        int* newbase = (int*)realloc(L->elem,         (LIST_INIT_SIZE + LISTINCREMENT) * sizeof(int));        if (!newbase)exit(0);        L->size += LISTINCREMENT;    }    int* q = &(L->elem[i]);    *q = e;    L->len++;    return OK;}

    形参 i 对应L->len 也就是初始长度 ,e 对应插入的值,只看第一个if条件我们会觉得条件永远成立,实际上下面插入数据后会进行加一操作,因此插入数据只能挨个插入;第二个if不难理解,如果链表长度达到最大长度,进行空间扩容,从而可以插入更多数据;后面其实是尾插法,让*q指向链表的最后一个位置,把数据放到里面,然后长度加一,插入数据结束。

    3、删除链表中指定位置数据

    int ListDelete_Sq(struct SqList* L, int i, int* e) {    if (i<1 || i>L->len) return ERROR;    int* p = &(L->elem[i - 1]);    *e = *p;    int* q = L->elem + L->len - 1;    for (++p; p <= q; ++p)        *(p - 1) = *p;    L->len--;    return OK;}

    这里 i 代表链表中的位置,*e 是该位置的数据,这样我们就能知道删除元素的值了,然后我定义*q为链表中最后一个元素的地址,随后重复让链表删除位置后的元素前移,最后链表总长度减一,删除结束。修改链表利用插入和删除操作结合就可以完成,这里没有单独定义方法,具体内容会在下面的总代码体现。

    四、代码展示与运行效果

    1、代码展示

    //1、SqList.h:#pragma once#include<stdio.h>  #include<stdlib.h>  #include<malloc.h>#define LIST_INIT_SIZE  10  #define LISTINCREMENT   10    #define OK              1  #define ERROR           0  typedef struct SqList {    int* elem;    int len;    int size;}SqList;int InitList_Sq(struct SqList* L);//初始化顺序表int ListInsert_Sq(struct SqList* L, int i, int e);// 向顺序表中插入数据int ListDelete_Sq(struct SqList* L, int i, int* e);//删除顺序表中的数据  void ListShow_Sq(struct SqList* L, const char* s);//输出顺序表中的数据  void DestroyList(SqList* L);//销毁表//2、SqList.cpp#include"SqList.h"int InitList_Sq(struct SqList* L){    L->elem = (int*)malloc(LIST_INIT_SIZE * sizeof(int));    if (!L->elem)exit(0);    L->len = 0;    L->size = LIST_INIT_SIZE;    return OK;}int ListInsert_Sq(struct SqList* L, int i, int e){    if (i<0 || i>L->len)        return ERROR;    if (L->len >= L->size) {        int* newbase = (int*)realloc(L->elem, (LIST_INIT_SIZE + LISTINCREMENT) * sizeof(int));        if (!newbase)exit(0);        L->size += LISTINCREMENT;    }    int* q = &(L->elem[i]);    *q = e;    L->len++;    return OK;}int ListDelete_Sq(struct SqList* L, int i, int* e) {    if (i<1 || i>L->len) return ERROR;    int* p = &(L->elem[i - 1]);    *e = *p;    int* q = L->elem + L->len - 1;    for (++p; p <= q; ++p)        *(p - 1) = *p;    L->len--;    return OK;}void ListShow_Sq(struct SqList* L, const char* s) {    printf("%s", s);    int i;    for (i = 0; i < L->len; i++) {        printf("%d ", L->elem[i]);    }    putchar('\n');}void DestroyList(SqList* L){    free(L->elem);    L->elem = NULL;    L->len = 0;    L->size = 0;}//3、链表操作.cpp#include"SqList.h"void mainview_user()//界面函数{    struct SqList L;    InitList_Sq(&L);    int c;    printf("     ------------------------------------\n");    printf("      |**********线性表***************|\n");    printf("      |********1   输入数据***********|\n");    printf("      |********2   查看数据***********|\n");    printf("      |********3   删除数据***********|\n");    printf("      |********4   改数据    *********|\n");    printf("      |********5   插入数据***********|\n");    printf("      |********0   退出系统***********|\n");    printf("     ------------------------------------\n");    printf("\n");    while (1)    {        printf("请选择:");        scanf_s("%d", &c);        switch (c)        {        case 1: {            int n = 0;            printf("输入要插入的数据个数:");            scanf_s("%d",&n);            for (int i = 0; i < n; i++) {                int t;                scanf_s("%d", &t);                ListInsert_Sq(&L, L.len, t);            }        }break;        case 2: {            ListShow_Sq(&L, "现在的数据为:");            system("pause"); break;        }        case 3: {            int s, v;            printf("请输入数据删除的位置s :");            scanf_s("%d", &s);            if (ListDelete_Sq(&L, s, &v))                printf("删除成功.删除的数据是:%d\n", v);            else                printf("删除失败.位置有误.");            break;        }        case 4: {            printf("请输入想要修改的位置:");            int s, v;            scanf_s("%d", &s);            if (s<1 || s>L.len)                printf("数据非法");            else {                ListDelete_Sq(&L, s, &v);                printf("请输入修改的数据:");                scanf_s("%d", &v);                ListInsert_Sq(&L, s-1, v);                ListShow_Sq(&L, "修改后为:");            }            break;        case 5: {            int i, b;            printf("输入插入的位置:");            scanf_s("%d", &i);            if (i<1 || i>L.len)                printf("数据非法");             else {                printf("插入的元素:");                scanf_s("%d", &b);                ListInsert_Sq(&L, i, b);                ListShow_Sq(&L, "插入后的数据为:");                break;            }        }        case 0: {            DestroyList(&L);            return;        }        default:printf("输入错误,请重新输入!\n"); system("pause"); printf("请重新选择:"); scanf_s("%d", &c);        }              system("PAUSE");        }    }}int main(){    mainview_user();}

    2、运行效果

    C语言数据结构中的线性表怎么使用

    关于“C语言数据结构中的线性表怎么使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网其他教程频道,小编每天都会为大家更新不同的知识点。

    --结束END--

    本文标题: C语言数据结构中的线性表怎么使用

    本文链接: https://lsjlt.com/news/329628.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • C语言数据结构中的线性表怎么使用
      这篇文章主要介绍“C语言数据结构中的线性表怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言数据结构中的线性表怎么使用”文章能帮助大家解决问题。一、分文件编写1、分文件编写概念在Visua...
      99+
      2023-06-30
    • 【Dev-c++】C语言数据结构实验——线性表
      实验一 线性表 一、实验目的     1、深刻理解线性结构的特点,以及在计算机内的两种存储结构。     2、熟练掌握线性表的顺序存储结构和链式存储结构,及其它们的基本操作,重点掌握查找、插入和删除等操作。 二、实验要求     1、认真...
      99+
      2023-10-06
      链表 服务器 java
    • C语言数据结构之线性表的链式存储结构
      1.什么是线性表的链式存储结构 —链表 存储结点:包括元素本身的信息,还有元素之间的关系逻辑的信息 这个结点有:数据域和指针域 一个指针域:指向后继结点, 单链表 二个指针域: 指向...
      99+
      2024-04-02
    • C语言超详细讲解数据结构中的线性表
      目录前言一、分文件编写1、分文件编写概念2、代码展示二、动态分布内存malloc1、初识malloc2、使用方法三、创建链表并进行增删操作1、初始化链表2、在链表中增加数据3、删除链...
      99+
      2024-04-02
    • 如何理解C语言数据结构中线性表的链式存储结构
      如何理解C语言数据结构中线性表的链式存储结构,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1.什么是线性表的链式存储结构 —链表存储结点:包括元素本身的信息,还有元素之间的关系...
      99+
      2023-06-21
    • c语言数据结构怎么使用
      在C语言中,数据结构可以通过定义结构体来实现。以下是一些常见的数据结构的使用方法示例: 链表: #include <std...
      99+
      2024-03-01
      c语言
    • C语言数据结构线性表教程示例详解
      目录线性表顺序表线性表 数据结构里我们时常看到什么什么表,线性表是最基本、最简单、也是最常用的一种数据结构,其他各种表的万恶之源就是这个线性表,他是个啥其实顾名思义: 一个线性表是n...
      99+
      2024-04-02
    • C语言数据结构顺序表怎么构造
      本篇内容介绍了“C语言数据结构顺序表怎么构造”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言在学习链表之前先掌握顺序表什么是顺序表?顺序表...
      99+
      2023-06-30
    • C语言数据结构不挂科指南之线性表详解
      目录基本概念线性表的顺序存储线性表的顺序存储的时间复杂度线性表的链接存储线性表在单链表上实现基本运算初始化初始化成功,开始插入元素单链表的时间复杂度循环链表双向循环链表期末考试基本概...
      99+
      2024-04-02
    • C语言中的结构体怎么使用
      这篇文章主要讲解了“C语言中的结构体怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言中的结构体怎么使用”吧!一、关于结构体在C语言中,结构体(struct)指的是一种数据结构,是...
      99+
      2023-06-16
    • 怎么使​用Python仿照C语言来实现线性表的顺序存储结构
      今天小编给大家分享一下怎么使用Python仿照C语言来实现线性表的顺序存储结构的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。...
      99+
      2023-06-16
    • C语言编程数据结构线性表之顺序表和链表原理分析
      目录线性表的定义和特点线性结构的特点线性表顺序存储顺序表的元素类型定义顺序表的增删查改初始化顺序表扩容顺序表尾插法增加元素头插法任意位置删除任意位置添加线性表的链式存储数据域与指针域...
      99+
      2024-04-02
    • C语言数据结构哈希表是什么
      这篇文章将为大家详细讲解有关C语言数据结构哈希表是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。#include <stdio.h>#include <stdli...
      99+
      2023-06-29
    • C语言的数据结构怎么理解
      这篇文章主要介绍了C语言的数据结构怎么理解的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言的数据结构怎么理解文章都会有所收获,下面我们一起来看看吧。1 猜数字游戏-问题描述这个游戏一点都不陌生,猜价格是一度...
      99+
      2023-06-30
    • C语言数据结构之单链表怎么实现
      本文小编为大家详细介绍“C语言数据结构之单链表怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言数据结构之单链表怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一.为什么使用链表在学习链表以前,...
      99+
      2023-07-02
    • web开发中数据结构线性结构链表是怎样的
      这篇文章给大家介绍web开发中数据结构线性结构链表是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、前言我们今天要讲解的 链表 不一样,链表是我们数据结构学习的一个重点,也有可...
      99+
      2024-04-02
    • C语言数据结构哈希表详解
      #include <stdio.h> #include <stdlib.h> #include <string.h> // 哈...
      99+
      2024-04-02
    • C语言结构体使用之链表
      目录一、结构体的概念二、结构体的用法三、结构体数组和指针四、结构体指针五、包含结构体的结构体六、链表七、静态链表八、动态链表一、结构体的概念 比如说学生的信息,包含了学生名称、学号、...
      99+
      2024-04-02
    • C语言的线性表之顺序表怎么用
      这篇文章给大家分享的是有关C语言的线性表之顺序表怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。线性表 &mdash;&mdash; 顺序表 (C语言) 概念线性表的顺序表示指的是用...
      99+
      2023-06-29
    • C语言线性表的线性链表是什么
      这篇文章主要介绍“C语言线性表的线性链表是什么”,在日常操作中,相信很多人在C语言线性表的线性链表是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言线性表的线性链表是什么”的疑惑有所帮助!接下来,请跟...
      99+
      2023-06-29
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作