- 2
- 0
- 约1.15万字
- 约 60页
- 2018-08-21 发布于湖北
- 举报
c语言工程建设设计3-2_线性表
线性表 2.1 线性表抽象数据类型 2.2 线性表的顺序表示和实现 2.3 线性表的链式表示和实现 (2)头指针、头结点和首元结点的区别 2.4 循环单链表 2.5 双向链表 2.6 静态链表 2.7 设计举例 (3)插入ListInsert(head, i, x) int ListInsert(SLNode *head, int i, DataType x) { SLNode *p, *q; int j; ? p = head; j = -1; while(p-next != NULL j i - 1) { p = p-next; j++; } if(j != i - 1) { printf(“插入位置参数错!”); return 0; } q = (SLNode *)malloc(sizeof(SLNode)); q-data = x; q-next = p-next; p-next = q; return 1; } 说明:①要在带头结点的单链表第i(0 ≤ i ≤ size)个结点前插入一个存放数据元素x的结点,首先要在单链表中寻找到第i-1个结点并由指针p指示,然后动态申请一个结点存储空间并由指针q指示,并把数据元素x的值赋予新结点的数据元素域(即q-data = x),最后修改新结点的指针域指向ai结点(即q-next = p-next),并修改ai-1结点的指针域指向新结点q(即p-next = q)。 ②循环条件由两个子条件逻辑与组成,其中子条件p-next != NULL保证指针所指结点存在,子条件j i - 1保证最终让指针p指向ai-1结点。 (4)删除ListDelete(head, i, x) int ListDelete(SLNode *head, int i, DataType *x) { SLNode *p, *s; int j; ? p = head; j = -1; while(p-next != NULL p-next-next!= NULL j i - 1) { p = p-next; j++; } if(j != i - 1) { printf(“插入位置参数错!”); return 0; } ? s = p-next; *x = s-data; p-next = p-next-next; free(s);//释放空间 return 1; }? 说明:要在带头结点的单链表中删除第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所示。图中的①对应算法中的删除语句。 (5)取数据元素ListGet(head, i, x) int ListGet(SLNode *head, int i, DataType *x) { SLNode *p; int j; ? p = head; j = -1; while(p-next != NULL j i) { p = p-next; j++; } //定位 ? if(j != i) { printf(“取元素位置参数错!”); return 0; } ? *x = p-data; return 1; } (6)撤消单链表Destroy(head) void Destroy(SLNode **head) { SLNode *p, *p1; ? p = *head; while(p != NULL)//
您可能关注的文档
最近下载
- 《摄像与剪辑》课程思政教学案例(一等奖).docx VIP
- 妊娠期高血压饮食妊娠期高血压饮食.doc VIP
- 六年级数学下册 奥数知识点讲解第13课《速算与巧算综合练习1》试题附答案(人教版).doc VIP
- NCCN卵巢癌临床实践指南(2025.V3)解读PPT课件.pptx VIP
- 总经理年终工作总结报告PPT课件.pptx VIP
- 全册单词默写(专项训练)-2025-2026学年沪教牛津版英语七年级下册最新版 可打印.docx VIP
- 黑龙江 2023年统考专业课考试:心理学真题模拟汇编(共637题).doc VIP
- 血气分析仪故障处理.pptx VIP
- 2025中华护理学会团体标准——成人患者医用粘胶相关性皮肤损伤的预防及护理.pptx
- 血气分析仪故障处理流程.pptx VIP
原创力文档

文档评论(0)