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

C 语言动态顺序表

test.h

#ifndef _TEST_H
#define _TEST_H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>typedef int data_type;// 定义顺序表结构体
typedef struct List{data_type *data; // 顺序表数据int size; // 顺序表当前长度int count; // 顺序表容量
}list;typedef enum{OK,LIST_EMPTY,LIST_FULL,INDEX_ERROR,}RETURNVALUE;list *create_list(void);int list_insert(list *plist, int index, data_type data);int list_show(list *plist);#endif

main.c

#include "../include/test.h"int main()
{int retval = 0;list *plist = create_list();retval = list_insert(plist, 0, 1);retval = list_insert(plist, 1, 2);retval = list_insert(plist, 2, 3);retval = list_insert(plist, 1, 4);retval = list_show(plist);return 0;
}

crud.c

#include "../include/test.h"// 创建动态顺序表
list *create_list(void)
{int list_size = 0; // 初始化顺序表大小list *plist = (list *)malloc(sizeof(list)); // 申请内存空间if(plist == NULL){perror("plist malloc error!");return NULL;}memset(plist, 0, sizeof(list)); // 清零// 手动输入顺序表大小printf("请输入顺序表大小:");scanf("%d", &list_size);// 申请内存空间plist->data = (data_type *)malloc(sizeof(data_type) * list_size);// 初始化顺序表的大小plist->size = list_size;return plist; // 返回顺序表指针
}int list_insert(list *plist, int index, data_type data)
{// 入参检测if(plist == NULL){return LIST_EMPTY;}// 检测顺序表是否已满if(plist->count == plist->size){return LIST_FULL;}// 检测插入位置是否合法if(index < -1 || index > plist->count){return INDEX_ERROR;}// 插入操作:尾插if(index == -1){plist->data[plist->count] = data;plist->count++;return OK;}// 移动元素,实际上在用户按规律顺序插入元素的时候,不会调用此循环,而是直接// 执行 plist->data[index] = data; 的操作for(int i = plist->count; i > index; i--){printf("for(int i = plist->count; i > index; i--){\n");plist->data[i] = plist->data[i - 1];}// 插入元素plist->data[index] = data;// 顺序表元素个数加一plist->count++;return OK;
}int list_show(list *plist)
{if(plist == NULL || plist->count == 0){return LIST_EMPTY;}// 遍历顺序表for(int i = 0; i < plist->count; i++){printf("%d\t\n", plist->data[i]);}putchar(10);return OK;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • linux系统常用命令(个人使用)
  • 深入分析 Android ContentProvider (四)
  • 《Cross-Modal Dynamic Transfer Learning for Multimodal Emotion Recognition》
  • 【Pytorch实战教程】Pytorch中.detach()的详细介绍
  • 动态多态——java
  • lua 游戏架构 之 游戏 AI (七)ai_dead
  • 爬取贴吧的标题和链接
  • 加拿大云手机:进入加拿大市场的最佳工具
  • UE5 C++在Cesium上给定一个坐标垂直地面射线正交的地形高度
  • 监控系列(八)部署dameng_exporter并对接prometheus
  • CVE-2020-7248 OpenWRT libubox标记二进制数据序列化漏洞(更新中)
  • MySQL SQL 编程练习
  • 深度解读大语言模型中的Transformer架构
  • Jetpack Compose 通过 OkHttp 发送 HTTP 请求的示例
  • FTP传输的两种模式的技术原理和应用
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • Android开源项目规范总结
  • Android组件 - 收藏集 - 掘金
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • cookie和session
  • CSS中外联样式表代表的含义
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • JavaScript HTML DOM
  • MySQL QA
  • Selenium实战教程系列(二)---元素定位
  • Solarized Scheme
  • 高程读书笔记 第六章 面向对象程序设计
  • 力扣(LeetCode)56
  • 码农张的Bug人生 - 见面之礼
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 小程序 setData 学问多
  • 白色的风信子
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • Java总结 - String - 这篇请使劲喷我
  • ​linux启动进程的方式
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • $(this) 和 this 关键字在 jQuery 中有何不同?
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (javascript)再说document.body.scrollTop的使用问题
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (七)理解angular中的module和injector,即依赖注入
  • (十)Flink Table API 和 SQL 基本概念
  • (转)Sql Server 保留几位小数的两种做法
  • (转)菜鸟学数据库(三)——存储过程
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .net 连接达梦数据库开发环境部署
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .NET6 命令行启动及发布单个Exe文件
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】