版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、线性表的定义:线性表L是由n个数据元素a1,a2, an组成的有限序列。L=( a1,a2, ai , ai+1, , an) 其中n=0为表的长度 n=0时是空表,记为L=( ),特点: 唯一的起点:没有前驱,有一个唯一的后继 唯一的终点:有一个唯一的前驱而没有后继 内部结点:有唯一的前驱,唯一的后继 结点个数:线性表的长度 ,在同一表中,元素类型相同 例如: 字母表(A,B,C,D,Z); 数字表(1,2,3, ,10); 成绩表,2 线性表的存储结构 顺序存储结构顺序表 链式存储结构链表,顺序存储结构的特点: 1 存储空间是连续的 2 各数据元素在存储空间中按逻辑顺序依次存放,内存空间,
2、a1,a2,ai,an,存储地址,Loc(a1),Loc(a1)+k,Loc(ai)+(i-1)k,Loc(an)+(n-1)k,插入运算 在表中插入元素的条件是:顺序表不满 插入操作的步骤为,元素后移如何实现?,void insl(int m, int *n_point, int cp, int i, int b) int j; if(*n_point=m) if(i*n_point) for(j=*n_point;j=i;j-) ,coutoverflowendl; return;,i=*n_point+1;,cpj=cpj-1;,cpi-1=b;,*n_point=*n_point+1;
3、,插入位置,插入值,表,表容量,表长计数,void insl(int m, int *n_point, int cp, int i, int b) int j; if(*n_point=m) cout*n_point) i=*n_point+1; for(j=*n_point;j=i;j-) cpj=cpj-1; cpi-1=b; *n_point=*n_point+1; ,插入位置,插入值,表,表容量,表长计数,删除运算 条件是:存在指定序号元素,void desl(int *n_point,int *cp,int i) int j; if(*n_point=0)/空表 if(i*n_poi
4、nt)/输入的序号不对 coutnot this element in the listendl; return; for(j=i;j*n_point;j+) /i以后的各元素都向前移动一个位置 /线性表的长度-1 ,coutunderflowendl; return;,cpj-1=cpj;,*n_point=*n_point-1;,删除位置,表,表长计数,void desl(int *n_point,int *cp,int i) int j; if(*n_point=0)/空表 cout*n_point)/输入的序号不对 coutnot this element in the listend
5、l; return; for(j=i;j*n_point;j+) cpj-1=cpj;/i以后的各元素都向前移动一个位置 *n_point=*n_point-1;/线性表的长度-1 ,template T max(T x,T y) return (xy)? x:y; ,如果使用模板,数据类型本身就是一个参数:,类型作参数,关键字template 表示正在声明一个模板,数据类型参数T由模板参数给出。,该模板的含义为,无论模板参数T实例为int、float或任意其他类型,包括类类型时,函数max就为实例化了的类型的参数求最大值。,void main() int x=9,y=8,t1; t1=max
6、(x,y); double x1=7., y1=12.,t2; t2=max(x1,y1); ,插入算法执行时间: 元素总个数为n,各个位置插入的概率相等为p1/n,平均移动元素次数为:,总时间开销估计为:O(n),删除算法时间代价与插入操作相似,O(n),顺序表存取元素方便,时间代价为O(1) 插入、删除操作则付出时间代价O(n),结论:当n较大时,大量移动元素,耗时,解决办法:不移动元素的存储方法,2.2.2栈的定义 栈是只能在表尾进行插入和删除元素的线性表,a1,an-1,an,入栈 push,出栈 pop,栈底bottom,栈顶top,特性:后进先出 last in frist out
7、,栈的运算,栈的初始化建立一个空栈 入栈运算将元素放到栈顶 退栈运算删除当前栈顶元素 读栈顶元素,/入栈运算 void push( int *cp, int m, int *p_top, int x) if(*p_top=m) ,coutstack overflowendl;,*p_top=*p_top+1;,cp*p_top-1=x;,栈顶指针,栈,插入元素,插入位置,/退栈运算 void pop( int *cp, int m, int *p_top, int ,y=cp*p_top-1;,*p_top=*p_top-1;,栈顶指针,栈,删除元素的值,删除位置,void readtop(
8、int *cp, int m, int *p_top, int y=NULL; return;,y=cp*p_top-1;,/读栈顶元素,队列的定义:一端插入,另一端删除元素的线性表,A,B,D,E,入队,出队,队尾 rear,队头 front,特点:先进先出,frist in frist out,C,插入一个元素,B,D,E,入队,出队,队尾 rear,队头 front,C,F,删除一个元素后的线性表,B,D,E,入队,出队,队尾 rear,队头 front,C,最先插入的元素将最先被删除,A,B,D,E,C,A,队头 front,循环队列将队首和队尾连接起来形成一个环形表,rear,m,f
9、ront,1,2,m,1,2,m-1,入队运算:循环队列的尾部加入一个新元素。,1 判断循环队列是否已满。当循环队列非空(s=1),且队尾指针等于队头指针时,循环队列已满,不能进行入队运算上溢(队尾指针赶上了队头指针),标志s=0,表示队列空; s=1,表示队列非空;,2 队尾指针rear加一。当队尾指针rear=m+1时,则置rear=1,3新元素加入队尾指针所指位置。置队空标志s=1,m,1,2,m-1,front,rear,i,void addcp( char *cp, int mm, int *rear, int *front, int /标志队列非空 ,队列,队尾指针,队头指针,入队元素,队列容量,退队运算:每进行一次退队运算,队头指针front进一。当队头指针front=m+1时,则置front=1,退队运算: 1 判断队列是否为空(s=0),空队列不能进行退队运算 2 将队头指针front 进一(front= front+1)。当队头指针front=m+1时,则置front=1 3将队头指针front 所指的元
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 全国安全宣传试题和答案
- 安全员A证证模拟考试题库及安全员附答案
- 执业药师《中药学专业一》练习试题答案
- 创业指导师考试及答案
- 咨询评估考试题及答案
- 育婴师笔试题及答案初级
- 护理员考试的试题及答案
- 农艺试题及答案
- 教师法律法规考试题及答案
- 情感性精神障碍练习试卷2(题后含答案及解析)
- 叉车初级资格证考试试题与答案
- 2025年中国医学科学院研究所招聘面试高频问题答案与解析
- 2025至2030中国新癸酸缩水甘油酯行业发展研究与产业战略规划分析评估报告
- 剪映完整课件
- DB32∕T 310026-2024 雷电防护装置检测部位及检测点确认技术规范
- 2025新能源集控中心规范化管理导则
- 2025届新疆乌鲁木齐市高三下学期三模英语试题(解析版)
- 混动能量管理与电池热管理的协同优化-洞察阐释
- T-CPI 11029-2024 核桃壳滤料标准规范
- 统编版语文三年级下册整本书阅读《中国古代寓言》推进课公开课一等奖创新教学设计
- 2025年江苏省苏州市初三上学期物理期末阳光调研测试卷及答案
评论
0/150
提交评论