数据结构-学习-01-线性表之顺序表-初始化、销毁、清理、获取长度、判断为空、获取元素等实现

news2024/11/18 1:34:48

一、测试环境

名称
cpu12th Gen Intel® Core™ i7-12700H
操作系统CentOS Linux release 7.9.2009 (Core)
内存3G
逻辑核数2
gcc 版本4.8.5 20150623

二、个人理解

数据结构分为逻辑结构和物理结构(也称为存储结构)。

1、逻辑结构

逻辑结构又可以分为以下四种结构。

(1)集合结构

例如:{1,2,3,5,6},这里面的元素除了属于一个相同的集合外,各个元素之间没有任何联系。

(2)线性结构

例如:(a)-(b)-(c),a是b的“直接前驱”,b是a的“直接后继”。相邻元素之间是有一定的关系存在,且是一对一的。

(3)树形结构

结构中的各个元素之间存在一对多的关系,图不好画,bing一个,例如:
在这里插入图片描述

(4)图结构

结构中的数据元素是多对多的关系,图不好画,bing一个,例如:
在这里插入图片描述

2、物理结构

物理结构分为两种。

(1)顺序结构

顺序存储结构是把数据元素存放在一组地址连续的存储单元里,其数据元素间的逻辑关系和物理关系是一致的。
编写C代码时,用数组的方式实现。

(2)链式结构

链式存储结构是把数据元素存放在任意的存储单元里,这些存储单元可以是连续的,也可以是不连续的,数据元素的物理关系并不能反映其逻辑关系,因此需要借助指针来表示数据元素之间的逻辑关系。
编写C代码时,用链表的方式实现。

三、代码

1、LinearTable_OrderTable.c

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "LinearTable_OrderTable.h"

void PrintPretty()
{
    printf("*********************************\n");
}

void *MyMalloc(size_t size)
{
    void *Result = (void *)malloc(size);
    if(Result == NULL)
    {
        printf("malloc Function Exec Fail , Out Of Memory ,Exit!!!\n");
        exit(ExceptionExitFlag);
    }
    return Result;
}

void JudgePointerNull(OrderTable *OrderTablePointer)
{
    if(OrderTablePointer == NULL)
    {
        printf("Pointer Is Null ,Exit !\n");
        exit(ExceptionExitFlag);
    }
}

Status InitOrderTable(OrderTable *OrderTablePointer)
{
    printf("Start Init List\n");
    JudgePointerNull(OrderTablePointer);
    OrderTablePointer->ElemArray    = (ElemType *)MyMalloc(sizeof(ElemType) * ElemArrayMaxLen);
    memset(OrderTablePointer->ElemArray, '\0', sizeof(ElemType) * ElemArrayMaxLen);
    OrderTablePointer->ElemArrayLen = 0;
    printf("Init List Success !!!\n");
    PrintPretty();
    return SuccessfulFlag;
}

void DestroyOrderTable(OrderTable *OrderTablePointer)
{
    printf("Start Destroy List\n");
    JudgePointerNull(OrderTablePointer);
    free(OrderTablePointer->ElemArray);
    OrderTablePointer->ElemArray = NULL;
    free(OrderTablePointer);
    OrderTablePointer = NULL;

    printf("Destroy List Success !!!\n");
    PrintPretty();
}

void PrintOrderTable(OrderTable *OrderTablePointer)
{
    printf("Print List\n");
    JudgePointerNull(OrderTablePointer);
    int i;
    printf("ElemArray    : ");
    for(i=0; i<ElemArrayMaxLen -1; i++)
    {
        printf("%c ,",OrderTablePointer->ElemArray[i]);
    }
    printf("%c \n",OrderTablePointer->ElemArray[i]);
    printf("ElemArrayLen : %d\n",OrderTablePointer->ElemArrayLen);
    PrintPretty();
}

void ClearOrderTable(OrderTable *OrderTablePointer)
{
    printf("Clear Order Table\n");
    JudgePointerNull(OrderTablePointer);
    OrderTablePointer->ElemArrayLen = 0;
    PrintPretty();
}

int GetOrderTableLen(OrderTable *OrderTablePointer)
{
    JudgePointerNull(OrderTablePointer);
    printf("Get ElemArray Len : %d\n",OrderTablePointer->ElemArrayLen);
    PrintPretty();
    return OrderTablePointer->ElemArrayLen;
}

