- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第*页 3. 链表的运算效率分析 (1) 查找 因线性链表只能顺序存取,即在查找时要从头指针找起,查找的时间复杂度为 O(n)。 时间效率分析 (2) 插入和删除 因线性链表不需要移动元素,只要修改指针,一般情况下时间复杂度为 O(1)。 但是,如果要在单链表中进行前插或删除操作,因为要从头查找前驱结点,所耗时间复杂度将是 O(n)。 第*页 讨论1: 顺序存储和链式存储的区别和优缺点? 顺序存储时,逻辑上相邻的数据元素,其物理存放地址也相邻。顺序存储的优点是存储密度大,存储空间利用率高;缺点是插入或删除元素时不方便。 链式存储时,相邻数据元素可随意存放,但所占存储空间分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针。链式存储的优点是插入或删除元素时很方便,使用灵活。缺点是存储密度小,存储空间利用率低。 顺序表适宜于做查找这样的静态操作;链表宜于做插入、删除这样的动态操作。若线性表的长度变化不大,且其主要操作是查找,则采用顺序表;若线性表的长度变化较大,且其主要操作是插入、删除操作,则采用链表。 第*页 讨论2:什么是指针?指针的作用? 指针—即变量的内存地址。指针主要功能有二: ①提供了一种快速访问数组单元的途径; ②使C语言函数可以修改其调用的参数。 ---指针操作符(单目),返回操作数地址; *---运算符(单目),是对的补充,返回位于这个地址内的变量之值。 例: q=*m意即“q取地址m中的值”。如果数值100存储在内存地址2000中,而这一地址又存在m中,则q=(2000)=100 讨论3:与指针有关的符号和*之间有何区别? 第*页 预告第1次上机内容: 单链表的运算(含链表的建立、输出、查找、插入、删除等) 上机时间:待定 上机地点:待定 第*页 (二)链栈 (1) 链栈的构造方式——以头指针为栈顶,在头指针处插入或删除. Node *st, *p; int m=sizeof(Node); 栈顶 栈底 栈也可以用链式结构来表示,用链式结构来表示的栈就是链栈 st a 1 a 2 a n-1 a n next data 链栈中每个结点由两个域构成: data域和next域,其定义为: typedef Struct SNode{ SElemType data; Struct SNode * next; } Node; 第*页 Push (SElemType e) { p=(Node*)malloc(m); if(!p){上溢} else{ p-data=e; p-next=st; st=p;} } Status Pop( ) { if(st==NULL){下溢} else{e=st-data;p=st;st=st-next; free(p); return(e);} } 链栈 入栈函数 链栈 出栈函数 插入表头 从表头删除 (2) 操作 由此可以看出:一个链栈由其栈顶指针唯一指定 设st指向栈顶元素,当st=NULL时表示栈空 第*页 链栈不必设头结点,因为栈顶(表头)操作频繁; 链栈一般不会出现栈满情况,除非没有空间导致malloc分配失败。 链栈的入栈、出栈操作就是栈顶的插入与删除操作,修改指针即可完成。 几点说明: 第*页 链队列类型定义: typedef struct { QueuePtr front ; //队首指针 QueuePtr rear ; //队尾指针 } LinkQueue; 结点类型定义: typedef Struct QNode{ QElemType data; //元素 Struct QNode *next; //指向下一结点的指针 }Qnode , * QueuePtr ; 关于整个链队的总体描述 链队中任一结点的结构 (三)链队列 第*页 讨论: 空链队的特征? Q (队尾) (队首) front a1 a2 a3 ^ rear p front ^ rear ③ 怎样实现链队的入队和出队操作? ② 链队会满吗? front=rear 一般不会,因为删除时有free动作。除非内存不足! 入队(尾部插入):rear-next=S; rear=S; 出队(头部删除):front-next=p-next; S D ^ 链队示意图: 第*页 (1)单链表中存在的问题:在运算过程中对于空表与对第一个结点的处理必须单独考虑,从而使空表与非空表的运算不统一。 head ... a1 a2 an (四)循环链表 (
原创力文档


文档评论(0)