前言

这学期学校开设了数据结构与算法,为帮助更多小伙伴和巩固学习,我开始整理这门课的学习内容,希望能给同样在学习这门课的小伙伴们提供一些浅薄的思路。

正文部分

目录

前言

正文部分

什么是线性表

整体思路

整体设计

顺序表结构体以及状态码类型创建

实现线性表的“创删查改”功能

完整代码

main.c

LinearList.c

LinearList.h



什么是线性表

线性表(linear_list)是最常用且最简单的一种数据结构。线性表在内存中的布局和数组一样,都是连续的  。因此和链表相比,线性表的创建比链表更加容易,理解起来也更加易懂。

整体思路

整体设计

在开始设计线性表整体程序之前,我们首先需要进行思路整理,可以创建一个main.c文件来存放主函数,创建LinearList.c文件用于存放线性表相关函数,创建LinearList.h文件用于存放线性表相关结构体声明、函数声明、状态码。

顺序表结构体以及状态码类型创建

可以参考以下顺序表结构体与状态类型来进行设计

//顺序表的数据结构体
typedef struct Dat {int i;
}Dat;//顺序表结构体
typedef struct SqList {Dat* listDat; //顺序表数据的地址int Length; //顺序表长度
}SqList;typedef int Status; //状态码类型//所需要的状态码
#define INIT_SUCCEED 1 //状态码:初始化成功
#define DESTORY_SUCCEED 1 //状态码:销毁成功
#define SUCCEED 1 //状态码:成功
#define ERROR_LENGTH 0 //状态码:错误的长度

实现线性表的“创删查改”功能

  • 顺序表结构体创建完成后就可以编写代码实现“创删查改”等功能的编写了,接下来我会尽量详细为大家讲解相关代码,但由于本人也是大一生且初学数据结构,难免有一些错误之处,欢迎大家进行指正。
  • 创 —— 创建新的线性表并初始化线性表

在LinearList.c文件中编写如下代码,记得创建完成后在LinearList.h文件中写下该函数的函数声明。

/************************************************
函数名称:顺序表初始化函数
函数介绍:创建一个新的指定大小的顺序表,并赋初值0
函数参数:SqList *list -- 要创建的顺序表的地址int length -- 要新建的顺序表的长度
返回类型:Status -- 状态类型INIT_SUCCEED -- 1
************************************************/
Status InitList(SqList* list,int length)
{//创建线性表list->listDat = (Dat*)malloc(sizeof(Dat) * length);list->Length = length;//赋初值for (int i = 0; i < list->Length; i++){((list->listDat) + i)->i = 0;}return INIT_SUCCEED;
}

在创建线性表时我使用了动态内存分配的方法,先在内存中开辟一块所需要的线性表的空间,将这块空间强制类型转换为 Dat* 类型(可理解为Dat类型的数组),并将其首地址赋给 SqList结构体的成员变量 listDat 。在赋初值时,也使用了下标偏移的方法(第一个 i 为偏移量,第二个 i 为 Dat 结构体中的成员变量)。

  • 删 —— 销毁该线性表

销毁该线性表时,只需要将这块内存空间 free 并将 list->Length 赋为0即可。

/************************************************
函数名称:顺序表销毁函数
函数介绍:销毁指定的顺序表
函数参数:SqList *list -- 要销毁的顺序表的地址
返回类型:Status -- 状态类型INIT_SUCCEED -- 1
************************************************/
Status DestoryList(SqList* list)
{free(list->listDat);list->Length = 0;return DESTORY_SUCCEED;
}
  • 查 —— 查看该线性表中指定的数据
/************************************************
函数名称:顺序表查看函数
函数介绍:查看顺序表的指定位置
函数参数:SqList *list -- 要查看的顺序表的地址int n -- 要查看的值的下标(从0开始)
返回类型:Dat* dat -- 数据结构体的地址特别的,若查找错误则返回NULL
************************************************/
Dat* FindList(SqList* list, int n)
{if (n<0 || n>list->Length){return NULL;}else{return (list->listDat + n);}
}

这里返回的为顺序表指定位置的数据域的地址(Dat*类型),返回时也使用了下标偏移的方法。

  • 改 —— 为顺序表指定数据域赋值
