- 1、本文档共89页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C程序设计第九章ppt西工大教程
*;快速排序法
A[1] A[N];*;;;;*;*;*;*;*;*;例如:节点的构成
上图每个节点具有如下结构体类型:
struct tagSTU
{ long num;
float score;
structer tagSTU *next; }; //链节成员
其中:
?成员num、score用于存放一个节点的具体数据;
?成员next是指针类型,用于存放下一节点指针,
最后一个节点的next 成员存放空指针NULL;
?成员next是指向与自身同一类型的结构,这种结
构称为自引用结构。(只有指针成员可自引用)
?动态链表的节点是在运行时动态生成的。; 动态内存分配和释放
建立和维护动态数据结构需要实现动态内存
分配;如在链表中插入节点需要先申请一段存储
区域,而删除一个节点需要释放该节点原先占用
的存储区域,这可由标准函数实现。
内存分配函数原形: void *malloc(unsigned size);
功能:申请长度为size个字节的内存空间;若申请
成功,返回存储块起始指针,该指针类型为
void *;否则返回空指针(NULL)。
内存释放函数原形:void free(void *p);
功能:释放p所指向的内存块。
包含文件:malloc.h、stdlib.h中均有其原型声明。;链表的类型
单链表:每个节点只有一个指向后继节点的指针
双向链表:每个节点有两个用于指向其它节点的指针;一个指向前趋节点,一个指向后继节点
循环链表:使最后一个节点的指针指向头节点
链表构造方式
用多个结构体变量可构成——静态链表
将动态申请空间而建立的节点链接——动态链表;采用动态链表的意义
?与定长数据结构数组相比,链表能更好地利用内存,按需分配和释放存储空间。
?在链表中插入或删除一个节点,只需改变某节点“链节”成员的指向,而不需要移动其它节点,相对数组元素的插入和删除效率高。
即:链表特别适合于对大线性表频繁插入和删除元素、或数据域成员数目不定的数据结构。;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;*;问题解决思路:
利用单向链表解题,不断循环,为每一个有效数据动态开辟新节点,并保存数据,直到输入学号数据为0时结束.
核心问题:如何将新节点加入到整个链表结构中
;*;*;*;*;动态单链表的???立完整过程
1)定义与节点同类型的链表头指针变量L并赋值0,表示链表在建立之前是空的;
2) 定义与节点同类型的工作指针变量p、q。;3) 开辟第一个节点的存储区域,输入第一个节点数据;并使L、p、q指向第一个节点,
;4) 开辟下一节点的存储区域,使q指向新节点并
输入新节点数据,然后使上一节点的next成员
指向新节点;;3) 重复第4步,建立并链接多个节点直至所需长
度,将末尾节点的next成员赋值0。;采用尾插法创建单链表的算法如下:;*;*;*;*;*;*;*;*;【例】建立并输出有3名学生数据的单链表。
#include stdio.h //包含NULL定义
#define N 3
struct tagSTU //全局结构体类型定义
{ long num;
float score;
struct tagSTU *next; //自引用结构体指针
};
int main( )
{
┇
};int main( )
{ struct tagSTU *head, *p1, *p2;
int i, len;
head=NULL; //head初始化
len=sizeof(struct tagSTU); //求类型长
for(i=1;i=N;i++) //↙强制转换为结构体指针类型
{ p1=(struct tagSTU *)malloc(len); //申请
printf(Enter num, score:); //↓输入数据
scanf(%ld,%f, p1-num, p1-score);
if(i==1) head=p2=p1; //指向首节点
else { p2-next=p1; p2=p1; } //节点链接
if(i==N) p2-next=NUL
您可能关注的文档
- CSRHarmony驱动安装和产品使用说明教程.doc
- CSS33D行星运转以及浏览器渲染原理教程.docx
- 电喇叭说课.ppt
- css常用属性教程.pptx
- CSFB失败原因分类总结教程.docx
- 电化学会议报告2.ppt
- 电商经营常用法律法规培训(2016.8).pptx
- 电器 培训文稿.ppt
- 电场等效重力法.ppt
- 电大 民族理论与民族政策 排序完美版.docx
- 新高考生物二轮复习讲练测第6讲 遗传的分子基础(检测) (原卷版).docx
- 新高考生物二轮复习讲练测第12讲 生物与环境(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第3讲 酶和ATP(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第9讲 神经调节与体液调节(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第11讲 植物生命活动的调节(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第8讲 生物的变异、育种与进化(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第5讲 细胞的分裂、分化、衰老和死亡(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第5讲 细胞的分裂、分化、衰老和死亡(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第12讲 生物与环境(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第11讲 植物生命活动的调节(检测)(原卷版).docx
文档评论(0)