一个C语言队列问题
#include<stdio.h>#include"stdlib.h"#defineQElemtypeint#defineMAXSIZE100typedefstruct{...
#include <stdio.h>
#include "stdlib.h"
#define QElemtype int
#define MAXSIZE 100
typedef struct {
QElemtype *base;
int front;
int rear;
}Squeue;
int InitQueue(Squeue *Q){
(*Q).base = (QElemtype *)malloc(sizeof(Squeue));
if(!(*Q).base){
printf("Overflow!");
return 1;
}
(*Q).front = (*Q).rear= 0;
return 0;
}
int length_Queue(Squeue Q){
return (Q.rear-Q.front+MAXSIZE)%MAXSIZE;
}
int pop(Squeue *Q,QElemtype e){
if((*Q).front =(*Q).rear){
printf("empty!");
return 1;}
e=(*Q).base+(*Q).front;
(*Q).front = ((*Q).front+1)%MAXSIZE;
return 0;
}
int EnQueue (Squeue *Q,QElemtype e){
if(((*Q).rear+1)%MAXSIZE==(*Q).front)
{
printf("full!");
return 1;}
*((*Q).base+(*Q).rear)=e;
(*Q).rear=((*Q).rear+1)%MAXSIZE;
return 0;
}
int main()
{
char c,p;
int Count=1;
float pow=0;
Squeue Q;
printf ("游程编码问题\n");
printf("请输入01序列,以“#”结束:\n");
while((c=getchar())!='*'){
EnQueue(&Q,c);
}
float size=length_Queue(Q); //队列a的长度
while(size)
{
pop(&Q,p); //弹出队列首部元素
if(p==*(Q.base+Q.front))
Count++;
else if(p!=*(Q.base+Q.front))
{
pow++;
printf("%d",Count);
Count=1;
}
}
}
}
执行总是出错,为什么啊 展开
#include "stdlib.h"
#define QElemtype int
#define MAXSIZE 100
typedef struct {
QElemtype *base;
int front;
int rear;
}Squeue;
int InitQueue(Squeue *Q){
(*Q).base = (QElemtype *)malloc(sizeof(Squeue));
if(!(*Q).base){
printf("Overflow!");
return 1;
}
(*Q).front = (*Q).rear= 0;
return 0;
}
int length_Queue(Squeue Q){
return (Q.rear-Q.front+MAXSIZE)%MAXSIZE;
}
int pop(Squeue *Q,QElemtype e){
if((*Q).front =(*Q).rear){
printf("empty!");
return 1;}
e=(*Q).base+(*Q).front;
(*Q).front = ((*Q).front+1)%MAXSIZE;
return 0;
}
int EnQueue (Squeue *Q,QElemtype e){
if(((*Q).rear+1)%MAXSIZE==(*Q).front)
{
printf("full!");
return 1;}
*((*Q).base+(*Q).rear)=e;
(*Q).rear=((*Q).rear+1)%MAXSIZE;
return 0;
}
int main()
{
char c,p;
int Count=1;
float pow=0;
Squeue Q;
printf ("游程编码问题\n");
printf("请输入01序列,以“#”结束:\n");
while((c=getchar())!='*'){
EnQueue(&Q,c);
}
float size=length_Queue(Q); //队列a的长度
while(size)
{
pop(&Q,p); //弹出队列首部元素
if(p==*(Q.base+Q.front))
Count++;
else if(p!=*(Q.base+Q.front))
{
pow++;
printf("%d",Count);
Count=1;
}
}
}
}
执行总是出错,为什么啊 展开
2个回答
展开全部
你这错误多的没有办法说了!
1. QElemtype 和 p的类型不一致。
2. 对于对象Q,没有进行InitQueue操作。
3. 对于pop出来的应该为值。 所以要用引用。int pop(Squeue *Q,QElemtype& e)
4. 长度为整形,不知道为什么用了float
5. 用指针的,不要先变换成所指的对象再去寻找变量。直接Q->...就行了。
6. 对于while语句直接就是死循环,不知道什么功能。
建议:初学者应该弄好编码的格式。不然很难阅读的。
对于你的while语句功能不知道做啥。所以就能帮到这些了。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define QElemtype char
#define MAXSIZE 100
typedef struct {
public:
QElemtype* base;
int front;
int rear;
}Squeue;
int InitQueue(Squeue *Q){
Q->base = NULL;
Q->base = (QElemtype*)malloc(MAXSIZE*sizeof(QElemtype));
if(!(Q->base)){
printf("Overflow!");
return 1;
}
// 最好对里面的值进行初始化
memset(Q->base,0,MAXSIZE*sizeof(QElemtype));
Q->front = Q->rear= 0;
return 0;
}
int length_Queue(const Squeue *Q){
return ((Q->rear)-(Q->front)+MAXSIZE)%MAXSIZE;
}
int EnQueue(Squeue *Q,QElemtype e){
if((Q->rear+1)%MAXSIZE==Q->front)
{
printf("full!");
return 1;
}
*(Q->rear+Q->base)=e;
Q->rear=(Q->rear+1)%MAXSIZE;
return 0;
}
int pop(Squeue *Q,QElemtype& e){
if(Q->front =Q->rear){
printf("empty!");
return 1;
}
e= *(Q->base+Q->front);
Q->front = (Q->front+1)%MAXSIZE;
return 0;
}
int main(void)
{
QElemtype c,p;
int Count=1;
float pow=0;
Squeue *Q;
Q = (Squeue*)malloc(sizeof(Squeue));//Q = new Squeue();
InitQueue(Q);
printf ("游程编码问题\n");
printf("请输入01序列,以“*”结束:\n");
while((c=getchar())!='*'){
EnQueue(Q,c);
}
int size=length_Queue(Q); //队列a的长度
while(size) {
pop(Q,p); //弹出队列首部元素
if(p==*(Q->base+Q->front))
Count++;
else if(p!=*(Q->base+Q->front)) {
pow++;
printf("%d",Count);
Count=1;
}
size=length_Queue(Q);
}
return 0;
}
展开全部
#include <stdio.h>
#include "stdlib.h"
#define QElemtype int
#define MAXSIZE 100
typedef struct {
QElemtype *base;
int front;
int rear;
}Squeue;
int InitQueue(Squeue *Q){
(*Q).base = (QElemtype *)malloc(sizeof(Squeue));
if(!(*Q).base){
printf("Overflow!");
return 1;
}
(*Q).front = (*Q).rear= 0;
return 0;
}
int length_Queue(Squeue Q){
return (Q.rear-Q.front+MAXSIZE)%MAXSIZE;
}
int pop(Squeue *Q,QElemtype e){
if((*Q).front =(*Q).rear){
printf("empty!");
return 1;}
e=*(Q->base+Q->front);
(*Q).front = ((*Q).front+1)%MAXSIZE;
return 0;
}
int EnQueue (Squeue *Q,QElemtype e){
if(((*Q).rear+1)%MAXSIZE==(*Q).front)
{
printf("full!");
return 1;}
*((*Q).base+(*Q).rear)=e;
(*Q).rear=((*Q).rear+1)%MAXSIZE;
return 0;
}
void main()
{
char c,p;
int Count=1;
float pow=0;
Squeue Q;
printf ("Óγ̱àÂëÎÊÌâ\n");
printf("ÇëÊäÈë01ÐòÁÐ,ÒÔ¡°#¡±½áÊø:\n");
while((c=getchar())!='*'){
EnQueue(&Q,c);
}
int size=length_Queue(Q); //¶ÓÁÐaµÄ³¤¶È
while(size)
{
pop(&Q,p); //µ¯³ö¶ÓÁÐÊײ¿ÔªËØ
if(p==*(Q.base+Q.front))
Count++;
else
if(p!=*(Q.base+Q.front))
{
pow++;
printf("%d",Count);
Count=1;
}
}
}
我不知道这个程序要干嘛,但是错误太多了,我修改了几项,但是还有错。我实在不明白char p是干嘛的,你为什么要把char赋给int,而且,pop的实参p未被赋值。还有你的InitQueue(Squeue *Q)函数未被调用,你使用数组来做队列,连数组都没定义。最重要的是你能不能写得整齐一点,看起来好困难,大家都是初学者,互相学习一下吧。
#include "stdlib.h"
#define QElemtype int
#define MAXSIZE 100
typedef struct {
QElemtype *base;
int front;
int rear;
}Squeue;
int InitQueue(Squeue *Q){
(*Q).base = (QElemtype *)malloc(sizeof(Squeue));
if(!(*Q).base){
printf("Overflow!");
return 1;
}
(*Q).front = (*Q).rear= 0;
return 0;
}
int length_Queue(Squeue Q){
return (Q.rear-Q.front+MAXSIZE)%MAXSIZE;
}
int pop(Squeue *Q,QElemtype e){
if((*Q).front =(*Q).rear){
printf("empty!");
return 1;}
e=*(Q->base+Q->front);
(*Q).front = ((*Q).front+1)%MAXSIZE;
return 0;
}
int EnQueue (Squeue *Q,QElemtype e){
if(((*Q).rear+1)%MAXSIZE==(*Q).front)
{
printf("full!");
return 1;}
*((*Q).base+(*Q).rear)=e;
(*Q).rear=((*Q).rear+1)%MAXSIZE;
return 0;
}
void main()
{
char c,p;
int Count=1;
float pow=0;
Squeue Q;
printf ("Óγ̱àÂëÎÊÌâ\n");
printf("ÇëÊäÈë01ÐòÁÐ,ÒÔ¡°#¡±½áÊø:\n");
while((c=getchar())!='*'){
EnQueue(&Q,c);
}
int size=length_Queue(Q); //¶ÓÁÐaµÄ³¤¶È
while(size)
{
pop(&Q,p); //µ¯³ö¶ÓÁÐÊײ¿ÔªËØ
if(p==*(Q.base+Q.front))
Count++;
else
if(p!=*(Q.base+Q.front))
{
pow++;
printf("%d",Count);
Count=1;
}
}
}
我不知道这个程序要干嘛,但是错误太多了,我修改了几项,但是还有错。我实在不明白char p是干嘛的,你为什么要把char赋给int,而且,pop的实参p未被赋值。还有你的InitQueue(Squeue *Q)函数未被调用,你使用数组来做队列,连数组都没定义。最重要的是你能不能写得整齐一点,看起来好困难,大家都是初学者,互相学习一下吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询