- 1、本文档共56页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第02章 单链表
2.3 线性表的链式存储 1 问题的引入 链表概述 2. 结点结构 数据域:数据元素本身信息 指针域:直接后继或直接前驱的存储地址 线性表的链式存储结构 2.3 线性表的链式表示和实现 (2)头指针、头结点和首元结点的区别 (1)初始化ListInitiate(head) void ListInitiate(SLNode **head){ *head = (SLNode *) malloc(sizeof(SLNode)); (*head)-next = NULL;} 补充:输出单链表 void DispList(SLnode *head){ SLnode *p=head-next; while (p!=NULL){ printf(%c ,p-data); p=p-next; } printf(\n); } 说明 要在带头结点的单链表中删除第i(0 ≤ i ≤ size - 1)个结点,首先要在单链表中寻找到第i-1个结点并由指针p指示,然后让指针s指向ai结点(即s = p-next),并把数据元素ai的值赋予x(即*x = s-data),最后把ai结点脱链(即p-next = p-next-next),并动态释放ai结点的存储空间(即free(s))。删除过程如图2-14所示。图中的①对应算法中的删除语句。 头插法 头插法创建线性表 void creathead(SLnode *head,DataType a[],int n){ SLnode *s; int i; for(i=0;in;i++){ s=(SLnode*)malloc(sizeof(SLnode)); s-data=a[i]; s-next=head-next; head-next=s;} } 尾插法 尾插法创建线性表 void creatTail(SLnode *L,DataType a[],int n){ SLnode *s,*r; int i; r=L; for(i=0;in;i++){ s=(SLnode*)malloc(sizeof(SLnode)); s-data=a[i]; r-next=s; r=s;} r-next=NULL; } void main(){ int i=5; DataType a[9]={a,b,c,d,e,f,g,h,i}; DataType e; SLnode *head; InitList(head); creatTail(head,a,i); printf(线性表:);DispList(head); Destroy(head);} 2.7 设计举例 算法思想 从链表的第一个数据元素结点开始,逐个比较每个结点的data域值和x的值,当data小于等于x时,进行下一个结点的比较;否则就找到了插入结点的合适位置,此时申请新结点把x存入,然后把新结点插入;当比较到最后一个结点仍有data小于等于x时,则把新结点插入单链表尾。 2.4 循环单链表 2.5 双向链表 2.6 静态链表 本章小结 链表的特点及分类 单链表的应用 ?void main(void) { SLNode *head; int i , x; ListInitiate(head);? for(i = 0; i 10; i++) ListInsert(head, i, i+1) ; ListDelete(head, 4, x) ; for(i = 0; i ListLength(head); i++) { ListGet(head, i, x) == 0) ; printf(“%d ”, x); } Destroy(head); } 例2-4 设计一个顺序表的删除函数,把顺序表L中的第一个数据元素x删除。 算法思想:首先,找到要删除元素的位置,然后,从这个位置到最后一个元素,逐个前移,最后,把元素个数减1。 int ListDataDelete(SeqList *L, DataType x) { int i, j; ? for(i = 0; i L-size; i++)
文档评论(0)