因为博主在插入的时候并没有判断即将插入的位置是否为空(0),而是直接通过m_iHead 来插入。
因此没有必要清楚元素。(你就这样想:反正我插入的时候用不到你,还清楚干嘛
试一下用绝对路径
1.用“StructName”替换Customer,结构体如下:
struct StructName
{
float a;
float b;
float c;
};
2.构造函数参数改成(float a=0, float b=0, float c=0)
3.入队、出队时候声明的结构体变量的成员改成三个浮点型
4-1视频的2分09秒,我也发现了这个问题,我认为如果真的插满的话,对头队尾指针应该重叠才对
当然可以,会java和c应该不会看不懂这个程序吧
这是 C++
使用STL模板
仅仅将元素赋值为0,0也是一个int 数值占据内存空间,并未起到清空队列的作用。
清空队列的时候已经设置长度为零,再次插入数值的时候长度重新从零计数,插入5个长度增到5,不会出现再次读取的时候长度还是10 的情况
队尾指空,入队时 新元素直接插入到队尾现在指向的位置。然后队尾再向后移
先移动指针再插入数据
并不是c++ 使用const声明表示不可一被修改,好像有点像 Java 中final也是不可以被修改,Java中static也是静态变量的意思,static类型可以被修改,那几个成员函数中之所以加了const修饰,是为了保护对象的数据不会被修改,在函数中只能读取对象数据并不可以修改。
1>c:\users\administrator\documents\visual studio 2010\projects\a002\a002\a002.cpp(28): error C2533: “Myqueue::{ctor}”: 构造函数不能有返回类型
1>c:\users\administrator\documents\visual studio 2010\projects\a002\a002\a002.cpp(103): error C2264: “Myqueue::Myqueue”: 函数定义或声明中有错误;未调用函数
漏了#endif
这种插入方法 tail指向第四个格子的时候,队列不是满的
这是环形队列的一个特点,区别在于是queue[i++]还是queue[++i]
假如说一开始空队的时候i是-1 那么入队显然要queue[(++i)%capacity],出队要queue[(i++)%capacity]
假如说一开始空队的时候i是0, 那么入队显然要queue[(i++)%capacity],出队是先让i-1 再queue[i%capacity]
这两种定义的方法都可以,差别是只是个人习惯
在James老师的实例中,他采用的是第一种方法,然后他判断空和满的方法不是通过tail来判断的,而是根据队列实际长度len和最大长度capacity来判断的,每次入队一个len++,出队一个len--,这就保证了len的大小就是队伍中所存在的元素个数,如果len==capacity,显然这时候就满了,len==0为空。
我们也在学数据结构,我觉得慕课的讲得比我们上课的内容好理解多了。
我们教队列的时候没有定义len,用上述两种定义方法的时候的判空判满函数是有所区别的,写出来乱乱的,在这边看到老师定义的这个,觉得清爽多了
你应该先入栈再出栈
没有错,如果是环形队列的话,尾指针会指向最后一个元素的后一个位置,具体可查看严蔚敏所编写的数据结构;如果是链对的话,尾指针则是指向最后一个元素
看你要储存的东西是什么咯,如果是数字整数就用int,字符就用char。
这个看你自己的需求了,语法上并没有强制要求初始化所有的数据成员,实际应用中是要初始化必要的数据,部分数据成员也可以通过后期的赋值操作进行。
vs2017 community