数据结构——使用C语言版(朱战立)线性表.pptVIP

数据结构——使用C语言版(朱战立)线性表.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
void main(void) { SeqList myList; int i , x; ? ListInitiate(myList); for(i = 0; i 10; i++) ListInsert(myList, i, i+1); ListDelete(myList, 4, x); for(i = 0; i ListLength(myList); i++) ListGet(myList, i, x); } 程序运行结果: 1 2 3 4 6 7 8 9 10 2.3 线性表的链式表示和实现 1.单链表的结构 (1)单链表中构成链表的结点只有一个指向直接后继结点的指针域。其结构特点:逻辑上相邻的数据元素在物理上不一定相邻。 单链表结点的结构体定义如下: typedef struct Node { DataType data; struct Node *next; }SLNode 结点结构如下图示: 指针域 数据域 next data 或 数据域:存储元素数值数据 指针域:存储直接后继的存储位置 (2)头指针、头结点和首元结点的区别 头指针 头结点 首元结点 a0 head a1 … an ^ 示意图如下: 头指针是指向链表中第一个结点(或为头结点、或为首元结点)的指针; 头结点是在链表的首元结点之前附设的一个结点;数据域内只放空表标志和表长等信息,它不计入表长度。 首元结点是指链表中存储线性表第一个数据元素a0的结点。 (3)带头结点单链表和不带头结点单链表的比较 p a0 a1 an-1 ∧ … head data next x ∧ s (a) 插入前 p a0 a1 an-1 ∧ … head data next x ∧ s (b) 插入后 1) 在带头结点单链表第一个数据元素前插入结点 2) 删除带头结点单链表第一个数据元素结点 p a0 a1 an-1 ∧ … head data next 3) 在不带头结点单链表第一个数据元素前插入结点 a0 a1 an-1 ∧ … head x ∧ s (a) 插入前 a0 a1 an-1 ∧ … head x s (b) 插入后 4)在不带头结点单链表其他数据元素前插入结点 p ai-1 a0 ai an-1 ∧ … head data next x s … × 5)删除不带头结点单链表第一个数据元素结点 a0 a1 an-1 ∧ … head data next × 6)删除不带头结点单链表其他数据元素结点 p ai-1 a0 ai an-1 ∧ … head data next … × ai+1 结论: (1)带头结点单链表无论在第一个数据元素结点前插入,还是在其他结点前插入,操作方法一样;而不带头结点单链表在第一个数据元素结点前插入,和在其他结点前插入,操作方法不一样 (2)删除操作和插入操作类似 (3)设计带头结点单链表的算法时,头指针参数可设计成输入型参数;设计不带头结点单链表的算法时,头指针参数必须设计成输出型参数 (4)因此,带头结点单链表的算法设计简单 结点定义: typedef struct Node { DataType data; struct Node *next; } SLNode 2.单链表的操作实现 (1)初始化ListInitiate(head) void ListInitiate(SLNode **head) { *head = (SLNode *)malloc(sizeof(SLNode)); (*head)-next = NULL; } (2)求当前数据元素个数ListLength(head) int ListLength(SLNode *head) { SLNode *p = head; int size = 0; while(p-next != NULL) { p = p-next; size ++; } return size; } (3)插入ListInsert(head, i, x) int ListInsert(SLNode *head, int i, DataType x) { SLNode *p, *q; int j; ? p = head; j = -1;

文档评论(0)

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

教师资格证持证人

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

领域认证该用户于2023年10月08日上传了教师资格证

1亿VIP精品文档

相关文档