数据结构 插入删除改写

github_37414436 2020-03-06 08:58:12
可以写详细点么,谢谢
...全文
40 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qybao 2020-03-06
  • 打赏
  • 举报
回复
这个只要懂最基础的语法就应该能理解了呀。 第一个,compare就是p指向的元素和e比较,如果相等就返回0,不等就返回非0。所以只要返回非0,就说明不等,所以while就会继续循环,直到i到达链表的最后(也就是i位置大于链表长度) 变成for循环来说明 for(i=1,p=L.elem;i<L.Length;i++) {//顺序表从开始节点到最后循环 if(*compare(*p, e)==0) break; //如果找到则退出循环 p++;//否则指针移到下一个元素 } 第二个,以数组方式,通过数组下标一直循环,如果当前下标的元素和e相同就直接返回下标,如果一直循环到最后都没找到,就返回0 变成for循环来说明 for(i=1;i<L.Length;i++) {//顺序表从开始节点到最后循环 if(L[i]==e) return i; //如果找到则返回下标i } return 0;//都找不到就返回0
寻开心 2020-03-06
  • 打赏
  • 举报
回复
I=1
p = L.elem;
while ( I<=L.length && !(*compare)(*p++,e)) I++;
这种写法, 当从while当中退出的时候, 还有做一个判断
if ( I > L.length )
输出没有找到
else
I就是找到的索引了
寻开心 2020-03-06
  • 打赏
  • 举报
回复
线性表里面保存的可能是任何类型允许是一个struct结构,也许是float类型,也许是字符串指针, 这些元素之间的比较不能用简单的数组写法那种 直接的== 来判断, 比如字符串指针的==,就要用strcmp来替代; float的==,要用fabs(f1-f2)<EPSOLN的方式, 结构的比较就更复杂了。

为了让查找方法通用, 所以才提供了一个单独的比较函数, 对于不同类型的线性表,用不同的比较函数来完成元素之间的比较

寻开心 2020-03-06
  • 打赏
  • 举报
回复
I=1
p = L.elem;
while ( I<=L.length && (*compare)(*p++,e)) I++;

这里e是要查找的元素
compare是函数指针, 这个函数原型应该是
int (*compare)( ElementType e1, ElementType e2) ; 用来比较两个元素是否相同的
这是为了应对复杂度结构,而用函数指针的方式来替换直接的比较
如果线性表是int类型的,也就是ElementType是int类型,那么上面的代码完全可以改为
while ( I<=L.length && !(*p++ == e) ) I++;
*p++ == e这个表达式,就是用指针指向线性表当中元素,挨个和e比较,没有找到才会继续找下一个,找到了while就退出了

数组写法没有什么好解释的吧

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