【嵌入式学习历程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];}
一张顺序表的基本功能大概就是这些,下一次我们来玩一下线性表的另一张表--链表
阅读全文
0 0
- 【嵌入式学习历程7】 数据结构之线性表
- 【嵌入式学习历程8】数据结构之链表
- 【嵌入式学习历程9】数据结构之栈
- 【嵌入式学习历程10】数据结构之队列
- 【嵌入式学习历程11】数据结构之二叉树
- 数据结构严版学习之线性表
- 数据结构_学习之_ 线性表
- 数据结构学习之路--线性表1
- 数据结构之线性表学习总结
- 数据结构学习笔记之线性表
- 数据结构学习笔记之线性表
- 数据结构学习笔记之线性表
- 数据结构学习---线性表
- 数据结构学习-线性表
- 【数据结构学习】线性表
- 数据结构之线性表
- 数据结构之线性表
- 数据结构之线性表
- Queueing at Bank
- android string中html标签与span设置方式
- LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- 利用C#实现杨辉三角形
- 使用Redis存储Nginx+Tomcat负载均衡集群的Session
- 【嵌入式学习历程7】 数据结构之线性表
- Dubbo 第一个栗子
- java 序列化
- 【概率论】客观概率论 私人回顾
- 交叉编译
- 【opencv学习之二十】图像基本运算
- (dfs+离散)格尼斯堡的“七桥问题”
- 1982: D.房间安排
- CSS background-origin属性