【嵌入式学习历程7】 数据结构之线性表

来源:互联网 发布:3000左右手表推荐知乎 编辑:程序博客网 时间:2024/05/22 17:40

一、什么是线性表

1. 定义n个数据元素的有限序列,记作(a1, a2, …, an)ai 是表中数据元素,n 是表长度。

2. 特点:    除第一个元素外,其他每一个元素有一个且仅有一个 直接前驱

        除最后一个元素外其他每一个元素有一个且仅有一个 直接后继

3.线性表包含顺序表和链表。其中顺序表是连续的,而链表是不连续的。

二、顺序表的定义和特点

定义 :将线性表中的元素相继存放在一个连续的存储空间中。           
可利用一维数组描述存储结构
特点   线性表的顺序存储方式
遍历   顺序访问, 可以随机存取           

下面我们写个程序来实现顺序表的基本功能:顺序表的初始化、插入、删除、求长度、获取元素、遍历、定位以及判断顺序表是否为空。

头文件:SequenceList.h
#ifndef _SEQUENCE_H#define _SEQUENCE_H#define MAXSIZE    10#define FAILURE    100000#define SUCCESS    100001#define TRUE       100002#define FALSE      100003typedef int ElemType;struct sequence{ElemType *data;int size;int length;};typedef struct sequence SeList;
int ListInit(SeList *s);int ListInsert(SeList *s, int i, ElemType e);int ListLength(SeList s);int EmptyList(SeList s);int GetElem(SeList s, int p, ElemType *e);int ListTraverse(SeList s, void (*look)(ElemType));int LocateElem(SeList s, ElemType e, int(*compare)(ElemType,ElemType));#endif
接下来是接口函数,我们来分模块一一实现:

/* 初始化模块 */
int ListInit(SeList *s){s->data = (ElemType *)malloc(sizeof(ElemType)*MAXSIZE);if (NULL == s->data){return FAILURE;}s->size = MAXSIZE;s->length = 0;return SUCCESS;}
/* 插入模块 */
int ListInsert(SeList *s, int i, ElemType e){int k;if(i < 0 || i > MAXSIZE){return FAILURE;}if(s->length >= MAXSIZE){return FAILURE;}for(k = 0; k < s->length - i;k++){s->data[k] = s->data[k + 1];}s->data[i] = e;s->length++;return SUCCESS;}

/* 求长度 */
int ListLength(SeList s){return s.length;}
/* 判断顺序表是否为空 */
int EmptyList(SeList s){return (s.length == 0) ? TRUE : FALSE ;}
/* 获取元素 */
int GetElem(SeList s, int p, ElemType *e){if(p < 0 || p >= MAXSIZE){return FAILURE;}*e = s.data[p];return SUCCESS;}
/* 遍历 */
int ListTraverse(SeList s, void (*look)(ElemType)){int i;for (i = 0; i < s.length; i++){look(s.data[i]);}return SUCCESS;}
/* 定位 */
int LocateElem(SeList s, ElemType e, int(*compare)(ElemType,ElemType)){int i;for(i = 0; i < s.length; i++){if(compare(e, s.data[i]) == TRUE){return i;}}return FAILURE;}
/* 删除 */
int ListDelete(SeList *s, ElemType e){int k;if(e < 0 || e >= MAXSIZE){return FAILURE;}if(s->length <= 0){return FAILURE;}for(k = e; k < s->length; k++){s->data[k] = s -> data[k + 1];}s -> length--;return SUCCESS;//s->data[s->length - k ] = s->data[s->length - k + 1];}

一张顺序表的基本功能大概就是这些,下一次我们来玩一下线性表的另一张表--链表




原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 全民k歌耳机延迟怎么办 word文档打开是乱码怎么办 全民k歌不能录音怎么办 全民k歌登录不上怎么办 平果手机迅雷闪退怎么办 电脑打开央视影音死机怎么办 先锋影音二级网页打不开怎么办 手机qq音乐登录失效怎么办 酷狗账号忘记了怎么办 手机qq音乐听不了歌怎么办 第一试用网密码忘了怎么办 玩h1z1画面卡顿怎么办 uu跑腿抢不到单怎么办 比特币加密忘了怎么办 路虎发现cd卡死怎么办 苹果手机帐号被锁定怎么办 苹果手机帐号锁定了怎么办 微博帐号被锁定怎么办 微博显示帐号被锁定怎么办 uc屏蔽了一个网站怎么办 uu跑腿送货遇到不方便收货怎么办 雷神加速器忘记暂停怎么办 obs直播开摄像头吃鸡掉帧怎么办 陌陌收到的礼物怎么办 吃了油腻的东西恶心怎么办 主播工资不发怎么办 主播工资被欠怎么办 直播平台不发工资坑主播怎么办 主播公司不发工资怎么办 梦幻月卡用完了怎么办 网易星球实名认证通过不了怎么办 认证过荔枝主播怎么办 苹果手机相机不对焦怎么办 苹果手机摄像头不能对焦了怎么办 闪电邮里面邮件太多怎么办 苹果手机和助理打不开怎么办 苹果我的世界打不开怎么办 ps试用7天到期了怎么办 皮肤锁不住水份怎么办 硫酸弄到皮肤上怎么办 直播时图像反看怎么办