数据结构顺序表学习小结
一、基本概念:
数据>数据元素>数据项
数据元素是数据的基本单位
数据项是数据的最小单位
数据元素是带有结构的各项数据元素的集合
数据结构包括逻辑结构和存储结构两个层次
二、算法
一个算法必须满足以下五个重要特性:
①有穷性 ②确定性 ③可行性 ④输入 ⑤输出
一个算法的优劣应从以下几个方面来评价:
①正确性 ②可读性 ③健壮性 ④高效性
三、线性表中基本操作的实现
1.初始化
①为顺序表L动态分配一个预定义大小的数组空间,使elem指向这段空间的基地址。
②将表的当前长度设为0。
Status InitList_Sq(SqList &L){ //构造一个空的顺序表L.elem=new ElenType[MAXSIZE]; //为顺序表分配空间 if(!L.elem) exit(OVERFLOW); //存储分配失败 L.length=0; //空表长度为0 return OK;
}
扩展:操作算法中用到的预定义常量和类型
//函数结果状态代码
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
//Status 是函数的类型,其值是函数结果状态代码
typedef int Status;
typedef char Elemtype;
2.取值 (随机存取)
①判断指定的位置序号i值是否合理,若不合理则返回ERROR。
②若i值合理,则将第i个数据元素赋给参数e,通过e返回第i个元素的传值。
int GetElem(SqList L,int i,ElemType &e){if(i<1||i>L.length)return ERROR;//判断i值是否合理,若不合理,返回ERRORe=L.elem[i-1]; //第i-1的单元存储着第i个数据 return OK;
}
时间复杂度为O(1)
3.查找 (按值查找)
①在线性表L中查找与指定值e相同的数据元素的位置。
②从表的一端开始,逐个进行记录的关键字和给定值的比较。找到,返回该元素的位置序号,未找到,返回0。
int LocateElem(SqList L,ElemType e){//在线性表L中查找值为e的数据元素,返回其序号(是第几个元素)for(i=0;i<L.length;i++)if(L.elem[i]==e) return i+1;//查找成功,返回序号return 0;//查找失败,返回0
}
用while语句同样可以实现:
int LocateElem(SqList L,ElemType e){//在线性表L中查找值为e的数据元素,返回其序号(是第几个元素)i=0;while(i<L.length&&L.elem[i]!=e) i++;if(L.elem[i]==e) return i+1;//查找成功,返回序号return 0;//查找失败,返回0
}
平均查找长度:
为确定元素在顺序表中的位置,需和给定值进行比较的数据元素个数的期望值称为查找算法在查找成功时的平均查找长度。
平均时间复杂程度为O(n)
4.插入
①判断插入位置i是否合法,若不合法则返回ERROR。
②判断顺序表的存储空间是否已满,若满则返回ERROR。
③将第n个至第i个位置的元素依次向后移动一个位置,空出第i个位置(i=n+
1时无需移动)。
④将要插入的新元素放入第i个位置。
⑤表长加1。
Status Listlnsert_Sq(SqList &L,int i,ElemType e){if(i<1||i>L.length+1) return ERROR; //i值不合法if(L.length==MAXSIZE) return ERROR; //当前存储空间已满for(j=L.length-1;j>=i-1;j--)L.elem[j+1]=L.elem[j]; //插入位置及之后的元素后移L.elem[i-1]=e; //将新元素e放入第i个位置L.length++; //表长增1 retuen OK;
}
算法分析:
若插在尾结点之后,则无需移动(特别快);
若插在首结点之前,则表中元素全部后移(移动n次);
若要在各种位置插入(共n+1种可能):
顺序表的插入算法的平均时间复杂度为O(n)
5.删除
①判断删除位置i是否合法,若不合法则返回ERROR。
②将第i+1个至第n个的元素依次向前移动一个位置(i=n时无需移动)
③表长减1。
Status ListDelete_Sq(SqList &L,int i){if((i<1||i>L.length)) return ERROR; //i值不合法for(j=i;j<=L.length-1;j++)L.elem[j-1]=L.elem[j]; //被删除元素之后的元素前移 L.length--; //表长减1 retuen OK;
}
算法分析:
若删除尾结点,则无需移动。
若删除首结点,则表中n-1个元素全部前移。
若要在各种位置删除(共n种可能):
顺序表的删除算法的平均时间复杂度为O(n)
数据结构顺序表学习小结相关推荐
- 数据结构——顺序表的合并
数据结构--顺序表的合并 具体要求:写一个函数,其函数的功能是将非递增顺序表LA和LB合并到非递增顺序表LC中 数据结构-顺序表的操作之合并顺序表 一.顺序表的结构 首先要定义的是顺序表的结构体,只有 ...
- C语言链表的转置算法,c语言编程集 数据结构 顺序表 点链表 数制转换 矩阵转置.doc...
c语言编程集 数据结构 顺序表 点链表 数制转换 矩阵转置 #include "stdio.h" #include "malloc.h" /*typedef s ...
- 数据结构-顺序表(动态分配存储空间)
数据结构-顺序表(动态分配存储空间) (1)顺序表的结构定义: 结构型定义:(动态分配存储空间) /*** 动态分配存储空间*/ #define InitSize 100 //动态分配存储空间时,不限 ...
- C语言/C++常见习题问答集锦[八十三]之数据结构顺序表(operand types are error: no match for “operator==“)
C语言/C++常见习题问答集锦[八十三]之数据结构顺序表{operand types are error: no match for "operator=="} 程序之美 前言 主 ...
- 数据结构--顺序表的使用
数据结构--顺序表的使 #include<iostream> #include<cstdio> #include<cstring> using namespace ...
- Educoder头歌数据结构顺序表及其应用
头歌实践平台答案educoder 数据结构-顺序表及其应用 第1关:顺序表的实现之查找功能 /***************************************************** ...
- 数据结构顺序表的查找_数据结构1|顺序表+链表
数据结构学习笔记1 进度:静态分配顺序表+单链表 参考资料:b站 王道考研+小甲鱼 < 判断一个算法的效率时,函数中的常数和其他次要项常常可以忽略,而更应该关注最高项目.的阶数. 推导大O阶方法 ...
- 图书信息管理系统(数据结构顺序表,c语言版)
图书信息管理系统 顺序表 一.实验题目 二.工具环境 三.实验问题 问题: 四.实验代码 五.解决方法 方法: 一.实验题目 图书信息管理系统 出版社有一些图书数据,为简单起见,在此假设每种图书只包括 ...
- 【详细注释】数据结构 顺序表的增删查 C/C++实现
前言 顺序表将数据存储在计算机内存中的相邻存储单元内,故结构体内部存储直接使用数组即可. 代码实现 /*** 请注意,由于本次实现需要用到bool变量以及引用,请创建* C++文件而不是C文件*/#i ...
最新文章
- SmartSVN11 Mac版 注册码序列号
- Lightgbm with Hyperopt
- sys.dm_exec_query_stats的total_worker_time的单位是微秒还是毫秒
- VS2010项目的部署与安装
- 云平台队列服务-Qbus实践
- Jquery调用C#后台方法
- switch case 解决字符串选择的问题
- 【知识蒸馏】Distilling the Knowledge in a Neural Network
- 计算机会计学ufo报表,UFO报表管理实验报告.doc
- 2021-2027全球与中国全自动探针台市场现状及未来发展趋势
- 003 Nginx虚拟主机配置
- 微信朋友圈装x代码_微信朋友圈写入代码 微信朋友圈代码大全
- 【比赛题解】第十一届蓝桥杯青少组省赛(中级组)详细题解
- 文件批量改名-bat操作
- 手机APP如何访问局域网服务器
- Python全栈 Web(前端三剑客之JavaScript 从小白鼠到武林盟主)
- 3A简介(持续更新)
- C/C++,定时关机代码和取消定时关机(应用范畴)
- 地理信息系统名词解释大全(七)
- 阅读小课堂:【程序员职场关系商】 关系基本盘、破冰式求助、 点头之交的中立同事本质、 盟友、 和你的领导互通信号(好的上下级关系、 什么样的领导不值得跟、 职场的竞争不是战场而是秀场即开放性竞争)