当前位置: 首页 > news >正文

数据结构-顺序表

顺序表:数据元素之间的逻辑关系是相邻的,并且内存地址也是相邻的,使用一组内存地址连续的内存单元来依次存储线性表中的数据元素,如数组和匿名的数组(堆内存)。通常用户使用动态分配的数组来实现顺序表,也就是使用堆内存实现。随机访问指的是在同等时间内有访问任意元素的能力,对立的是顺序访问。

1. 结构体类型

typedef int DataType_t;
typedef struct {DataType_t *data;   //数据数组unsigned int size;  //数组容量int index;          //当前已使用的元素个数(索引)
} Sqlist_t;

2.创建顺序表

Sqlist_t* Sqlist_create(unsigned int size)
{Sqlist_t *manage=(Sqlist_t *)calloc(1,sizeof(Sqlist_t));if(!manage){perror("calloc manage failed");return NULL;}manage->data=(DataType_t *)calloc(size,sizeof(DataType_t));if(!manage->data){perror("calloc data failed");free(manage);return NULL;}manage->size=size;manage->index=-1;   //初始索引用 -1 表示空列表return manage;       
}

3.添加元素

  • 尾插
bool Sqlist_AddTail(Sqlist_t *list,DataType_t value)
{if(list->index+1>=list->size){   //如果顺序表满则直接退出printf("list is full\n");return false;}list->data[++list->index]=value; //插入新元素return true;
}
  • 头插
bool Sqlist_AddHead(Sqlist_t *list,DataType_t value)
{if(list->index+1>=list->size){    //如果顺序表满则直接退出printf("list is full\n");return false;}for(int i=list->index;i>=0;i--){  //将所有元素后移一位list->data[i+1]=list->data[i];}list->data[0]=value;list->index++;
}

4.删除元素

  • 指定值删除
bool Sqlist_Del(Sqlist_t *list,DataType_t value)
{if(list->index == -1){     //顺序表为空printf("list is empty\n");return false;}int index=-1;            //记录该值所在位置下标  for(int i=0;i<=list->index;i++){if(list->data[i]==value){index=i;break;}}if(index==-1){printf("value not found\n");return false;}for(int i=index;i<list->index;i++){  //左移一位覆盖删除值list->data[i]=list->data[i+1];}list->index--;return true;
}
  • 指定下标删除
bool Sqlist_DelIndex(Sqlist_t *list,unsigned int index)
{if(list->index == -1){    //顺序表为空printf("list is empty\n");return false;}for(int i=index;i<list->index;i++){  //左移一位覆盖删除值list->data[i]=list->data[i+1];}list->index--;return true;
}

5.遍历顺序表

void Sqlist_Print(Sqlist_t *list)
{if(list->index == -1){printf("list is empty\n");return;}for(int i=0;i<=list->index;i++){printf("%d ",list->data[i]);}
}
http://www.jsqmd.com/news/195298/

相关文章:

  • Flutter三方库鸿蒙适配实战:让flutter_sms在HarmonyOS上跑起来
  • YimMenu完全配置手册:从零开始打造专属GTA5游戏体验
  • 阅读了一整年,我给自己做了个网站
  • 3步开启Windows HEIC缩略图功能:彻底解决苹果照片预览难题
  • QMC音频解码终极指南:一键解锁所有加密音乐文件
  • Godot卡牌游戏框架终极指南:7步从零构建专业级卡牌游戏
  • YimMenu完全配置手册:从零掌握菜单调校与功能优化
  • Win7开机提示Windows system32 soudmax.dll
  • 《P3214 [HNOI2011] 卡农》
  • Fast-GitHub终极解决方案:彻底告别GitHub访问卡顿
  • LTSC-Add-MicrosoftStore:Windows 11 24H2 LTSC微软商店一键恢复完整解决方案
  • OpenCore Legacy Patcher实战指南:让老Mac焕发新生的四步决策法
  • Windows HEIC图片预览终极解决方案:让苹果照片在Windows中清晰可见
  • 深度学习计算机毕设之基于机器算法的美国研究生院入学录取率预测系统实现
  • ModOrganizer2终极连接指南:3步解决Nexus账户绑定失败问题
  • OpenCore图形化配置工具:从零基础到专业配置的完整指南
  • TikTok评论采集神器:零基础也能批量抓取评论数据
  • 炉石传说自动化工具5分钟快速上手指南
  • OpenCore Configurator完整指南:图形化配置黑苹果引导的终极解决方案
  • 3分钟掌握Windows与iOS设备跨设备传输:文件共享与剪贴板同步全攻略
  • OpenCore Configurator:告别命令行,轻松配置专业级黑苹果引导
  • 3分钟掌握html-docx-js:前端HTML转Word文档的终极指南
  • 深度学习毕设选题推荐:基于机器学习深度学习的垃圾分类识别系统
  • Scan2CAD终极指南:用AI实现扫描图像到CAD模型的智能转化
  • 跨设备文件传输新方案:Windows与iOS设备无缝同步实战指南
  • 4步高效升级:OpenCore Legacy Patcher让旧Mac设备焕发新生
  • Switch大气层系统完全使用手册:解锁游戏设备的无限潜能
  • PlayCover深度解析:在Apple Silicon Mac上完美运行iOS应用
  • Windows苹果设备驱动终极解决方案:告别连接困扰的智能工具
  • 智能办公革命:Pulover‘s Macro Creator零基础自动化实战指南