数据结构第2章-2线性表的单链表存储结构.pptVIP

数据结构第2章-2线性表的单链表存储结构.ppt

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
讨论: 例: 单链表的建立和输出 例:用单链表结构来存放26个英文字母组成的线性表(a,b,c,…,z),请写出C语言程序。 二、单链表的操作实现 定义单链表结点的结构体如下: typedef struct Node { DataType data; struct Node *next; }SLNode; 1、初始化 void ListInitiate(SLNode **head) /*初始化*/ { /*如果有内存空间,申请头结点空间并使头指针head指向头结点*/ if((*head = (SLNode *)malloc(sizeof(SLNode))) == NULL) exit(1); (*head)-next = NULL;  /*置链尾标记NULL */ } 3、向单链表中插入一个元素 4、从 单链表中删除一个元素 三、单链表的操作效率分析 (1) 查找 因线性链表只能顺序存取,即在查找时要从头指针找起,查找的时间复杂度为 O(n)。 四、应用举例 例1、编程实现:建立一个单链表,首先依次输入数据元素1,2,…,10,然后删除数据元素5,最后依次显示当前表中的数据元素。 #include stdio.h #include stdlib.h #include malloc.h typedef int DataType; #include LinList.h 五、循环单链表    循环链表示意图:    循环单链表是单链表的另一种形式,其结构特点是链表中的最后一个结点的指针域不再是结束标记,而是指向整个链表的第一个结点,从而使链表形成一个环。 问:带头结点的循环单链表的插入、删除算法如何写? 例2:试用C语言编写一个算法,将一循环单链表就地逆置。 操作前:(a1, a2, … ai-1,ai, ai+1 ,…, an) * * typedef struct Node { DataType data; struct Node *next; }SLNode, *LinkList; 对于线性表的单链表存储结构描述: 问1:第一行的Node 与最后一行的SLNode是不是一回事? 答1:不是。前者Node是结构名,后者SLNode是对整个struct类型的一种“缩写”,是一种“新定义名”,它只是对现有类型名的补充,而不是取代。 请注意:typedef不可能创造任何新的数据类型,而仅仅是在原有的数据类型中命名一个新名字,其目的是使你的程序更易阅读和移植。 typedef struct student { char name; int age; }student,*pointer; 注意:student和student同名但不同意。同名是为了表述起来方便。 例如,若结构名为student,其新定义名缩写也最好写成student,因为描述的对象相同,方便阅读和理解。 问2:结构体中间的那个struct Node是何意? 答2:在“缩写” SLNode还没出现之前,只能用原始的struct Node来进行变量说明。此处说明了指针分量的数据类型是struct Node。 实现思路:先开辟头指针,然后陆续为每个结点开辟存储空间并及时赋值,后继结点的地址要提前送给前面的指针。 先挖“坑”,后种“萝卜”! #includestdio.h #includestdlib.h typedef struct node{ char data; struct node *next; }node; 将全局变量及函数提前说明: node *p,*q,*head; //一般需要3个指针变量 int n ; // 数据元素的个数 int m=sizeof(node); /*结构类型定义好之后,每个node类型的长度就固定了,m求一次即可*/ 新手特别容易忘记!! { int i; head=(node*)malloc(m); //m=sizeof(node) 前面已求出 p=head; for( i=1; i26; i++) //因尾结点要特殊处理,故i≠26 { p-data=i+‘a’-1; // 第一个结点值为字符a p-next=(node*)malloc(m); //为后继结点“挖坑”! p=p-next;} //让指针变量P指向后一个结点 p-data=i+

文档评论(0)

junjun37473 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档