首先是printf的语法有误,变量名前面不用加&。其次在程序执行时如果进行了错误的输入(用scanf读取)比如123 456,也打印不出原来的两个数。
成都创新互联主要从事成都网站建设、网站设计、网页设计、企业做网站、公司建网站等业务。立足成都服务靖西,10余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792
Status QueueTraverse(SqQueue Q)//这里不对,改为SqQueue *Q,不传递指针的话,这个函数内Q是另外一个结构体变量了,Q.front就不是你要的值,而是随机值了。
主要错在InitQueue函数里面。当声明一个指针的时候,除了指针本身占用的内存以外,是不会分配具体的内存空间的。也就是说,如果只是CircQueue *q;声明指针q,然后直接使用它的内部成员q-front,q-rear = 0是不合法的。
// 应该是10和20把?rear=20的意思是指20的那个位置为下次插入的位置 也就是说现在队里有:10 11 12 1..19 10个啦。20的也是这么算的。。
在这个函数中,我们遍历字符串数组并检查每个字符,如果是数字,则将其压入栈中,否则将其添加到队列中。
函数结束时Queue没变化啊,应该传指针啊InitQueue( & Queue);函数中Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));改为Q-front = Q-rear = (QueuePtr)malloc(sizeof(QNode));这种形式再试试吧。
Status QueueTraverse(SqQueue Q)//这里不对,改为SqQueue *Q,不传递指针的话,这个函数内Q是另外一个结构体变量了,Q.front就不是你要的值,而是随机值了。
1、C语言的队列(queue),是指先进先出(FIFO, First-In-First-Out)的线性表。在具体应用中通常用链表或者数组来实现。
2、队列特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
3、其实就跟一个链表一样,链表的添加删除如果能理解了,队列只是链表的元素增加/删除 按先进先出特点的一种实现。但对于队列来说,实现方式不是重点,先进先出的性质才是重点,这在实际应用中很多,比如排队叫号。