/************************************************
函数名称:顺序表赋值函数
函数介绍:对指定顺序表的指定位置赋值
函数参数:SqList *list -- 要赋值的顺序表的地址int n -- 要赋的值的下标(从0开始)Dat dat -- 要赋的值的结构体
返回类型:Status -- 状态类型SUCCEEED -- 1ERROR_LENGTH -- 0
************************************************/
Status InputElem(SqList* list, int n,Dat dat) {if (n<0 || n>list->Length){return ERROR_LENGTH;}else{(list->listDat + n)->i = dat.i;return SUCCEED;}
}

以上就已经把这四个函数写完了。

  • 代码验证

开始在主函数中验证以上代码。

#include <stdio.h>
#include "LinearList.h"void main()
{//创建顺序表SqList myList;(void)InitList(&myList, 6);//链表赋值Dat dat = { 4 };InputElem(&myList, 2, dat);//查看顺序表值Dat* datGet = FindList(&myList, 2);//输出值printf("%d", datGet->i);//销毁顺序表(void)DestoryList(&myList);
}

运行后发现没有问题。

完整代码

main.c

#include <stdio.h>
#include "LinearList.h"void main()
{//创建顺序表SqList myList;(void)InitList(&myList, 6);//链表赋值Dat dat = { 4 };InputElem(&myList, 2, dat);//查看顺序表值Dat* datGet = FindList(&myList, 2);//输出值printf("%d", datGet->i);//销毁顺序表(void)DestoryList(&myList);
}

LinearList.c

#include "LinearList.h"/************************************************
函数名称:顺序表初始化函数
函数介绍:创建一个新的指定大小的顺序表,并赋初值0
函数参数:SqList *list -- 要创建的顺序表的地址int length -- 要新建的顺序表的长度
返回类型:Status -- 状态类型INIT_SUCCEED -- 1
************************************************/
Status InitList(SqList* list,int length)
{list->listDat = (Dat*)malloc(sizeof(Dat) * length);list->Length = length;for (int i = 0; i < list->Length; i++){((list->listDat) + i)->i = 0;}return INIT_SUCCEED;
}/************************************************
函数名称:顺序表销毁函数
函数介绍:销毁指定的顺序表
函数参数:SqList *list -- 要销毁的顺序表的地址
返回类型:Status -- 状态类型INIT_SUCCEED -- 1
************************************************/
Status DestoryList(SqList* list)
{free(list->listDat);list->Length = 0;return DESTORY_SUCCEED;
}/************************************************
函数名称:顺序表赋值函数
函数介绍:对指定顺序表的指定位置赋值
函数参数:SqList *list -- 要赋值的顺序表的地址int n -- 要赋的值的下标(从0开始)Dat dat -- 要赋的值的结构体
返回类型:Status -- 状态类型SUCCEEED -- 1ERROR_LENGTH -- 0
************************************************/
Status InputElem(SqList* list, int n,Dat dat) {if (n<0 || n>list->Length){return ERROR_LENGTH;}else{(list->listDat + n)->i = dat.i;return SUCCEED;}
}/************************************************
函数名称:顺序表查看函数
函数介绍:查看顺序表的指定位置
函数参数:SqList *list -- 要查看的顺序表的地址int n -- 要查看的值的下标(从0开始)
返回类型:Dat* dat -- 数据结构体的地址特别的,若查找错误则返回NULL
************************************************/
Dat* FindList(SqList* list, int n)
{if (n<0 || n>list->Length){return NULL;}else{return (list->listDat + n);}
}

LinearList.h

#pragma once
#include <stdlib.h>#define INIT_SUCCEED 1 //状态码:初始化成功
#define DESTORY_SUCCEED 1 //状态码:销毁成功
#define SUCCEED 1 //状态码:成功
#define ERROR_LENGTH 0 //状态码:错误的长度typedef int Status; //状态码类型//顺序表的数据结构体
typedef struct Dat {int i;
}Dat;//顺序表结构体
typedef struct SqList {Dat* listDat; //顺序表数据的地址int Length; //顺序表长度
}SqList;//函数声明
Status InitList(SqList* list, int n); //顺序表初始化函数
Status DestoryList(SqList* list); //顺序表销毁函数
Status InputElem(SqList* list, int n, Dat dat); //顺序表赋值函数
Dat* FindList(SqList* list, int n); //顺序表查看函数

