关于《啊哈算法》模拟链表的一些思考
来源:互联网 发布:网络言情小说女作家 编辑:程序博客网 时间:2024/05/21 08:48
今天在看《啊哈算法》的模拟链表这一部分时发现书中的代码有一些错误。我的思考如下:
我的代码是用空出来的right[0]来保存第一个结点的位置,并且比较当前元素和待插入元素的大小,增加了当待插入的元素比链表中的数都大的情况的处理。程序运行结果如下:
所谓模拟链表,就是用两个数组去模拟一个链表,书中给我们的解决方案是用一个data数组存放数据,用一个right数组去存放序列中每一个元素右边的元素在data数组中的位置。想法很简单,按照书中的C代码修改出的C++代码如下:
#include <iostream> using namespace std; int main() { int data[101],right[101]; int i,n,t,len; cin>>n; for(i=1;i<=n;i++) cin>>data[i]; len=n; for(i=1;i<=n;i++) { if(i!=n) right[i]=i+1; else right[i]=0; } len++; cin>>data[len]; t=1; while(t!=0) { if(data[right[t]]>data[len]) { right[len]=right[t]; right[t]=len; break; } t=right[t]; } t=1; while(t!=0) { cout<<data[t]<<" "; t=right[t]; } cout<<endl; return 0; }
用Dev-CPP运行的结果如下:
观察运行结果,会发现,当待插入的数比最小的数小,比最大的数大都得不到正确大的运行结果。究其原因主要是因为如下代码:
t=1; while(t!=0) { if(data[right[t]]>data[len]) { right[len]=right[t]; right[t]=len; break; } t=right[t]; }
在这段代码中,直接比较了当前结点的下一个结点的值与待插入的数的大小,也就是说,无论怎么比,都是从第二个元素与待插入的值进行比较,并且,在这段大的结构执行完过后,程序直接对链表中的数进行了输出。这样做就漏考虑了待插入的数比原来链表中的数都大的情况,所以程序会出错。
对源代码进行了一点修正,程序如下:
#include<iostream>using namespace std;int main(){int n,i,b,t;cin>>n;int node[1000],right[1000];for(i=1;i<=n;i++){cin>>node[i]; } for(i=0;i<=n-1;i++) { right[i]=i+1; } right[n]=-1; cin>>b; node[n+1]=b; for(i=1;i<=n;i++) { if(node[i]>=b) { right[n+1]=right[i-1]; right[i-1]=n+1; break; } } if(node[n]<b) { right[n+1]=-1; right[n]=n+1; } t=0; while(t!=-1) { t=right[t]; if(t!=-1) cout<<node[t]<<" "; } return 0;}
我的代码是用空出来的right[0]来保存第一个结点的位置,并且比较当前元素和待插入元素的大小,增加了当待插入的元素比链表中的数都大的情况的处理。程序运行结果如下:
0 0
- 关于《啊哈算法》模拟链表的一些思考
- 啊哈!算法—模拟链表
- 【啊哈!算法】算法8:巧妙的邻接表(数组实现逆序模拟链表)
- 关于 LZW 算法的一些思考
- 关于BM算法的一些思考
- 关于二分算法的一些思考
- 关于道格拉斯算法的一些思考
- 第15周 啊哈算法 链表:用指针链表和数组模拟链表
- 啊哈磊的算法
- 关于大整数类加减法算法的一些思考
- 关于五子棋电脑AI算法的一些思考
- sunday算法和自己关于字符串匹配的一些思考
- [转]关于寻路算法的一些思考
- 关于区块链的一些思考
- 关于算法的思考
- 关于 sizeof() 的一些思考
- 关于sizeof()的一些思考
- 关于useBean的一些思考
- 从BAT看你需要的技术栈
- 欧拉计划 52
- 【考研】东北大学二叉树相关算法(1)
- 技术人员的发展之路
- Java IO学习笔记
- 关于《啊哈算法》模拟链表的一些思考
- Linux发送结构体
- C#贪吃蛇
- Java抽象类与接口的区别
- 连续第九十六天
- [leetcode]414. Third Maximum Number
- 欧拉计划 53
- 码,候选码和主码 1NF 2NF 3NF BCNF
- ffmpeg常用基本命令【转】