版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026贵州省农业科学院招聘18人笔试备考试题及答案解析
- 2026北京科技职业大学招聘34人(第一批)笔试备考题库及答案解析
- 2026年桃花镇延乔路幼儿园招聘厨房帮厨若干名笔试备考题库及答案解析
- 2026广东广州市城市规划设计有限公司社会招聘笔试备考试题及答案解析
- 2026安徽芜湖市镜湖文化旅游投资有限公司招聘4人笔试备考题库及答案解析
- 2026北京林业大学雄安校区规划建设指挥部招聘劳动合同制人员2名笔试模拟试题及答案解析
- 2026福建龙岩市长汀县涂坊中心卫生院第一轮招聘编制外卫生专业技术人员招聘2人笔试备考题库及答案解析
- 2026福建医科大学招聘编制外人员6人(一)笔试备考试题及答案解析
- 2026河北保定雄县雄安复兴小学招聘见习岗笔试备考试题及答案解析
- 高温超导陶瓷材料研究-洞察及研究
- 文献检索与论文写作 课件 12.1人工智能在文献检索中应用
- 公司职务犯罪培训课件
- 运营团队陪跑服务方案
- 2026新疆阿合奇县公益性岗位(乡村振兴专干)招聘44人笔试参考题库及答案解析
- 北京中央广播电视总台2025年招聘124人笔试历年参考题库附带答案详解
- 纪委监委办案安全课件
- 工业锅炉安全培训课件
- 儿科pbl小儿肺炎教案
- 腹部手术围手术期疼痛管理指南(2025版)
- JJG(吉) 145-2025 无创非自动电子血压计检定规程
- 2025年学校领导干部民主生活会“五个带头”对照检查发言材料
评论
0/150
提交评论