数据结构 第2章-2线性表的单链表存储结构.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《数据结构 第2章-2线性表的单链表存储结构.ppt》由会员分享,可在线阅读,更多相关《数据结构 第2章-2线性表的单链表存储结构.ppt(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、typedef struct Node DataType data;struct Node *next;SLNode,*LinkList;对于线性表的单链表存储结构描述:讨论:讨论:问问1 1:第一行的:第一行的Node Node 与最后一行的与最后一行的SLNodeSLNode是不是一回事?是不是一回事?答答1 1:不是。前者:不是。前者NodeNode是结构名,后者是结构名,后者SLNodeSLNode是对整个是对整个structstruct类型的一种类型的一种“缩写缩写”,是一种,是一种“新定义名新定义名”,它只,它只是对现有类型名的补充,而不是取代。是对现有类型名的补充,而不是取代。请
2、请注意:注意:typedeftypedef不可能创造不可能创造任何新的数据类型,而仅仅是任何新的数据类型,而仅仅是在原有的数据类型中命名一个在原有的数据类型中命名一个新名字,其目的是使你的程序新名字,其目的是使你的程序更易阅读和移植。更易阅读和移植。1typedef struct student char name;int age;student,*pointer;注意:注意:student和和studentstudent同名但不同意。同名是为了表述起同名但不同意。同名是为了表述起来方便。来方便。例如,若结构名为例如,若结构名为studentstudent,其新定义名缩写也最好写成其新定义名缩
3、写也最好写成studentstudent,因为描述的对象相同,方便阅读和理解。因为描述的对象相同,方便阅读和理解。问问2 2:结构体中间的那个:结构体中间的那个structstruct Node Node是何意?是何意?答答2 2:在:在“缩写缩写”SLNodeSLNode还没出现之前,只能用原始的还没出现之前,只能用原始的structstruct Node Node来来进行变量说明。此处说明了指针分量的数据进行变量说明。此处说明了指针分量的数据类型是类型是structstruct Node Node。2例例:单链表的建立和输出单链表的建立和输出例:用单链表结构来存放例:用单链表结构来存放26
4、个英文字母组成的线个英文字母组成的线性表性表(a,b,c,z),请写出请写出C语言程序语言程序。实现思路:实现思路:先开辟头指针,然后陆续为每个结点开辟存储先开辟头指针,然后陆续为每个结点开辟存储空间并及时赋值,后继结点的地址要提前送给前面的指针。空间并及时赋值,后继结点的地址要提前送给前面的指针。先挖先挖“坑坑”,后种后种“萝萝卜卜”!3#include#include#include#include typedef struct nodechar data;struct node*next;node;将全局变量及函数提前说明:将全局变量及函数提前说明:node*p,*q,*head;/一般
5、需要一般需要3 3个指针变量个指针变量int n;/数据元素的个数数据元素的个数int m=sizeof(node);/*/*结构类型定义好之后,每个结构类型定义好之后,每个nodenode类型的长类型的长度就固定了,度就固定了,m m求一次即可求一次即可*/4新手特别容易忘记!新手特别容易忘记!int i;head=(node*)malloc(m);/m=sizeof(node)前面已求出前面已求出p=head;for(i=1;idata=i+a-1;/第一个结点值为字符第一个结点值为字符ap-next=(node*)malloc(m);/为后继结点为后继结点“挖坑挖坑”!p=p-next;
6、/让指针变量让指针变量P指向后一个结点指向后一个结点p-data=i+a-1;/最后一个元素要单独处理最后一个元素要单独处理p-next=NULL;/单链表尾结点的指针域要置空!单链表尾结点的指针域要置空!void build()/字母链表的生成字母链表的生成。要一个个慢慢链入要一个个慢慢链入5p=head;while(p)/当指针不空时循环(仅限于当指针不空时循环(仅限于无头结点无头结点的情况)的情况)printf(%c,p-data);p=p-next;/让指针不断让指针不断“顺藤摸瓜顺藤摸瓜”讨论:要统计链表中数据元素的个数,该如何改写?讨论:要统计链表中数据元素的个数,该如何改写?su
7、m+;sum+;sum=0;sum=0;void display()/*字母链表的输出字母链表的输出*/6void main()void main()build();build();display();display();问:上述建立的单链表带头结点吗?问:上述建立的单链表带头结点吗?7二、单链表的操作实现二、单链表的操作实现定义单链表结点的结构体如下定义单链表结点的结构体如下:t typedef struct Node DataType data;struct Node*next;SLNode;、初始化初始化void ListInitiate(SLNode*head)*初始化*/*如果有内存
8、空间,申请头结点空间并使头指针head指向头结点*/if(*head=(SLNode*)malloc(sizeof(SLNode)=NULL)exit(1);(*head)-next=NULL;/*置链尾标记NULL*/8、求单链表中数据元素的个数、求单链表中数据元素的个数intint ListLength(SLNodeListLength(SLNode*head)*head)SLNodeSLNode*p=head;*p=head;/*p/*p指向头结点指向头结点*/intint size=0;size=0;/*size/*size初始为初始为0*/0*/while(p-next!=NULL)
9、/*while(p-next!=NULL)/*循环计数循环计数*/p=p-next;p=p-next;size+;size+;return size;return size;9在链表中插入一个元素在链表中插入一个元素X X 的示意图如下:的示意图如下:X Xqabp链表插入的核心语句:链表插入的核心语句:Step 1Step 1Step 1Step 1:q q q q-next=-next=p-nextp-next;Step 2Step 2Step 2Step 2:p-nextp-next=q=q;p-nexts-next思考:思考:思考:思考:Step1Step1Step1Step1和和和和
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 第2章-2线性表的单链表存储结构 线性 单链表 存储 结构
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内