定长顺序表
来源:互联网 发布:易建联nba生涯数据 编辑:程序博客网 时间:2024/05/18 06:56
一个线性表是n个数据元素的有限序列,分为顺序表和链表。顺序表指用一组地址连续的存储单元依次存储线性表的数据元素,即逻辑相邻,物理也相邻;链表指用一组任意的存储单元存储线性表的数据元素,即逻辑相邻物理不相邻。
线性结构的特点是:在数据元素的非空有限集中,
- 存在唯一的一个被称做“第一个”的数据元素;
- 存在唯一的一个被称做“最后一个”的数据元素;
- 除第一个之外,集合中的每个数据元素均只有一个前驱;
- 除最后一个之外,集合中的每个数据元素均只有一个后继;
顺序表又分为定长顺序表和不定长顺序表,今天先看一下定长顺序表。
首先看一下定长顺序表的定义:
typedef SIZE 10typedef struct SeqList{int elem[SIZE];int length;}SeqList,*PSeqList;上述定义中,elem数组用来存放数据,length表示该顺序表中有效数据的个数。如下图所示:
接下来就初始化顺序表,并实现插入、删除等操作。
//SeqList.h#pragma once // 预防头文件重复引用#define SIZE 10typedef struct SeqList{int elem[SIZE];//存放数据int length;//有效数字个数}SeqList,*PSeqList;void InitSeqList(PSeqList ps);//初始化bool Insert(PSeqList ps,int pos,int val);//在pos位置插入valbool DeletePos(PSeqList ps,int pos);//删除pos位置int Search(PSeqList ps,int key);//查找关键字keybool DeleteVal(PSeqList ps,int key);//删除关键字keyvoid Clear(PSeqList ps);//清除顺序表数据bool IsEmpty(PSeqList ps);//判断是否为空int GetLength(PSeqList ps);//得到顺序表的有效长度void Destroy(PSeqList ps);//摧毁顺序表void Show(PSeqList ps);//打印顺序表
//SeqList.cpp#include "seqlist.h"#include <stdio.h>#include <assert.h>void InitSeqList(PSeqList ps){assert(ps != NULL);if(ps == NULL){return ;}ps->length = 0;}
static bool IsFull(PSeqList ps){return ps->length == SIZE;}bool Insert(PSeqList ps,int pos,int val){assert(ps != NULL);if(pos<0 || pos>ps->length || IsFull(ps)){return false;}for(int i=ps->length-1;i>=pos;i--){ps->elem[i+1] = ps->elem[i];}ps->elem[pos] = val; ps->length++;return true;}
bool DeletePos(PSeqList ps,int pos){assert(ps != NULL);if(pos < 0 || pos > ps->length){return false;}for(int i=pos;i<ps->length;i++){ps->elem[i] = ps->elem[i+1];}ps->length--;return true;}
int Search(PSeqList ps,int key){for(int i=0;i<ps->length;i++){if(key == ps->elem[i]){return i;}}return -1;}
bool DeleteVal(PSeqList ps,int key){assert(ps != NULL);for(int i=0; ps->elem[i] != key;++i){if(i == ps->length-1){return false;}}for(int i=0;i<ps->length;++i){if(ps->elem[i] == key){for(int j=i;j<ps->length;j++){ps->elem[j] = ps->elem[j+1];}ps->length--;i--;}}return true;}
void Clear(PSeqList ps){ps->length = 0;}
bool IsEmpty(PSeqList ps){return ps->length == 0;}
int GetLength(PSeqList ps){return ps->length;}void Destroy(PSeqList ps){Clear(ps);}void Show(PSeqList ps){for(int i=0;i<ps->length;i++){printf("%d ",ps->elem[i]);}printf("\n");}
阅读全文
0 0
- 顺序表(定长)
- 定长顺序表
- 数据结构:定长顺序表
- 定长顺序表--合并操作
- 定长顺序表--查找子表操作
- 数据结构线性表之定长顺序表
- 定长顺序表--FixedLenArray类实现
- 定长的顺序表及基本操作
- 线性表的顺序表示和实现(定长顺序表)
- 定长顺序串一些操作
- 串的定长顺序存储
- 串的定长顺序存储结构
- 数据结构c语言实现定长顺序串
- 串的定长顺序存储表示
- 数据结构--串--定长顺序存储表示
- 数据结构---串的定长顺序实现
- 串的定长顺序存储表示
- 串的定长顺序存储结构
- 检验样本是否服从正态分布,处理偏态分布
- Hibernate(2)
- 必须要见识
- 活动记录
- iOS delegate的优势及缺点
- 定长顺序表
- 文章标题
- 常用的c++ 模式之 单例模式
- 关于超级电容的一些研究
- 5
- 常用的排序算法的时间复杂度和空间复杂度
- python库安装方法和常用库
- Vuejs组件——slot内容分发
- 修改定制SpringBoot的启动banner图案