首页 > 其他分享 >结构体学习

结构体学习

时间:2024-04-20 16:33:06浏览次数:26  
标签:顺序 return Addr SeqList 元素 学习 Manager 结构

/********************************************************************************************************
*
*

  • 提高可移植性
  • Copyright (c) 2023-2024 [email protected] All right Reserved
  • ******************************************************************************************************/

include <stdio.h>

include <stdbool.h>

//指的是顺序表中的元素的数据类型,用户可以根据需要进行修改
typedef int DataType_t;

//构造记录顺序表SequenceList各项参数(顺序表的首地址 + 顺序表的容量 + 顺序表中最后有效元素的下标)的结构体
typedef struct SequenceList
{
DataType_t * Addr; //记录顺序表首地址
unsigned int Size; //记录顺序表的容量
int Last; //顺序表中最后元素的下标

}SeqList_t;

//创建顺序表并对顺序表进行初始化
SeqList_t * SeqList_Create(unsigned int size)
{
//1.利用calloc为顺序表的管理结构体申请一块堆内存
SeqList_t *Manager = (SeqList_t *)calloc(1,sizeof(Manager));

if(NULL == Manager)
{
	perror("calloc memory for manager is failed");
	exit(-1); //程序异常终止
}

//2.利用calloc为所有元素申请堆内存
Manager->Addr = (DataType_t *)calloc(size,sizeof(DataType_t));

if (NULL == Manager->Addr)
{
	perror("calloc memory for element is failed");
	free(Manager);
	exit(-1); //程序异常终止
}

//3.对管理顺序表的结构体进行初始化(元素容量 + 最后元素下标)
Manager->Size = size;	//对顺序表中的容量进行初始化
Manager->Last = -1;		//由于顺序表为空,则最后元素下标初值为-1

return Manager;

}

//判断顺序表是否已满
bool SeqList_IsFull(SeqList_t *Manager)
{
return (Manager->Last + 1 == Manager->Size) ? true : false;
}

//向顺序表的尾部加入元素
bool SeqList_TailAdd(SeqList_t *Manager, DataType_t Data)
{
//1.判断顺序表是否已满
if ( SeqList_IsFull(Manager) )
{
printf("SequenceList is Full!\n");
return false;
}

//2.如果顺序表有空闲空间,则把新元素添加到顺序表尾部
Manager->Addr[++Manager->Last] = Data;

return true;

}

//向顺序表的头部加入元素
bool SeqList_HeadAdd(SeqList_t *Manager, DataType_t Data)
{
//1.判断顺序表是否已满
if ( SeqList_IsFull(Manager) )
{
printf("SequenceList is Full!\n");
return false;
}

//2.如果顺序表有空闲空间,则需要把顺序表所有元素向后移动1个单位
for (int i = Manager->Last;i >= 0;i--)
{
	Manager->Addr[i+1] = Manager->Addr[i];
}

//3把新元素添加到顺序表的头部,并且更新管理结构体中的元素下标+1
Manager->Addr[0] = Data;
Manager->Last++;

return true;

}

//判断顺序表是否已满
bool SeqList_IsEmpty(SeqList_t *Manager)
{
return (-1 == Manager->Last) ? true : false;
}

//删除顺序表的元素
bool SeqList_Del(SeqList_t *Manager,DataType_t DestVal)
{
//1.判断顺序表是否为空
if ( SeqList_IsEmpty(Manager) )
{
printf("SequenceList is Empty!\n");
return false;
}

//2.此时需要查找目标值是否在顺序表中
if (存在目标值)
{
	//刚好在尾部
	//刚好在头部
	//刚好在中间
}
else
{
	return false;
}

}

//遍历顺序表的元素
SeqList_Print(SeqList_t *Manager)

int main(int argc, char const *argv[])
{

//1.创建顺序表
SeqList_t * Manager = SeqList_Create(10);





return 0;

}

