8.结 构解析.ppt

  1. 1、本文档共46页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8章 结构 8.1 结构类型 8.2 结构数组 8.3 结构与函数 8.4 结构指针 8.5 联合 8.6 使用typedef 8.7 简单链表 8.7.1 链表概述 链表是一种动态数据结构,它的特点是用一组任意的存储单元(可以是连续的,也可以是不连续的)存放数据元素。 链表是一种递归数据结构。 struct NODE { int data; NODE *next; } ; NODE *head,*p; 8.7.2 链表的创建和遍历 [例Ex_ListList] 链表的创建和遍历。 #include iostream using namespace std; struct PERSON { int age; // 年龄 float weight; // 体重 char name[25]; // 姓名 }; // 定义链表结构 struct NODE { PERSON data; // 数据域 NODE *next; // 指针域 }; // 创建链表,并返回链表的头指针,n用来指定创建的结点个数 NODE *Create( int n ); // 遍历并输出结点数据 void OutList( NODE *head ); int main() { NODE *head = Create( 3 ); OutList( head ); return 0; } NODE *Create( int n ) { NODE *pNew, *pCur; // 新建结点和当前结点 NODE *head = NULL; // 开始时,链表头指针为空 if (n1) return head; // 当结点数小于1时,返回空指针 pNew = new NODE; // 创建新结点 cout结点序号(总数):1(n)endl; // 输入新结点数据 cout请输入姓名、年龄和体重:; cin(pNew-data).name(pNew-data).age(pNew-data).weight; int num = 0; // 用于结点计数 while (1) { // 将结点添加到链表中 if ( NULL == head ) head = pNew; else pCur-next = pNew; pCur = pNew; // 指定当前结点 num++; // 结点计数 if (num=n) break; // 当添加的结点超过n时跳出循环 pNew = new NODE; // 再次创建新结点 cout结点序号(总数): num +1(n)endl; // 输入新结点数据 cout请输入姓名、年龄和体重:; cin(pNew-data).name(pNew-data).age(pNew-data).weight; } pCur-next = NULL; // 链表最后一个结点的处理 return head; // 返回链表头指针 } void OutList( NODE *head ) { NODE *pCur = head; while ( pCur != NULL) { cout (pCur-data).name \t (pCur-data).age \t (pCur-data).weight endl; pCur = pCur-next; } coutendl; } 程序运行结果如下: 8.7.3 链表的删除 Create(3)创建链表的过程 1. 删除链表结点 例如,当要删除姓名为name的结点时,有下列程序: // 删除姓名为name的结点,由于结点删除后,链表头指针要通过形参返回, // 因此需要为head定义二级指针 void Delete(NODE **head, char *name) { NODE *p, *a; a = p = *head; if (NULL == p ) return; // 若是空表,符合情况(3),则返回 if ( 0 == strcmp((p-data).name, name)) // 若a是第一个结点,符合情况(1) { *head = p-next; delete p; } else { // 查找姓名为name的结点a,如果while条件不满足, 要么是到链表未尾结点, // 要么是找到姓名为nam

文档评论(0)

little28 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档