数据结构队列的链式存储和链式存储

数据结构队列的链式存储和链式存储,第1张

头文件:dynamicArray.h

头文件:seqQueue.h

源文件:

seqQueue.c

源文件:dynamicArray.c

源文件:01队嫌吵列_顺序存储.c

打印结果:

头文件:LinkQueue.h

源文件:LinkQueue.c

源文件:轮滚02队列_链式存储.c

打印结果芹桐侍:

打印结果:

就几个明显的错误提一下

1. 函数 enterqueue中

s->queue[s->tear]

这句没有实际 *** 作,估计应该是 s->queue[s->tear] = x用于在队列最后添加一个新的元素

2. 主芦此函数中,大约21行左右

for(j=0j<kj++)

{

deletequeue(l,e)

if(gethead(l,f)==0) // 这里多了一个分号,导致判断后没有任何动作可之心,删之

*f=0

*e=*e+*f

enterqueue(l,*e)

}

3. 主函数大约30行左右,打印输出

for(j=0j<l->tearj++,p++) // 这里不可用i作循环变量,否则干扰外循环i

printf("%d ",*p)

4. deletequeue(l,e)

if(gethead(l,f)==0) // 多了分号

*f=0

*e=*e+*f

从语句目的看,是希望从deletequeue和gethead函数中,得到e或者f的地址,但是 1)由于传递的是指针的值陪正迅,所以即使函数中修改了,主函数中无法得到新的地址;2)这两个函数体中,并没有设置地址的代码,总之,e 和 f 是没有可 *** 作地址的

5. 最重要一点,没有看懂解题思路是什么。

即使按照删一个节点,再添两个节点的想法,也应该从队列的后面开始,这样间隔相加,并放在后移一个位置上,不至于影响后续计算。而这段程序从前开始修改队清瞎列,那新的节点产生,不就干扰后面的计算了?

所以,建议先说明一下解题思路,这样便于解决程序中的各种问题。

给你的头文件,里面包括队列的初始化裂昌腔,判断空队列,插入删迅大除节点,清空队肆衫列 *** 作。使用时候把头文件加载到你的程序中就可以了。#define QueueSize 100\x0d\x0atypedef struct Squeue\x0d\x0a{\x0d\x0a DataType queue[QueueSize]\x0d\x0a int front,rear\x0d\x0a}SeqQueue\x0d\x0avoid InitQueue(SeqQueue *SQ)\x0d\x0a{\x0d\x0a SQ->front=SQ->rear=0\x0d\x0a}\x0d\x0aint QueueEmpty(SeqQueue SQ)\x0d\x0a{\x0d\x0a if(SQ.front==SQ.rear)\x0d\x0a return 1\x0d\x0a return 0\x0d\x0a}\x0d\x0aint EnterQueue(SeqQueue *SQ,DataType x)\x0d\x0a{\x0d\x0a if(SQ->rear==QueueSize)\x0d\x0a return 0\x0d\x0a SQ->queue[SQ->rear]=x\x0d\x0a SQ->rear+=1\x0d\x0a return 1\x0d\x0a}\x0d\x0aint DeleteQueue(SeqQueue *SQ,DataType *e)\x0d\x0a{\x0d\x0a if(SQ->front=SQ->rear)\x0d\x0a return 0\x0d\x0a else\x0d\x0a {\x0d\x0a *e=SQ->queue[SQ->front]\x0d\x0a SQ->front+=1\x0d\x0a return 1\x0d\x0a }\x0d\x0a}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12201960.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存