版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第2章 线 性 表 上堂课要点回顾上堂课要点回顾数据结构定义数据结构定义指互相有关联的数据元素的指互相有关联的数据元素的集合,用集合,用D_S=( D, S )数据结构内容数据结构内容数据的逻辑结构、存储结构数据的逻辑结构、存储结构和运算和运算 算法效率指标算法效率指标时间效率和空间效率时间效率和空间效率 第2章 线 性 表 数据结构课程的内容数据结构课程的内容逻辑结构唯一逻辑结构唯一存储结构不唯一存储结构不唯一运算的实现依赖运算的实现依赖于存储结构于存储结构第2章 线 性 表 第第2章章 线性表线性表 2.1 线性表的类型定义线性表的类型定义 2.2 线性表的顺序表示和实现线性表的顺序表示和
2、实现 2.3 线性表的链式表示和实现线性表的链式表示和实现 2.4 一元多项式的表示及相加一元多项式的表示及相加 第2章 线 性 表 线性结构的特点:在数据元素的非空有限集中, 存在唯一的一个被称为“第一个”的数据元素; 存在唯一的一个被称为“最后一个”的数据元素; 除第一个元素之外,集合中的每个元素均只有一个前驱; 除最后一个元素之外,集合中的每个元素均只有一个后继。 第2章 线 性 表 图图2.1 线性表的逻辑结构线性表的逻辑结构 2.1 线性表的类型定义线性表的类型定义2.1.1 线性表的逻辑结构线性表的逻辑结构 第2章 线 性 表 线性表线性表(Linear List)是由是由n(n0
3、)个类型相同的数据元素组成的个类型相同的数据元素组成的有限序列,记作(有限序列,记作(a1, a2, , ai-1, ai, ai+1, , an)。这里的数据元素ai(1in)只是一个抽象的符号,其具体含义在不同情况下可以不同,它既可以是原子类型,也可以是结构类型,但同一线性表中的数据元素必须属于同一数据对象。此外,线性表中相邻数据线性表中相邻数据元素之间存在着序偶关系元素之间存在着序偶关系,即对于非空的线性表(a1, a2, ,ai-1, ai, ai+1, , an),表中ai-1领先于ai,称称ai-1是是ai的直接前驱,而称的直接前驱,而称ai是是ai-1的直接后继。的直接后继。除了
4、第一个元素a1外,每个元素ai有且仅有一个被称为其直接前驱的结点ai-1,除了最后一个元素an外,每个元素ai有且仅有一个被称为其直接后继的结点ai+1。线性表中元素的线性表中元素的个数个数n被定义为线性表的长度,被定义为线性表的长度,n=0时称为空表。时称为空表。 第2章 线 性 表 (a1, a2, ai-1,ai, ai1 ,, an)线性表的定义:线性表的定义:是是n个数据元素的有限序列个数据元素的有限序列n=0时称为时称为数据元素数据元素线性起点线性起点ai的直接前趋的直接前趋ai的直接后继的直接后继下标,下标,是元素的是元素的序号,表示元素序号,表示元素在表中的位置在表中的位置n为
5、元素总个为元素总个数,即表长数,即表长空表空表线性终点线性终点第2章 线 性 表 例1 分析26 个英文字母组成的英文表 ( A, B, C, D, , Z)学号学号姓名姓名性别性别年龄年龄班级班级20010118102001011810205205于春梅于春梅女女 18 1820062006级电信级电信016016班班20010118102001011810260260何仕鹏何仕鹏男男 18 1820062006级电信级电信017017班班20010118102001011810284284王王 爽爽女女 18 1820062006级通信级通信011011班班2001011810200101
6、1810360360王亚武王亚武男男 18 1820062006级通信级通信012012班班: :例例2 分析学生情况登记表分析学生情况登记表数据元素都是记录数据元素都是记录; 元素间关系是线性元素间关系是线性数据元素都是字母数据元素都是字母; 元素间关系是线性元素间关系是线性同一线性表中的元素必定具有相同特性同一线性表中的元素必定具有相同特性第2章 线 性 表 线性表的特点可概括如下: 同一性:线性表由同类数据元素组成,每一个ai必须属于同一数据对象。 有穷性:线性表由有限个数据元素组成,表长度就是表中数据元素的个数。 有序性:线性表中表中相邻数据元素之间存在着序偶关系。 由此可看出,线性表
7、是一种最简单的数据结构,因为数据元素之间是由一前驱一后继的直观有序的关系确定;线性表又是一种最常见的数据结构,因为矩阵、数组、字符串、堆栈、 队列等都符合线性条件。 第2章 线 性 表 2.1.2 线性表的抽象数据类型定义线性表的抽象数据类型定义 ADT List 数据元素数据元素: D=ai| aiElemSet, i=1, 2, ,n, n0 , ElemSet为某一数据对象 关系:关系: | ai, ai+1D,i=1, 2, , n-1 基本操作:基本操作: (1) InitList(&L) 初始条件: L为未初始化线性表。 操作结果: 将L初始化为空表。 第2章 线 性 表
8、(2) DestroyList(&L)初始条件: 线性表L已存在。 操作结果: 将L销毁。 (3) ClearList(&L)初始条件: 线性表L已存在 。 操作结果: 将表L置为空表。 (4) ListEmpty(L)初始条件: 线性表L已存在。 操作结果: 如果L为空表则返回真, 否则返回假。 第2章 线 性 表 (5) ListLength(L) 初始条件: 线性表L已存在。 操作结果: 如果L为空表则返回0, 否则返回表中的元素个数。 (6) LocateElem(L, e,compare() 初始条件: 表L已存在, compare()是数据元素判定函数。 操作结果:
9、 返回L中第1个与e满足关系compare() 的数据元素的位序,如果不存在,返回值为0。 (7) GetElem(L, i,&e) 初始条件: 表L存在, 且1iListLength(L)。 操作结果: 用e返回线性表L中第i个元素的值。 第2章 线 性 表 (8) ListInsert (&L, i, e) 初始条件:表L已存在,1iListLength(L)+1。 操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1。 (9) ListDelete (&L, i, &e) 初始条件: 表L已存在且非空, 1iListLength(L)。 操作结果
10、: 删除L的第i个数据元素, 并用e返回其值, L的长度减1。 ADT List 第2章 线 性 表 例2-1void union (List &La, List Lb) La_len= ListLength (La); Lb_len= ListLength (Lb); for (i=1;i= Lb_len;i+) GetElem (Lb,i,e); if(!LocateElem(La,e,equal) ListInsert(La,+ La_len,e); O(Listlength(LA)* * Listlength(LB)第2章 线 性 表 例2-2void MergeList(Li
11、st La,List Lb,List &Lc)InitList(Lc);i=j=1;k=0;La_len=ListLength(La);Lb_len=ListLength (Lb);while(i=La_Len)&(j=Lb_len) GetElem(La,i,ai);GetElem(Lb,j,bj); if(ai= bj)ListInsert(Lc,+k, ai);+i; else ListInsert(Lc,+k, bj);+jwhile (i=La_len) GetElem(La, i+, ai);ListInsert(Lc, +k, ai);while (j=Lb_le
12、n) GetElem(Lb, i+, bj);ListInsert(Lc, +k, bj); 第2章 线 性 表 2.2 线性表的顺序表示和实现线性表的顺序表示和实现 2.2.1 线性表的顺序存储结构线性表的顺序存储结构 用一组地址连续的存储单元依次用一组地址连续的存储单元依次存储线性表的元素,可通过数组来实现。存储线性表的元素,可通过数组来实现。把逻辑上相邻的数据元素存储在物把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构。理上相邻的存储单元中的存储结构。顺序存储定义:顺序存储定义:顺序存储方法:顺序存储方法:简言之,逻辑上相邻,物理上也相邻简言之,逻辑上相邻,物理上也相邻第2章
13、 线 性 表 线性表顺序存储特点:线性表顺序存储特点:1. 逻辑上相邻的数据元素,其物理上也相邻;逻辑上相邻的数据元素,其物理上也相邻;2. 若已知表中首元素在存储器中的位置,则其他元素存放位置若已知表中首元素在存储器中的位置,则其他元素存放位置亦可求出(亦可求出(利用数组下标利用数组下标)。计算方法)。计算方法是:是: 设设首元素首元素a1的存放地址为的存放地址为LOC(a1)(称称为为首地址首地址),设),设每个元每个元素占用存储空间(地址长度)为素占用存储空间(地址长度)为L字节字节,则则表中任一数据元素的表中任一数据元素的存放地址存放地址为为: LOC(ai) = LOC(a1) +
14、L *(i-1) 它是一种它是一种随机存取随机存取的数据结构。的数据结构。 第2章 线 性 表 线性表的顺序存储结构示意图a a1 1a a2 2a ai ia ai+1i+1a an n 地址地址 内容内容 元素在表中的位序元素在表中的位序1 1i i2 2n n空闲区空闲区i+1i+1Lb=LOC(a1)b + + L Lb +(i-1)+(i-1)L Lb +(n-1)+(n-1)L L第2章 线 性 表 一个一维数组,下标的范围是到一个一维数组,下标的范围是到,每个数组元素用相邻的,每个数组元素用相邻的个字节个字节存储。存储。存储器按字节编址,设存储数组元素存储器按字节编址,设存储数组
15、元素 的第一个字节的地址是的第一个字节的地址是9898,则,则 的第的第一个字节的地址是一个字节的地址是 113例例1因此:因此:LOC( M3 ) = 98 + 5 (3-0) =113解:解:地址计算通式为:地址计算通式为:LOC(ai) = LOC(a1) + L *(i-1)第2章 线 性 表 顺序存储结构可以借助于高级程序设计语言中的一维数组来表示,一维数组的下标与元素在线性表中的序号相对应。线性表的顺序存储结构可用C语言定义如下: #define LIST_INIT_SIZE 100#define LISTINCREMENT 10 typedef struct ElemType *
16、elem; /* 线性表占用的数组空间 */ int length; int listsize; SqList; 第2章 线 性 表 2.2.2 线性表顺序存储结构上的基本运算线性表顺序存储结构上的基本运算 1. 初始化操作初始化操作 Status IniList_Sq(SqList &L) L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType); if(!L.elem) exit(OVERFLOW); L.length=0; L.listsize=LIST_INIT_SIZE; return OK; 第2章 线 性 表 2.
17、插入操作插入操作 在这种结构中容易实现随机存取第i个数据元素,C语言中数组的下标从0开始,所以ai应在L.elem i-1中存取。 线性表的插入运算是指在表的第i (1in+1)个位置,插入一个新元素e,使长度为n的线性表 (e1,ei-1,ei,en) 变成长度为n+1的线性表(e1,, ei-1,e,ei,en)。 当i=n+1时,是指在线性表的末尾插入结点,所以无需移动结点,直接将e插入表的末尾即可。 第2章 线 性 表 实现步骤:实现步骤: 将第将第n至第至第i 位的元素向后移动一个位置;位的元素向后移动一个位置; 将要插入的元素写到第将要插入的元素写到第i个位置;个位置; 表长加表长
18、加1。注意:注意:事先应判断事先应判断: 插入位置插入位置i 是否合法是否合法?表是表是否已满否已满? 长度为长度为n的线性表变为长度为的线性表变为长度为n+1的线性表的线性表 (a1,a2,ai-1,ai,an)(a1,a2,ai-1,x,ai,an)第2章 线 性 表 例如:已知线性表 (4, 9, 15, 28, 30, 30, 42, 51, 62), 需在第4个元素之前插入一个元素“21”,则需要将第9个位置到第4个位置的元素依次后移一个位置,然后将“21”插入到第4个位置,如图2.3所示。请注意区分元素的序号和数组的下标。 图2.3 顺序表中插入元素 491528303042516
19、249152830304251624915283030425162序号移动元素插入元素21第2章 线 性 表 Status ListInsert_sq(SqList &L, int i, ElemType e) if(i=L.length+1) return ERROR; if(L.length=L.listsize) newbase=(ElemType*)realloc(L.elem, (L.listsize+LISTINCREMENT)*sizeof(ElemType); if(!newbase)exit(OVERFLOW); L.elem=newbase; L.listsize+
20、=LISTINCREMENT; q=&(L.elemi-1); for(p=&(L.elemL.length-1);p=q;-p) *(p+1)=*p; *q=e; +L.length; return OK; 第2章 线 性 表 插入元素时,时间主要耗费在移动元素上。移动个数取决于插入位置。第2章 线 性 表 3. 删除操作删除操作 线性表的删除运算是指将表的第i(1in)个元素删去,使长度为n的线性表(e1,, ei-1,ei,ei+1,en)变成长度为n-1的线性表(e1,, ei-1, ei+1,en)。 实现步骤:实现步骤: 将第将第i +1至第至第n 位的元素向前移动
21、一个位置;位的元素向前移动一个位置; 表长减表长减1。注意:注意:事先需要判断,事先需要判断,删除位置删除位置i 是否合法是否合法?第2章 线 性 表 图2.4 顺序表中删除元素 例如:线性表(4, 9, 15, 21, 28, 30, 30, 42, 51, 62)删除第5个元素,则需将第6个元素到第10个元素依次向前移动一个位置,如图2.4所示。 第2章 线 性 表 算法描述:算法描述: Status ListDelete_Sq(SqList &L,int i,ElemType &e)if( (iL.length) ) return ERROR;p=&(L.elem
22、i-1);e=*p; q=L.elem+L.length-1;for(+p; p=q; +p) *(p-1)=*p;-L.length;return OK;第2章 线 性 表 时间效率分析时间效率分析:插入算法花费的时间,主要在于循环中元素的后移插入算法花费的时间,主要在于循环中元素的后移当插入位置为当插入位置为1时,需时,需n次移动次移动;当插入位置为当插入位置为n时,不需移动元素时,不需移动元素;当插入位置为当插入位置为i时,移动次数为时,移动次数为n-i+1。2) 1(11) 1(1111ninninpEniniiis假定在表中任意位置插入元素都是等概率的,在第假定在表中任意位置插入元素
23、都是等概率的,在第i个位个位置上插入元素的概率置上插入元素的概率p(i)=1/(n+1)插入操作时间效率(平均移动次数)插入操作时间效率(平均移动次数) 第2章 线 性 表 删除操作时间效率(平均移动次数)删除操作时间效率(平均移动次数) 21)(1)(11ninninqEniniidl删除算法花费的时间,主要在于循环中元素的前移删除算法花费的时间,主要在于循环中元素的前移当删除位置为当删除位置为1时,需时,需n-1次移动次移动;当插入位置为当插入位置为n时,不需移动元素时,不需移动元素;当插入位置为当插入位置为i时,移动次数为时,移动次数为n-i。假定在表中任意位置删除元素都是等概率的,则删
24、除第假定在表中任意位置删除元素都是等概率的,则删除第i个位置上元素的概率个位置上元素的概率q(i)=1/n第2章 线 性 表 4.在顺序表中查找元素的算法:int LocatElem_Sq(SqList L,ElemType e, Status(*compare)(ElemType, ElemType)i=1;p=L.elem;while (i=L.length & !(*compare)(*p+,e) +i;if (iLB.elemj,则当前先将LB.elemj插入到表LC中; 若LA.elemiLB.elemj,则当前先将LA.elemi插入到表LC中,如此进行下去,直到其中一个表
25、被扫描完毕,然后再将未扫描完的表中剩余的所有元素放到表LC中。 第2章 线 性 表 void MergeList_Sq(SqList La, SqList Lb, SqList &Lc )pa=La.elem; pb=Lb.elem;Lc.listsize=Lc.length=La.length+Lb.length;pc=Lc.elem=(ElemType*)malloc(Lc.listsize*sizeof(ElemTpe);if (!Lc.elem) exit (OVERFLOW);pa_last=La.elem+La.length-1;pb_last=Lb.elem+Lb.len
26、gth-1;while (pa=pa_last & pb=pb_last) if (*pa=*pb) *pc+=*pa+; else *pc+=*pb+;while(pa=pa_last) *pc+=*pa+;while(pbnext=NULL),则表示单链表为一个空表,其长度为0。若不是空表,则可以通过头指针访问表中结点,找到要访问的所有结点的数据信息。对于带头结点的单链表L,p=L-next指向表中的第一个结点a1,即p-data=a1,而p-next-data=a2。其余依此类推。 第2章 线 性 表 1. 查找查找 在单链表中,由于每个结点的存储位置都放在其前一结点的next域
27、中,因而即使知道被访问结点的序号i,也不能像顺序表那样直接按序号i访问一维数组中的相应元素,实现随机存取,而只能从链表的头指针出发,顺链域next逐个结点往下搜索,直至搜索到第i个结点为止。 2.3.2 单链表上的基本运算单链表上的基本运算 第2章 线 性 表 算法描述:算法描述:设带头结点的单链表的长度为n,要查找表中第i个结点,则需要从单链表的头指针L出发,从头结点(L-next)开始顺着链域扫描,用指针p指向当前扫描到的结点, 初值指向头结点,用j做计数器,累计当前扫描过的结点数(初值为0),当j=i时,指针p所指的结点就是要找的第i个结点。 第2章 线 性 表 查找元素的算法:Stat
28、us GetElem_L(LinkList L, int i, ElemType &e) p=L-next; j=1; while (p & jnext; +j; if ( !p | ji) return ERROR; e=p-data; return ok; 第2章 线 性 表 2. 单链表插入操作单链表插入操作 算法描述算法描述:要在带头结点的单链表L中第i个位置插入一个数据元素e,需要首先在单链表中找到第i-1个结点并由指针p指示,然后申请一个新的结点并由指针s指示,其数据域的值为e,修改第修改第i-1个结点的指针使其指向个结点的指针使其指向s,而且使,而且使s结点的指针
29、结点的指针域指向原第域指向原第i个结点个结点。 插入:s-next=p-next; p-next=s; 第2章 线 性 表 在链表中插入一个元素的示意图如下:在链表中插入一个元素的示意图如下:x xsb ba apa ab bp插入步骤(即核心语句):插入步骤(即核心语句):Step 1Step 1:s-next=p-next;Step 2Step 2:p-next=s ;p-nexts-next元素元素x x结点应预先生成:结点应预先生成:S=(S=(LinkList)malloc(mLinkList)malloc(m););S-data=x;S-data=x;S-next=p-nextS-
30、next=p-next第2章 线 性 表 Status ListInsert_L(LinkList &L, int i, ElmeType e )p=L;j=0; while( p & jnext; +j;if( !p | ji-1) return ERROR;s=(LinkList)malloc(sizeof(LNode);s-data=e; s-next=p-next; p-next=s;return OK; 第2章 线 性 表 3. 删除 在链表中删除某元素的示意图如下:在链表中删除某元素的示意图如下:c ca ab bp删除步骤(即核心语句):删除步骤(即核心语句):q
31、 = p-next; /保存保存b的指针,靠它才能指向的指针,靠它才能指向cp-next=q-next; /a、c两结点相连两结点相连free(q) ; /删除删除b结点,彻底释放结点,彻底释放p-next思考:思考: 省略省略free(q)语句语句行不行?行不行?(p-next) - next第2章 线 性 表 Status ListDelete_L(LinkList &L, int i, Elemtype &e)p=L;j=0;while ( p-next & jnext; +j;if ( !(p-next) | ji-1) return ERROR ;q = p-
32、next; p-next=q-next;e = q-data; free(q);return OK; 第2章 线 性 表 4. 建立单链表建立单链表图2.10 头插法建立单链表图示 第2章 线 性 表 void CreateList_L(LinkList &L, int n)L=(Linklist) malloc(sizeof(Lnode);L-next=NULL;for(i=n; i0; -i)p=(LinkList)malloc(sizeof(Lnode);scanf(&p-data);p-next=L-next; L-next=p; 第2章 线 性 表 2) 尾插法建表
33、图2.11 尾插法建表图示 rs;r 始终指向单链表的表尾L(a) 建空表c1ss 指向新申请的结点空间sdatac1(b) 申请新结点并赋值Lc1s(c) 插入第一个结点Lc2c1rrr nexts;(d) 插入第二个结点sr第2章 线 性 表 5.合并单链表:void mergelist_L(LinkList &La,LinkList &Lb,LinkList &Lc)pa=La-next; pb=Lb-next;Lc=pc=La;while( pa & pb) if( pa-data data) pc-next=pa; pc=pa; pa=pa-next;
34、 else pc-next=pb; pc=pb; pb=pb-next;pc-next= pa ? pa : pb;free(Lb); 第2章 线 性 表 * 静态链表静态链表 静态链表同样可以借助一维数组来描述: #define MAXSIZE 1000typedef struct ElemType data;int cur;component,SlinkListMAXSIZE; 第2章 线 性 表 设S为SlinkList型变量,则S0.cur指示第一个结点在数组中的位置,设i=s0.cur,则si.data存放线性表的第一个元素,且si.cur指示第二个结点在数组中位置。一般情况,若第i
35、个分量表示链表的第k个结点,则si.cur指示第k+1个结点的位置。在静态链表中以整型游标i代替动态指针p,i=si.cur类似于p=p-next。 第2章 线 性 表 图2.12 静态链表的插入和删除操作示例 第2章 线 性 表 定位函数:int LocateElem_SL(SlinkList s, ElemType e)i=s0.cur;while( i & si.data!=e) i=si.cur;return i; 第2章 线 性 表 void IniteSpace_SL(SlinkList &space)for(i=0; iprior-next = p = p-nex
36、t-prior 第2章 线 性 表 图2.15 双向循环链表图示 La1a2a3L(a) 空的双向循环链表(b) 非空的双向循环链表第2章 线 性 表 1. 双向链表的前插操作双向链表的前插操作 图2.16 双向链表插入操作 abspc第2章 线 性 表 2. 双向链表的删除操作双向链表的删除操作 算法描述:算法描述: 图2.17 双向链表的删除操作 abcp第2章 线 性 表 链表的运算效率分析链表的运算效率分析1. 查找查找 因线性链表只能顺序存取,即在查找时要因线性链表只能顺序存取,即在查找时要从头指针找起,查找的时间复杂度为从头指针找起,查找的时间复杂度为 O(n)。时间效率分析时间效
37、率分析2. 插入和删除插入和删除 因线性链表不需要移动元素,只要修因线性链表不需要移动元素,只要修改指针,一般情况下时间复杂度为改指针,一般情况下时间复杂度为 O(1)。 但是,如果要在单链表中进行但是,如果要在单链表中进行前插前插或或删除删除操作,操作,由于要从头查找前驱结点,所耗时间复杂度为由于要从头查找前驱结点,所耗时间复杂度为 O(n)。第2章 线 性 表 顺序表和链表的比较顺序表和链表的比较 1. 基于空间的考虑基于空间的考虑 在链表中的每个结点,除了数据域外,还要额外设置指针(或光标)域,从存储密度来讲,这是不经济的。所谓存储密度(Storage Density), 是指结点数据本身所占的存储量和整个结点结构所占的存储量之比, 即 存储密度=结点数据本身所占的存储量/结点结构所占的存储总量 第2章 线 性 表 一般地,存储密度越大,存储空间的利用率就越高。显然,顺序表的存储密度为1,而链表的存储密度小于1。例如单链表的结点的数据均为整数,指针所占空间和整型量相同,则单链表的存储密度为
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 罐装氧气租赁合同范本
- 美发合作股份合同范本
- 老年雇佣保姆合同范本
- 职业梯队青训合同范本
- 联合品牌授权合同范本
- 聘请执行校长合同范本
- 腊肉原料采购合同范本
- 蓝牌拖车协议转让合同
- 装修吊装搬运合同范本
- 装修方便维修合同范本
- 内科医师的职业发展路径
- 指南针使用手册
- 地聚合物注浆材料加固路基和基层试验技术方案
- 溶氧的影响及控制
- 车辆维修服务项目实施方案
- 人力资源管理知到章节答案智慧树2023年湖南大学
- 创新创业基础(石河子大学)智慧树知到答案章节测试2023年
- 硕士学位论文开题报告模版(山东理工大学)
- 工程水库蓄水安全鉴定报告
- YS/T 704-2009填料用氢氧化铝分析方法电导率的测定
- 2021-2022学年人教版科学五年级上册第9课《显微镜下的细胞》(教案)
评论
0/150
提交评论