数据结构(C语言版)之线性表相关推荐

  1. 《数据结构C语言版》——线性表详解,你一定能够看得懂学得会的宝典

    哈喽!这里是一只派大鑫,不是派大星.本着基础不牢,地动山摇的学习态度,从基础的C语言语法讲到算法再到更高级的语法及框架的学习.更好地让同样热爱编程(或是应付期末考试 狗头.jpg)的大家能够在学习阶段 ...

  2. 数据结构C语言版之线性表

    //顺序表: #include<stdio.h> #include<stdlib.h> #define maxlength 20 #define listincreament ...

  3. c语言线性表拷贝,数据结构(C语言版)---线性表顺序存储表示

    1.顺序表:线性表的顺序存储,用一组地址连续的存储单元存储线性表中的数据元素. 1) 特点:随机访问,即通过首地址和元素序号可在时间O(1)内找到指定元素. 表中元素的逻辑顺序与其物理顺序相同,线性表 ...

  4. 数据结构C语言实现系列——线性表(线性表链接存储(单链表))

    #include <stdio.h> #include <stdlib.h> #define NN 12 #define MM 20 typedef int elemType ...

  5. c语言线性表库函数大全,数据结构(C语言版)-线性表习题详解

    <数据结构(C语言版)-线性表习题详解>由会员分享,可在线阅读,更多相关<数据结构(C语言版)-线性表习题详解(23页珍藏版)>请在人人文库网上搜索. 1.数 据 结 构 ,线 ...

  6. 严蔚敏数据结构C语言版——线性表的链式存储方式详细代码

    一.严蔚敏数据结构C语言版 由于书上的许多地方都是伪代码,所以下面的代码对课本上的做了一些改动,使代码能够正常运行 链表的定义即相关类型定义 typedef int ElementType; type ...

  7. C语言数据结构线性表上机实验报告,数据结构实验报告实验一线性表_图文

    数据结构实验报告实验一线性表_图文 更新时间:2017/2/11 1:23:00  浏览量:763  手机版 数据结构实验报告 实验名称: 实验一 线性表 学生姓名: 班 级: 班内序号: 学 号: ...

  8. c语言 静态链表插入排序,数据结构C语言版 表插入排序

    西门豹治邺奇计 数据结构C语言版 表插入排序.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情./* 数据结构C语言版 表插入排序 算法10.3 P267-P2 ...

  9. 数据结构源码笔记(C语言):线性表的单链表示

    /* LinkList.c*/ /*线性表的单链表示:函数实现*/#include <stdio.h> #include <stdlib.h> //#include " ...

  10. 数据结构源码笔记(C语言):线性表的顺序表示

    /* SeqList.c*/ /*线性表的顺序表示:函数实现*/#include <stdio.h> #include <stdlib.h> //#include " ...

最新文章

  1. 多进程fork()函数
  2. Tailwind CSS 是一个工具集 CSS 框架
  3. 阿里云人脸识别sdk
  4. 持续集成部署Jenkins工作笔记0003---Web工程部署方式说明
  5. debian安装oracle java_如何在Ubuntu 18.04/18.10和Debian 9上安装Oracle Java 13
  6. SpringBoot 优雅停止服务的几种方法
  7. windows下python xgboost 安装方法以及安装了xgboost,pycharm却不能自动补全问题解决
  8. TPT中脚本评估的正确打开方式 (上):强大的内置函数库
  9. 比亚乔-截至2020年5月,全球两轮车销量同比下降21%
  10. PHP程序员战地日记
  11. python 大气污染物模型_Python AQI空气污染指数数据分析与机器学习
  12. c语言如何画简单图形,如何用C语言画基本图形
  13. word批量调整图片大小
  14. 聚焦Magik –最新的JVM语言
  15. mysql in个数限制_mysql where in 条件中参数个数问题
  16. 悦联 android auto,马自达6兼容Apple CarPlay和Android Auto系统 三款车载屏幕吸睛
  17. Ulua调用C#枚举
  18. manjaro安装搜狗拼音
  19. 解读UDS协议中NRC以及NRC优先级
  20. Linux安装gitlab教程

热门文章

  1. 谈恋爱也要懂https
  2. AW250 磁力块(分块)
  3. python1~10阶乘_Python练习(七)计算1到n的阶乘的和
  4. Springboot整合TrueLicense(包括License的生成、安装和验证)
  5. 【漫画】谈谈中国的键盘侠们
  6. 用U盘打造CentOS7和Windows7双系统
  7. 抢红包软件背后的 Accessibility 服务及启动原理
  8. php讲图片转换成二进制,如何把php中的图片转换成二进制
  9. 使用PYTHON图像识别实现车牌号码识别的代码
  10. Python编程基础篇