顺序表的相关内容

news/2025/4/1 4:52:29/文章来源:https://www.cnblogs.com/lradian/p/18799613

/***************************************************************************
*function:创建一个顺序列表,实现增删该的功能
*author:JinDouLiu
*date:2025.3.24

  • Copyright (c) 2024-2025 jindouliu2024@163.com All right Reserved

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

    }SeqList_t;

1. 创建顺序表并对顺序表进行初始化

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;		//由于顺序表为空,则最后元素下标初值为-1return 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;

}

2. 向顺序表的头部加入元素

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.删除指定的元素
//循环遍历每个列表项
for(int i=0;i<=Manager->Last;i++){
//如果遇到该元素则进行删除
if(DestVal==Manager->Addr[i]){
for(int j=i;j<=Manager->Last;j++){
Manager->Addr[j]=Manager->Addr[j+1];
}
//最后一个元素的下标-1
Manager->Last--;
return true;
}

}
//如果没有该元素则返回false
return false;

}

//遍历顺序表

bool SeqList_Print(SeqList_t *Manager)
{
//1.判断顺序表是否为空
if(SeqList_IsEmpty(Manager)){
return false;
}
for(int i=0;i<=Manager->Last;i++){
printf("Manager[%d]=%d\n",i,Manager->Addr[i]);
}
return true;
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

判断 Python 代码是不是 AI写的几个简单方法

作者:Laurel W来源:Adobe作为一名数据科学和数学老师,我其实不介意我的学生使用像 ChatGPT 这样的 LLM,只要它是用来辅助他们学习,而不是取代学习过程。加州理工学院的申请文书指南启发了我为编程和机器学习课制定 AI 使用政策: 哪些是加州理工申请文书中不道德的 AI 使用…

Golang学习Ⅱ

iota,函数多返回值,init函数,import导包 常量定义方式:const a int = 10; const{ a=10 b=20 }1 const{ 2 BeiJing = iota*10 //iota为0 3 ShangHai 4 NanJing 5 } //使用const定义枚举,BeiJing为0,ShangHai为10,NanJing为20View Code

SpringBoot整合RabbitMQ--Direct和Topic模式

一.Direct模式 这几个模式使用SpringBoot的整合和前面使用源生Java整合其实是差不多的,故而步骤就不再详细赘述了,直接先导入依赖:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId&g…

CMS和G1的区别

悲观者从机会中看到困难。乐观者从困难中看到机会。 ——温斯顿丘吉尔区别一:使用的范围不一样:CMS收集器是老年代的收集器,可以配合新生代的Serial和ParNew收集器一起使用。 G1收集器收集范围是老年代和新生代。不需要结合其他收集器使用区别二:STW的时间:CMS收集器以最小的停…

nfls 游记。

省流:三场模拟赛。rk1(2) rk3 rk4Day 1 3.26: 在前面的博客里面。 下午补了 noip2024 T1 。我怎么还是不会写????? Day 2 3.27: 没有模拟赛。组合数学专题。 写了一堆数学题。 中午逃离校园去吃了饭,终于有饭吃了!!!!111 晚上打了一场比赛,后三题全拼的暴力 /q…

PHP2 攻防世界

这题进去之后看到的:介绍该网站?gs,用f12,ctrl+u看都没看出啥。 看了别的博客才知道要看index.phps。第一次知道还有index.phps这个文件好像是扫描index.php的源代码啥的。操蛋 然后就看index.phps里的代码吧:这里看代码, `<?php if("admin"===$_GET[id]) {…

垃圾回收算法哪些阶段会STW

悲观者从机会中看到困难。乐观者从困难中看到机会。 ——温斯顿丘吉尔标记-复制算法应用在CMS新生代(ParNew是CMS默认的新生代垃圾回收器)和G1垃圾回收器中。标记复制算法可以分为三个阶段:标记阶段,即从GC Roots集合开始,标记活跃对象; 转移阶段,即把活跃对象复制到新的内存…

【unity】学习制作2D横板冒险游戏-4-

敌人的基本逻辑和动画 创建文件如图所示c#文件继承父类Enemy给boar挂载代码在敌人脚本中定义基本的变量并实例化面朝方向 在游戏中我们可以看到野猪的默认方向为左边 此时的transform.localscale的值为1我们希望当野猪面向右边时facedir的值为1,以此来判断敌人的面朝方向野猪的…

判断垃圾的方法

悲观者从机会中看到困难。乐观者从困难中看到机会。 ——温斯顿丘吉尔在Java中,判断对象是否为垃圾(即不再被使用,可以被垃圾回收器回收)主要依据两种主流的垃圾回收算法来实现:引用计数法和可达性分析算法。 引用计数法(Reference Counting)原理:为每个对象分配一个引用计数…

mRNA,IncRNA,miRNA

mRNA、lncRNA 和 miRNA 的核心区别 三者均为 RNA 分子,但在结构、功能和生物学作用上有显著差异: 1. mRNA(信使RNA)功能 :将 DNA 的遗传信息转录后传递至核糖体,指导蛋白质合成(基因表达的核心步骤)。结构 :单链线性结构,长度通常为数百至数千个核苷酸(nt)。 包含编码…

Training-WWW-Robots 攻防世界

进入网站看到根据提示可知:robots.txt 是关键点 进去看到:看到关键路径:进入看到flag

python第三章课后练习题

3.19 import time date_str = time.strftime("%Y年%m月%d日",time.localtime()) print("当前日期:",date_str)3.20 import time current_time = time.localtime() format1 = time.strftime("%Y年%m月%d日",current_time) print("格式1:&q…