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

数据结构——顺序表的实现

数据结构——顺序表的实现

  • 一 关于顺序表的简单知识
  • 二 动态顺序表

一 关于顺序表的简单知识

1.顺序表的底层结构是数组,在数组的基础上增加了增,删,查,改等方法。
2.顺序表的分类:静态顺序表和动态顺序表
静态顺序表的缺陷:给小了,空间不够;给大了,造成空间浪费。
动态顺序表:可以实现动态增容(成倍数的增加,一般成二倍的形式增加)
3.顺序表是线性表的一种,在物理结构和逻辑结构上都是线性的。

二 动态顺序表

由于静态顺序表的不灵活性,所以一般使用动态顺序表,接下来,我主要给大家讲解动态顺序表。
但是,在此之前,我还是把静态顺序表给大家讲清楚。

#define N 100;//添加宏定义,可以更容易的更改底层数组大小
struct SeqList
{int arr[N];//静态顺序表底层结构是一个固定大小的数组,由此造成了它的不灵活性int size;//有效数据长度}

接下来,就是动态顺序表了。

动态顺序表的头文件

#include<stdio.h>
#include<stdlib.h>
#include<stdio.h>
#include<assert.h>
//定义顺序表
typedef int SLDateList;
typedef struct SeqList
{SLDateList* arr;//由于动态顺序表不知道数组的大小,所以使用指针。int size;int capacity;}SL;//初始化
void SLInit(SL* ps);//销毁
void SLDestory(SL* ps);//尾插
void SLPushBack(SL* ps, SLDateList x);
//头插
void SLPushFront(SL* ps, SLDateList x);
//尾删
void SLPopBack(SL* ps);
//头删
void SLPopFront(SL* ps);
//打印
void SLPrint(SL ps);
//查找
int SLFind(SL* ps, SLDateList x);
//在指定位置插入数据
void SLInit(SL* ps, SLDateList pos, SLDateList x);
//在指定位置删除数据
void SLErase(SL* ps, SLDateList pos);

动态顺序表的源文件

#include"SE.h"void SLInit(SL * ps)
{ps->arr = NULL;ps-> size = ps-> capacity = 0;}
//头插,尾插都要判断顺序表是否为空
void SLCheckCapacity(SL* ps)
{if (ps->capacity == ps->size){int newcapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;//注意是相等,不是赋值SLDateList* tmp = (SLDateList*)realloc(ps->arr, newcapacity * sizeof(SLDateList));if (tmp == NULL){perror("realloc file!");exit(1);}ps->arr = tmp;ps->capacity = newcapacity;}
}void SLPushBack(SL* ps, SLDateList x)
{assert(ps);//顺序表不能传空SLCheckCapacity(ps);ps->arr[ps->size++] = x;}void SLPushFront(SL* ps, SLDateList x)
{assert(ps);SLCheckCapacity(ps);for (int i = ps->size; i > 0; i--){ps->arr[i] = ps->arr[i-1];}ps->arr[0] = x;ps->size++;}void SLPopBack(SL* ps)
{assert(ps);assert(ps->size);--ps->size;
}void SLPopFront(SL* ps)
{assert(ps);assert(ps->size);for (int i = ps->size; i<ps->size-1; i--){ps->arr[i] = ps->arr[i + 1];}ps->size--;}void SLPrint(SL ps)
{for (int i = 0; i < ps.size; i++){printf("%d",ps.arr[i]);}printf("\n");
}int SLFind(SL* ps, SLDateList x)
{assert(ps);for (int i = 0; i < ps->size; i++){if (ps->arr[i] == x){return i;}elsereturn -1;}
}
void SLInit(SL* ps, SLDateList pos, SLDateList x)
{assert(ps);assert(pos>=0 && pos<=ps->size);SLCheckCapacity(ps);for (int i = ps->size; i > pos; i--){ps->arr[i] = ps->arr[i - 1];}ps->arr[pos] = x;ps->size++;}
void SLErase(SL* ps, SLDateList pos)
{assert(ps);assert(pos >= 0 && pos < ps->size);SLCheckCapacity(ps);for (int i = pos ; i<ps->size-1; i++){ps->arr[i - 1] = ps->arr[i];//size-2 = size-1}ps->size--;
}void SLDestory(SL* ps)
{if (ps->arr)//销毁谁,销毁的是已经申请过空间的数组{free(ps->arr);}ps->arr = NULL;ps->size = ps->capacity = 0;}

相关文章:

  • Spring-boot-logback-spring.xml文件Appender标签下的属性
  • 英码科技携手昇腾打造“三位一体”智慧化工解决方案,使能化工产业管理更高效、智能
  • C# Winform 侧边栏,切换不同页面
  • 用python实现多文件多文本替换功能
  • 【算法与设计】期末总结
  • 国际荐酒师香港协会受邀参加2024年美国独立日庆祝活动
  • 【进阶篇-Day3:JAVA接口新特性、代码块、内部类、Lambda表达式、组件等的介绍】
  • 在微信小程序中安装和使用vant框架
  • 【靶场搭建】-01- 在kali上搭建DVWA靶机
  • Spring Cloud Gateway 概述与基本配置(下)
  • 玄机平台流量特征分析-常见攻击事
  • 卡本医疗VENUS登陆香港国际医疗展,探索全球医疗发展新机遇
  • 统计学一(术语,正态)
  • 【前端面经】数组算法题解
  • 制造业为什么需要ERP企业管理软件?
  • 【mysql】环境安装、服务启动、密码设置
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • EventListener原理
  • Github访问慢解决办法
  • OSS Web直传 (文件图片)
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • SOFAMosn配置模型
  • 初探 Vue 生命周期和钩子函数
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 判断客户端类型,Android,iOS,PC
  • 区块链将重新定义世界
  • 如何选择开源的机器学习框架?
  • 深度解析利用ES6进行Promise封装总结
  • 微服务入门【系列视频课程】
  • 我的面试准备过程--容器(更新中)
  • 线上 python http server profile 实践
  • 写给高年级小学生看的《Bash 指南》
  • 优化 Vue 项目编译文件大小
  • ​你们这样子,耽误我的工作进度怎么办?
  • # Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #进阶:轻量级ORM框架Dapper的使用教程与原理详解
  • (3) cmake编译多个cpp文件
  • (el-Date-Picker)操作(不使用 ts):Element-plus 中 DatePicker 组件的使用及输出想要日期格式需求的解决过程
  • (LLM) 很笨
  • (SERIES12)DM性能优化
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (面试必看!)锁策略
  • (算法二)滑动窗口
  • (已解决)Bootstrap精美弹出框模态框modal,实现js向modal传递数据
  • (杂交版)植物大战僵尸
  • (转)程序员疫苗:代码注入
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换