标签:顺序,return,Addr,SeqList,元素,学习,Manager,结构
From: https://www.cnblogs.com/wh217/p/18147842

相关文章

  • 拉格朗日插值学习笔记
    拉格朗日插值学习笔记应用众所周知,在平面直角坐标系中,对于任意的\(n\)个点,都一定有一个不超过\(n-1\)次的函数与之相对应。拉格朗日插值适用于求解这\(n\)个点对应的函数。思路考虑给定的\(n\)个点的坐标表示为\((x_i,y_i)\),不难构造出如下函数:\[f(x)=\sum_{i=1}^{n......
  • .NET开源免费的跨平台框架 - MAUI(附学习资料)
    前言前几天分享了一个.NETMAUI开源免费的UI工具包-Uranium,然后技术群有不少同学问.NETMAUI是不是免费的?能做什么?今天特意写这篇文章来介绍一下.NET开源、免费(基于MITLicense)的跨平台框架:MAUI。.NETMAUI官方介绍.NET多平台应用UI(.NETMAUI)是一个跨平台框架,用于使用......
  • 算法中的变形金刚——单纯形算法学习笔记
    目录阅读本文你将会知道线性规划简介线性规划的标准形一般型转标准型<与≤线性规划的松弛形标准型转松弛形单纯形算法基本可行解如何判断最优旋转操作如何通过旋转更新解?退化与布兰德规则基本不可行解单纯形算法的几何意义单纯形算法的时间复杂度分析线性规划问题有更优的做法吗......
  • MVCC学习圣经:一文穿透MySQL MVCC,吊打面试官
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......
  • opencascade官网文档学习之OCCT-Shape healing (3)分析 TopoDS_Shape
    Analysis分析Analysisofshapevalidity形状有效性分析ShapeAnalysis软件包提供了用于分析拓扑形状的工具。在执行修复工具之前,没有必要通过这些工具检查形状,因为这些工具用于在修复工具内部执行修复之前的分析。但是,如果您愿意,这些工具可以独立于修复工具用于检测某些形状问......
  • 数据结构与算法学习(1)——DFS(深度优先搜索)
    DFS基础深度优先搜索算法(英语:Depth-First-Search,缩写为DFS)是一种用于遍历或搜索树或图的算法。这个算法会尽可能深地搜索树的分支。当节点v的所在边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发......
  • Python与Java数据结构语法区别
    数组参考链接:CS61BPythonzeroedLst=[0,0,0]lst=[4,7,10]lst[0]=5print(lst[0])print(lst)print(len(lst))Javaint[]zeroedArray=newint[3];int[]array={4,7,10};array[0]=5;System.out.println(array[0]);System.out.println(Ar......
  • gRPC入门学习之旅(七)
    gRPC入门学习之旅(一)gRPC入门学习之旅(二)gRPC入门学习之旅(三)gRPC入门学习之旅(四)gRPC入门学习之旅(五)gRPC入门学习之旅(六)3.6、创建gRPC的桌面应用客户端 1.在VisualStudio2022菜单栏上选择“文件—》新建—》项目”。或者在VisualStudio2022的解决方......
  • 学习unigui【24】Echart的使用:多个坐标系
    使用echart非常简单,网上有介绍。主要放一个unihtmlFrame。然后unihtmlframe.text:='html的代码',就会渲染(初次调用echart的js库要一点稍后)。unigui本身的chart貌似不能动态生成。option={title:[{text:'TOP10(抗菌药物使用人数)',top:'1......
  • 基础 IO (Linux学习笔记)
    基础IO1.重谈文件空文件在磁盘也要占据空间文件=内容+属性文件操作=对文件内容+对属性or对文件内容加属性标定一个文件,必须使用文件路径加文件名【唯一性】如果没有指明对应得文件路径,默认是在当前路径下进行文件访问当写了一个跟文件操作有关得程序,编译后,文件......