扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
//队列Q存在则销毁Q while(Q.front){//Q.front是队列的队首节点,不为NULL时执行循环 Q.rear=Q.front-next;//Q.rear指向离队首最近的节点。
从网站建设到定制行业解决方案,为提供做网站、成都网站制作服务体系,各种行业企业客户提供网站建设解决方案,助力业务快速发展。创新互联将不断加快创新步伐,提供优质的建站服务。
我猜这种情况可能是指针未初始化或未申请空间就释放了或释放了两次,这样会崩溃。
函数结束时Queue没变化啊,应该传指针啊InitQueue( & Queue);函数中Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));改为Q-front = Q-rear = (QueuePtr)malloc(sizeof(QNode));这种形式再试试吧。
你的结构体定义有点问题。。你的头尾指针怎么可能是int型,应该是指向队列结构体型,写成下面这样会比较好,那个取头元素的方法你可以再琢磨下,不难的,链式存取画图就很好理解,下面这个对你更有用。
若队列Q 非空,则删去Q 的队头元素,并返回该元素。此操作简称出队。(6) QueueFront(Q)若队列Q 非空,则返回队头元素,但不改变队列Q 的状态。
1、队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
2、销毁是把整个栈都释放掉,清空只是把栈里元素清除。因为你的栈元素是int型基本变量,所以栈元素内容是直接存放在栈空间的,并没有另外申请内存保存栈元素,所以在从栈里移除栈元素时,不需要调用free函数。
3、如果是局部函数栈空间中的数组,有程序自动回收。void f(){int a[2] = {1,2}; //局部栈空间上的数组,程序自动回收}如果是动态内存分配 的数组,在c语言中使用free()将其释放。
4、在结构上采用这种技巧来存储的队列称为循环队列。 队列和栈一样只允许在断点处插入和删除元素。
5、Stack *s; /* 这里没有给s分配内存,这只是一个Stack的指针*/ InitStack(s);改为:Stack s; /* 这样就给s分配空间了, s.top现在就可以用了*/ InitStack(&s);这个问题就好了。
= pnew更新队列尾部指针。队列的数据结构形式就是由一个头front指针,一个尾rear指针来表征,items的设计是用空间换时间,涉及队列大小的操作会非常方便。
修改后代码如下,你看看应该有一些不一样的地方,队列很多判断你都写错了,这个队列好像是从数组的顶部往下存储的。
如果你用vc,#includedeque就好了,但是注意要加上using naemspace std;我是当你用的c++的STL,STL中没有真正的队列和栈,他们都是通过对双端队列的改造得到的,所以包含的文件可能和你想的不一样。
你这错误多的没有办法说了! QElemtype 和 p的类型不一致。 对于对象Q,没有进行InitQueue操作。 对于pop出来的应该为值。 所以要用引用。
1、销毁队列: 其实就是将你之前创建队列,在里面插入的数据动态开辟的空间给释放掉。我这边有个队列例子的收集,你看一下,是使用C语言操作的。包括创建,入队,销毁。
2、你这里“栈”是用一个单独的结构变量Stack①来存储的,其成员之一为栈顶的指针top。清空栈指的是把把栈里的元素都清除掉,但栈本身还在(此时栈为空栈)。而销毁栈则把①也给销毁掉了。对队列的操作也类似。
3、销毁是队列的结构都不存在了。清空是有效结点清除了,但队头队尾还在,队列结构还在。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流