阶段性总结--自己实现的第一个数据结构【顺序栈】。

阶段性总结–自己实现的第一个数据结构。

(还有一个半小时不到就要提交作业,本来应该赶紧去交作业的,但是感觉好像写手上的这总结更重要,所以还是先来写总结了。)

问题描述:明明照着书上一摸一样写了一个实现顺序栈的各种基本运算的算法,但是在我的电脑上却总是报错。

一共两个问题,一问题是总是显示非常量引用的初始值必须为左值,找了室友讨论也没出个好结果,但是他找到了一个曲线救国的办法解决了这个问题。后来还是去问了老师,仔细寻找下才发现是在定义进栈的push函数的时候对参数x用了引用符&,但其实这里是不用这个引用符的,用了反而会出错。

bool push(SqStack*& S, ElemType x) {//进栈,刚开始后面的参数加了&符,所以会一直显示【非常量引用的初始值必须为左值】的错误。
    if (S->top == MaxSize - 1)
        return false;//栈满,报错
    S->top++;
    S->data[S->top] = x;//这两行也等同于S.data[++S.top]=x;
    return true;//进栈成功
}

关键的总结点在第二个:

题目:实现顺序栈的各种基本运算的算法
按照书上的写法,我一共写两个文件,一个是sqstack.cpp的文件,另一个是exp3-1.cpp的文件。在第一个文件里写顺序栈的各种基本实现的算法,比如定义栈这个结构体,初始化栈,销毁栈,进栈,出栈,获取栈顶元素,判断栈是否为空,释放栈,一共8个定义,但实际关注的时候只关注后面7个算法,第一个定义结构体栈一般不关注,因为太过基础,不是真正的重点。

但是按照书上的算法,我运行的时候却一直通过不了。可是我检查了几遍,我明明写的和实验书上的一摸一样。但就是通过不了,显示的报错是
在这里插入图片描述

后来问了老师才知道,不能这样写的。.cpp里一般引用的是头文件,而不是再引用.cpp文件(.cpp文件里写的一般是对算法的实现,我们直接在含有主函数的.cpp文件里引用另一个文件的话,会在含有主函数的文件里显示这些算法都被重定义了),我们最好需要引用的是一些函数实现的声明,而不是定义的这些函数的本身。
解决办法一:另外再创建一个stack.h的头文件,把在sqstack.cpp里定义的栈的实现的算法函数声明在.h头文件里。如下:
在这里插入图片描述
声明了之后,在主函数的.cpp文件里应用这.h头文件就可以完美实现了。如下:在这里插入图片描述
解决方法二:
直接把那些算法实现全部都写在和主函数一个文件里,主函数写在最后面,这样应用这些函数的时候就不需要再对这些函数声明了。所有的算法都写在一个文件里。这样做不好的地方就在于所有的代码都挤在一个文件里,一是美观,显得很复杂,这就像你买了一辆电动车,没有车外壳,所有的器件像发动机,电线,电池全部暴露在外面一样。很不好看。

而且你写的那些实现特定功能的代码(算法)在别的地方也可能是用得到的,你全部写在含有主函数的文件里。那下次你想用的的时候,你的这些算法就不能被其他地方调用了。只能再重新写一遍,这样就很浪费时间和精力。所以最好的方法还是第一种。

考虑一共建3个文件,
把算法实现写在一个.c/.cpp文件里,然后再创建一个.h头文件,把这些函数全部声明在这个头文件里,完了在主函数的文件里#include调用这个头文件就可以了。

结尾附赠一个快捷键,在Vs里按ctrl+f,就可以调出搜索框,这个搜索框可以用来搜索你写的所有的名字。当写的代码很多,找不到某个函数或变量的时候,可以在这个框里搜索,就能定位到你写的这个名字或函数的地方。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值