数据结构C语言 胡学钢线性表.pptx
《数据结构C语言 胡学钢线性表.pptx》由会员分享,可在线阅读,更多相关《数据结构C语言 胡学钢线性表.pptx(43页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1第二章 线性表 第二章 线性表 2.1 线性表的定义和运算 2.2 顺序表 2.3 链表 2.4 其它结构形式的链表 2.5 串 第1页/共43页22.1 线性表的定义和运算 p定义:线性表L是由n个元素a1,a2,an组成的 有限 序列。记作 L=(a1,a2,an)其中n=0为表长;n=0时为L空表,记作L=()p特性:A、只有一个第一个元素和一个最后一个元素;B、除第一个元素外其他元素有且仅有一个直接前趋(前驱);C、除最后一个元素外其他元素有且仅有一个直接后继p元素ai的含义:同一表中,元素类型相同。在不同的场合有不同的含义 例:字母表(A,B,C,D,Z);数字表(0,1,2,3,
2、4,9);每月天数(31,29,31,30,31,30,31,31,30,31,30,31);第2页/共43页32.1 线性表的定义和运算 运算:(1)初始化 initial_List(L)建立线性表的初始结构,即建空表 (2)求长度 List_length(L)即求表中的元素个数(3)按序号取元素 get_element(L,i)取出表中序号为i的元素(4)按值查找元素 List_locate(L,x)取出指定值为x的元素,若存在则返回其地址;否则返回特殊值(5)插入 List_insert(L,i,x)在表L的第i个位置上插入值为x的元素(1=i=n+1)(6)删除 List_delete
3、(L,i)删除表L中序号为i的元素1=ilistlen=0;int List_length(seqlist L)return L.listlen;void get_element(seqlist L,int i,elementtype&x)if(i L.listlen)error(“超出范围”);else x=L.datai-1;int List_locate(seqlist L,elementtype x)int i;for(i=0;ilistlen=maxlen)error(“overflow”);else if(iL-listlen+1)error(“position error”);e
4、lse for(j=L-listlen-1;j=i-1;j-)L-dataj+1=L-dataj;L-datai-1=x;L-listlen+;a1 a2 a3 ai an 0 1 2 i-1 n-1 maxlen-1x条件:顺序表不满;序号正确,在1,n+1中操作:ai an后移;填入x;listlen+算法分析第6页/共43页72.2 顺序表 删除void List_delete(seqlist*L,int i)int j;if(L-listlenL-listlen|i=0)error(“删除位置出错”);else for(j=i;jlistlen-1;j+)L-data j-1=L-da
5、ta j;L-listlen-;a1 a2 a3 ai an 0 1 2 i-1 n-1 maxlen-1算法分析第7页/共43页82.2 顺序表算法分析:插入时 在i=1,2,n+1,元素移动的次数分别为n,n-1,0。在等概率的情况下,平均移动(n+1)n/2(n+1)=n/2次删除时 在i=1,2,n,元素移动的次数分别为n-1,n-2,0。在等概率的情况下,平均移动(n-1)n/2n=(n-1)/2次结论:n较大时,大量移动元素,耗时解决:考虑不移动元素教材P17例第8页/共43页92.3 链表基本结构以链接形式连接元素次序。a1a2a3a4 L=(a1,a2,a3,a4)结点包括 元
6、素和地址。datanext第9页/共43页102.3 链表存储实现(静态链表)1、静态链表用数组C3A2B0D5F-1E4data next012345L=(A,B,C,D,E,F)head第10页/共43页112.3 链表存储实现(动态链表)2、动态链表用指针和动态变量实现(1)结点结构datanext(2)类型定义 typedef struct elementtype data;node *next;node;引用:node *head;第11页/共43页122.3 链表图例a1a2a3a4 Head*HeadHead-next首元素第12页/共43页132.3 链表基本运算 运算:(1)
7、初始化 initial_List(L)建立表的初始结构,即建空表 (2)求长度 List_length(L)即求表中的元素个数(3)按序号取元素 get_element(L,i)取出表中序号为i的元素(4)按值查找元素 List_locate(L,x)取出指定值为x的元素,若存在则返回其地址;否则返回特殊值(5)插入 List_insert(L,i,x)在表L的第i个位置上插入值为x的元素(1=i=n+1)(6)删除 List_delete(L,i)删除表L中序号为i的元素1=inext=P-next;P-next=S;注意:两个操作不能交换p如果是作为第一个结点插入,过程如下:S-next=
8、head;head=S;a1a2a3 a4 headxS第14页/共43页152.3 链表讨论(引入头结点)为保持插入操作一致,引入头结点。注意:头结点与首元素的区别。a1a2a3 xheadSPS-next=P-next;P-next=S;第15页/共43页162.3 链表讨论(删除操作)p删除(一般位置):假设被删除的前一个结点的指针P已找到:Pa1a2a3a5 heada4 P-next=P-next-next;p如果是删除第一个结点,过程如下:head=head-next;a1a2a3a5 heada4 p讨论结果:引入头结点P-next=P-next-next;a1a2a4 head
9、a3 P第16页/共43页172.3 链表运算的实现(有头结点)1、初始化单链表(建空表)Lvoid initial_List(node&*L)L=new node;/L=(node*)malloc(sizeof(node);L-next=NULL;第17页/共43页182.3 链表求表长(1)2、求单链表表长a1a2a3 LPlen=0P=L-next;len=0;P!=NULLreturn(len);P=P-next;len+;YNint List_length(node *L)P=L-next;len=0;while(P!=NULL)P=P-next;len+;return(len);第
10、18页/共43页192.3 链表求表长(2)2、求单链表表长a1a2a3 Lint List_length(node *L)P=L;len=0;while(P-next!=NULL)P=P-next;len+;return(len);Plen=0P=L;len=0;P-next!=NULLreturn(len);P=P-next;len+;YN第19页/共43页202.3 链表按序号取值3、按序号取值返回指向结点的指针,否则返回NULLa1a2a3 LPj=0node*get(node*L,int i)node*get(node*L,int i)P=L;j=0;P=L;j=0;while(P-
11、next!=NULL&j!=i)while(P-next!=NULL&j!=i)P=P-next;j+;P=P-next;j+;return(P);return(P);P=L;j=0;P-next!=NULLreturn(P);P=P-next;j+;YNj=iYNreturn(P);第20页/共43页212.3 链表按值查询 4、按值查询 返回元素结点指针,否则返回NULL;a1a2a3 LPP=L-next;P-data!=xreturn(P);P=P-next;YNP!=NULLNYreturn(P);node*locate(node*L,elementtype x)P=L-next;w
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构C语言 胡学钢线性表 数据结构 语言 胡学钢 线性
限制150内