int JudgeOrderTableIsEmpty(OrderTable *OrderTablePointer)
{
    JudgePointerNull(OrderTablePointer);
    if(OrderTablePointer->ElemArrayLen == 0)
    {
        printf("Order Table Is Empty\n");
        PrintPretty();
        return SuccessfulFlag;
    }
    else
    {
        printf("Order Table Is Not Empty\n");
        PrintPretty();
        return FailFlag;
    }
}

int GetOrderTableElem(OrderTable *OrderTablePointer, int ElemPosition, ElemType *VarElem)
{
    JudgePointerNull(OrderTablePointer);
    if(ElemPosition < 1 || ElemPosition > OrderTablePointer->ElemArrayLen)
    {
        printf("Error ElemPosition : %d, Need 1 <= ElemPosition <= ElemArrayLen(%d)\n",ElemPosition,OrderTablePointer->ElemArrayLen);
        PrintPretty();
        return FailFlag;
    }
    
    *VarElem = OrderTablePointer->ElemArray[ElemPosition-1];
    printf("Get  ElemPosition : %d Elem Successful\n",ElemPosition);
    PrintPretty();
    return SuccessfulFlag;
}

2、LinearTable_OrderTable.h

#ifndef LinearTable_OrderTable_H
#define LinearTable_OrderTable_H

#define ExceptionExitFlag -1
#define SuccessfulFlag     1
#define FailFlag           0
#define ElemArrayMaxLen   10

typedef int Status;
typedef char ElemType;
typedef struct 
{
    ElemType *ElemArray;
    int      ElemArrayLen;
}OrderTable;

void *MyMalloc(size_t size);
void PrintOrderTable(OrderTable *OrderTablePointer);
Status InitOrderTable(OrderTable *OrderTablePointer);
void DestroyOrderTable(OrderTable *OrderTablePointer);
void JudgePointerNull(OrderTable *OrderTablePointer);
void ClearOrderTable(OrderTable *OrderTablePointer);
int GetOrderTableLen(OrderTable *OrderTablePointer);
int JudgeOrderTableIsEmpty(OrderTable *OrderTablePointer);
int GetOrderTableElem(OrderTable *OrderTablePointer, int ElemPosition, ElemType *VarElem);

void PrintPretty();

#endif

3、main.c

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "LinearTable_OrderTable.h"

int main()
{
    ElemType *VarElem = NULL;

    OrderTable *TestData = (OrderTable *)MyMalloc(sizeof(OrderTable));;
    InitOrderTable(TestData);
    PrintOrderTable(TestData);
    ClearOrderTable(TestData);
    GetOrderTableLen(TestData);
    JudgeOrderTableIsEmpty(TestData);
    GetOrderTableElem(TestData, 1, VarElem);
    DestroyOrderTable(TestData);
    return SuccessfulFlag;
}

4、makefile

CC = gcc
CFLAG_O = -c -Wall -fpic -O3
CFLAG_SO = -shared
CFLAG_EXEC = -Wall -O3
CFLAG_ALIAS = -o
RM_COMM = rm -rf
SRC_PATH = ../test_src/
EXEC_PATH = ../exec/
TEMP_PATH = ../temp/
INCLUDE_COMMAND = -I
LIB_COMMAND = -L
INCLUDE_PATH = ../include/
LIB_PATH = ../lib/
LIB_NAME = -l

#gcc -g -Wall LinearTable_OrderTable.c main.c -o Test_LinearTable_OrderTable 

all : main

main : 
        $(CC) $(CFLAG_EXEC) LinearTable_OrderTable.c main.c $(CFLAG_ALIAS) Test_LinearTable_OrderTable 

clean : 
        $(RM_COMM) Test_LinearTable_OrderTable

四、编译运行

[gbase@czg2 LinearTable_OrderTable]$ make clean
rm -rf Test_LinearTable_OrderTable

[gbase@czg2 LinearTable_OrderTable]$ make
gcc -Wall -O3 LinearTable_OrderTable.c main.c -o Test_LinearTable_OrderTable 

[gbase@czg2 LinearTable_OrderTable]$ ./Test_LinearTable_OrderTable 
Start Init List
Init List Success !!!
*********************************
Print List
ElemArray    :  , , , , , , , , , 
ElemArrayLen : 0
*********************************
Clear Order Table
*********************************
Get ElemArray Len : 0
*********************************
Order Table Is Empty
*********************************
Error ElemPosition : 1, Need 1 <= ElemPosition <= ElemArrayLen(0)
*********************************
Start Destroy List
Destroy List Success !!!
*********************************

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/30005.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JS 事件

