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

数据结构(c语言版) 顺序表

代码

#include <stdio.h>
#include <stdlib.h>typedef int E;     //这里我们的元素类型就用int为例吧,先起个别名//定义结构体
struct List{E * array;int capacity;   //数组的容量int size;
};//给结构体指针起别名
typedef struct List * ArrayList;    //因为是数组实现,所以就叫ArrayList,这里直接将List的指针起别名//初始化
_Bool initList(ArrayList list){list->array = malloc(sizeof (E) * list->capacity);    //使用malloc函数申请10个int大小的内存空间,作为底层数组使用if(list->array == NULL) return 0;  //需要判断如果申请的结果为NULL的话表示内存空间申请失败list->capacity = 10;             //直接将数组的容量设定为10即可list->size=0;return 1;
}//插入数据操作
_Bool insertList(ArrayList list, E element, int index){if(index < 1 || index > list->size + 1) return 0;                                    //判断插入位置,转换成位序,也就是[1, size + 1]这个闭区间if(list->size == list->capacity) {                                                   //如果size已经到达最大的容量了,肯定是插不进了,那么此时就需要扩容了int newCapacity = list->capacity + (list->capacity >> 1);                        //我们先计算一下新的容量大小,这里我取1.5倍原长度,当然你们也可以想扩多少扩多少E * newArray = realloc(list->array, newCapacity * sizeof(E));           //这里我们使用新的函数realloc重新申请更大的内存空间if(newArray == NULL) return 0;                                                   //如果申请失败,那么就确实没办法插入了,只能返回0表示插入失败了list->array = newArray;list->capacity = newCapacity;}for (int i = list->size; i > index - 1; --i)list->array[i] = list->array[i - 1];list->array[index - 1] = element;list->size++;return 1;
}//打印数据
void printList(ArrayList list){   //编写一个函数用于打印表当前的数据for (int i = 0; i < list->size; ++i)   //表里面每个元素都拿出来打印一次printf("%d ", list->array[i]);printf("\n");
}//删除操作
_Bool deleteList(ArrayList list, int index){if(index < 1 || index > list->size) return 0;for (int i = index - 1; i < list->size - 1; ++i)list->array[i] = list->array[i + 1];   //实际上只需要依次把后面的元素覆盖到前一个即可list->size--;   //最后别忘了size - 1return 1;
}//获取size的大小
int sizeList(ArrayList list){return list->size;
}//按位置获取元素
E * getList(ArrayList list, int index){if(index < 1 || index > list->size) return NULL;return &list->array[index - 1];
}int findList(ArrayList list, E element){for (int i = 0; i < list->size; ++i) {   //一直遍历,如果找到那就返回位序if(list->array[i] == element) return i + 1;}return -1;  //如果遍历完了都没找到,那么就返回-1
}int main(){struct List list;   //创建新的结构体变量if(initList(&list)){   //对其进行初始化,如果失败就直接结束for (int i =0; i<30; i++){insertList(&list, i*10, i+1);}deleteList(&list, 10);deleteList(&list, 10);printList(&list);printf("获取数组容量:%d\n", list.capacity);      //获取数组容量printf("按位置获取元素:%d\n", *getList(&list, 3));      //按位置获取元素printf("按值查找元素位置:%d\n", findList(&list, 30));  //按值查找元素位置} else{printf("顺序表初始化失败,无法启动程序!");}
}

运行效果

在这里插入图片描述

http://www.lryc.cn/news/219690.html

相关文章:

  • Springboot 集成 RocketMq(入门)
  • Elasticsearch:ES|QL 中的数据丰富
  • 【linux编程】linux文件IO高级I/O函数介绍和代码示例
  • jQuery获取地址栏GET参数值
  • JAVA应用中线程池设置多少合适?
  • .Net Core 3.1 解决数据大小限制
  • 【音视频 | opus】opus编码的Ogg封装文件详解
  • 【微信小程序】自定义组件(一)
  • 如何通过一条数字人三维动画宣传片,打造出数字文旅
  • 【MongoDB】索引 - 数组字段的多键索引
  • 2023.11.5 关于 Spring 创建 和 使用
  • 3D目标检测实战 | 图解KITTI数据集评价指标AP R40(附Python实现)
  • 制作一个ros2机器人需要学习的课本(还不全面)
  • Qt OpenGL相机系统
  • 英语语音识别,语言评测,语音打分实践与代码实现
  • 【SpringBoot篇】SpringBoot整合Mybatis实战
  • android c++ 硬编码硬解码官方demo
  • Python之Excel数据相关
  • Ubuntu网络IP地址一直显示127.0.0.1
  • Vulnhub-DC-3 靶机复现完整过程
  • Dubbo篇---第三篇
  • Redis-使用java代码操作Redis->java连接上redis,java操作redis的常见类型数据存储,redis中的项目应用
  • react 使用笔记
  • Ubuntu下启动Apache对.htaccess 的支持步骤, 利用.htaccess绑定域名到子目录
  • C++常用格式化输出
  • QCC TX 音频输入切换+提示声音
  • 【Java】封装、继承、多态
  • 第九章 异常处理
  • (四) Python Pandas入门
  • 软件测试面试最经典的5个问题