事件 事件是 JS 和 HTML 交互的桥梁。采用“观察者模式”&#xff0c;使用仅在事件发生时执行的监听器&#xff08;也叫处理程序&#xff09;订阅事件 事件流 事件流描述的是页面接收事件的顺序。分为 3 各阶段&#xff1a; 事件捕获&#xff1a;最先触发&#xff0c;可以做…

致敬经典 睛彩再现——AVS产业联盟和中国移动咪咕公司携手推动AVS3视频、音频标准

2022年11月14日&#xff0c;中国移动咪咕公司首发AVS3移动端规模化商用版本咪咕视频6.0.7.00&#xff0c;该版本下设的“致敬经典 睛彩再现”专区、以及“菁彩视听”双Vivid直播视角&#xff08;Audio Vivid & HDR Vivid&#xff09;&#xff0c;通过国家自主的AVS3、Audio…

回顾复习【矩阵分析】初等因子 和 矩阵的相似 || 由不变因子求初等因子 || 由初等因子和秩求Smith标准形(不变因子)

目录 1. 由不变因子,引出 初等因子的概念2. 【必看】例子:已知 不变因子,求初等因子。3.【必看】 例子:已知 秩和初等因子,求史密斯标准形(不变因子)4. 分块矩阵 初等因子的 求法5. 数字矩阵的相似 与 入-矩阵的等价1. 由不变因子,引出 初等因子的概念 例如,下面两个矩阵…

Kotlin 开发Android app(十):Android控件绑定ViewBinding

上一节中&#xff0c;我们知道了Android的布局&#xff0c;这种把界面和逻辑控制分开&#xff0c;是编程里很好的分离方式&#xff0c;也大大的解耦了界面和逻辑控制&#xff0c;使得编程的逻辑不在和界面挂钩。 有了界面的布局&#xff0c;我们需要把界面和代码部分进行绑定&…

OpenPose训练教程

找遍全网都没有非常完整的OpenPose训练教程 决定自己摸索并且记录下来 openpose作者发布了一份训练代码&#xff0c;下面根据这个来操作 GitHUB地址&#xff1a; openpsoe_train 环境&#xff1a;ubuntu 执行matklab脚本的时候懒得下载新的matlab 就在windows下运行的 感觉没…

品质为先,服务不停,广州流辰信息公司恪守初心,匠心为民!

随着互联网技术的蓬勃发展&#xff0c;越来越多的企业也感受到了日益激烈的竞争&#xff0c;也意识到墨守成规的发展模式必当会让企业停滞不前&#xff0c;只有一步一个脚印&#xff0c;始终跟随市场的脚步创新升级&#xff0c;才有可能在汹涌的市场洪流中站稳脚跟。广州流辰信…

精简 Windows10

下载链接文后评论里找&#xff1a; 旧机福音 极限精简Win10系统Tiny10https://baijiahao.baidu.com/s?id1743901721464184983不想成天折腾操作系统&#xff0c;一直以来都认为跟着微软每月升级就好了。但是现实啪啪的打脸&#xff1a;升级到Windows11 22H2 后&#xff0c; 连…

常见算法设计与分析的简单C++代码实现(排列、二分法搜索、Dijkstra算法、元素换位、单调子序列、硬币问题、运动员最佳匹配问题)

常见算法设计与分析的简单C代码实现&#xff08;排列、二分法搜索、Dijkstra算法、元素换位、单调子序列、硬币问题、运动员最佳匹配问题&#xff09;1 一些简单排列问题2 二分法查找3 前后元素换位4 找最长单调递增子序列&#xff08;O(n2)复杂度&#xff09;5最小硬币问题一、…

c3p0,DBCP,Druid(德鲁伊)数据库连接池

c3p0&#xff0c;DBCP&#xff0c;Druid&#xff08;德鲁伊&#xff09;数据库连接池 每博一文案 佛说&#xff1a;前世 500 次的回眸&#xff0c;才换来今生的一次擦肩而过。 人与人之间的缘分&#xff0c;真的无需强求&#xff0c;并不是所有的感情都能天长地久&#xff0c;…

C#压缩图片

SqlSer数据库设置保存图片字段类型为Image类型 对应保存 方法参数为图片路径&#xff0c;压缩后路径&#xff0c;压缩最大宽度&#xff0c;压缩最大高度 引用类型using System.Data; using System.Drawing; using System.IO; \完整类 /// <summary> /// 按比例缩放&…

七牛qshell 批量上传 mac 本地目录

七牛qshell 批量上传 mac 本地目录下载路径及使用方法(官方)下载到自己指定的文件夹添加环境变量,使qshell在任意地方可以执行添加密钥 生成账户文件下载路径及使用方法(官方) https://developer.qiniu.com/kodo/1302/qshell记录自己部署遇到的问题及操作步骤 下载到自己指定…

音视频开发核心知识点及源码解析,还不赶紧收藏起来

随着基础设施的完善&#xff08;光纤入户、wifi覆盖、5G普及&#xff09;的影响&#xff0c;将短视频、直播、视频会议、在线教育、在线医疗瞬间推到了顶峰&#xff0c;人们对音视频的需求和要求也越来越强烈 音视频开发还具有许多方向&#xff0c;比如&#xff1a; 如果对音视…

C语言:while后加分号与for后加分号的区别

while 后面不能加分号&#xff0c;否则虽然编译可以通过&#xff0c;但是执行程序时会发生死循环#include <stdio.h> int main() { int i1,total0; while(i<100)//不能在 while 后面加分号 { totali; i;//循环…

个人付费专栏上线预热

个人付费专栏上线预热 专栏地址&#xff1a;请点击访问 文章目录一、订阅这个专栏有什么好处&#xff1f;二、实战项目预告1. 活动类站点 &#xff08;已完成前端后端&#xff09;2. 电商项目 &#xff08;筹备中&#xff0c;一比一还原设计图&#xff09;3. 论坛问答系统 &…

每日三题-爬楼梯、买卖股票的最佳时机、正则表达式匹配

&#x1f468;‍&#x1f4bb;个人主页&#xff1a; 才疏学浅的木子 &#x1f647;‍♂️ 本人也在学习阶段如若发现问题&#xff0c;请告知非常感谢 &#x1f647;‍♂️ &#x1f4d2; 本文来自专栏&#xff1a; 算法 &#x1f308; 算法类型&#xff1a;Hot100题 &#x1f3…

IP 摄像机移动应用 SDK 开发入门教程(安卓版)

涂鸦智能安卓版摄像机&#xff08;IP Camera&#xff0c;简称 IPC&#xff09;SDK 是基于智能生活 App SDK 开发而成。 通过移动应用控制物理网设备是常见的使用场景&#xff0c;但由于设备的品类丰富&#xff0c;增大了应用开发难度。因此 智能生活 App SDK 提供了常见的垂直…

支付宝支付内网穿透

支付宝支付&内网穿透一 沙箱环境二 python第三方模块python-alipay-sdk三 python-alipay-sdk二次封装四 支付接口五 内网穿透5.1 cpolar软件5.2 测试支付宝post回调一 沙箱环境 注册认证沙箱环境&#xff1a;https://openhome.alipay.com/platform/appDaily.htm?tabinfo …

【FileZila】实现windows与Linux系统文件互传

1、下载安装FileZila客户端 根据自己的PC系统版本&#xff0c;下载对应的FileZila客户端https://www.filezilla.cn/download/client 2、Linux服务端&#xff0c;安装配置vsftpd 2.1 安装ftp服务 sudo apt-get install vsftpd2.2 配置ftp服务 &#xff08;1&#xff09;打开ft…

Verilog 实现CDC中单bit 跨时钟域,从慢时钟域到快时钟域

单bit 跨时钟域&#xff0c;从慢时钟域到快时钟域1&#xff0c;首先&#xff0c;了解一些问题2&#xff0c;RTL代码设计3&#xff0c;testbench测试代码4&#xff0c;RTL代码和testbench综合的电路原理图5&#xff0c;前仿真&#xff0c;验证![在这里插入图片描述](https://img…

关于某些地区延期举办2022年11月27日 PMI认证考试等有关事项的通知

22年.11月22日通知&#xff1a; 关于成都等六个地区延期举办2022年11月27日 PMI认证考试等有关事项的通知 尊敬的考生&#xff1a; 受近日疫情影响&#xff0c;结合当地疫情防控规定和活动举办要求&#xff0c;成都、武汉、西安、昆明、银川、长春地区现不满足组织2022年11月…