回 帖 发 新 帖 刷新版面

主题:[讨论]请问大家下面的代码哪里错误了

请问大家下面的代码哪里错误了(该代码是实现队列的顺序存储结构),编译不成功,说是我的DleQ函数和outlin函数是非法的,为什么?谢谢了!




#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
#define ElemType int 
typedef struct
{
    ElemType elem[MAXSIZE];
    int front,rear;
}SeQueue;
SeQueue Q;
void outlin(SeQueue Q);
void creat(SeQueue *Q);
void insert(SeQueue *Q,ElemType x);
ElemType DelQ(SeQueue *Q);
void main()
{
    int x,y,cord;
    do{
    printf("\n        主菜单               \n");
    printf("         1 建立链表队列        \n");
    printf("         2 入队一个元素        \n");
    printf("         3 出对一个元素        \n");
    printf("         4 结束程序运行        \n");
    printf("-------------------------------\n");
    printf("请输入您的选择(1,2,3,4)");
    scanf("%d",&cord);
    switch(cord)
    {
    case 1:{  creat(&Q);
               outlin(Q);
    }break;
    case 2:{   printf("\n x=?");   
        scanf("%d",&x);
        insert(&Q,x);  
        outlin(Q);
           }break;
    case 3:{    y=DelQ(&Q);  
        printf("\n       x=%d",y);
        outlin(Q);
           }break;
    case 4:exit(0);
    }
}while(cord<=4);
}

void creat(SeQueue *Q)
{int n,i,x;
    Q->front=-1;
    Q->rear=-1;
    printf("n=");
    scanf("%d",&n);
    for(i=1;i<=n;i++)
{
    printf("\n  data=");
    scanf("%d",&x);
    insert(Q,x);
}
}


void insert(SeQueue *Q,ElemType x)
{
    if((Q->rear+1)%MAXSIZE==Q->front)
    printf("QUEUE is FULL!\n");
    else{
    Q->rear=(Q->rear+1)%MAXSIZE;
    Q->elem[Q->rear]=x;
    }


ElemType DelQ(SeQueue *Q)
{if(Q->front==Q->rear)
printf("QUEUE is FULL!\n");
        return-1;
    else
        {Q->front=(Q->front+1)%MAXSIZE;
            return(Q->elem[Q->front]);
    }
}


void outlin(SeQueue Q)
{if(Q.rear==Q.front)
        printf("QUEUE is FULL!\n");
    else for(i=0;i>=Q.rear;i--)
        printf("\n %2d %6d",i,Q.elem[i]);
}

回复列表 (共5个回复)

沙发

我把insert函数的后面加了"}",编译成功了,也可以运行。但是,outlin函数(作用是把队列的元素输出)似乎不起作用,当我创建一个队列时,发现并没有把队列中的元素输出,还有我插入的时候,也没有把元素输出,但是我出一个队列元素是能够正常完成的(即DelQ函数是没问题的),这肯定是我的outlin函数有误,但我找不出来,麻烦大家帮帮忙,谢谢了!

板凳

你是要完成这个目的吗?修改的较多。也没上机测试
void creat(SeQueue *Q)
{int n,i,x;
    Q->front=-1;
    Q->rear=-1;
    do
    {
     printf("n=");
     scanf("%d",&n);
     if(n<=0 || n>MAXSIZE)
      printf("try again");
    }
    while(n<=0 || n>MAXSIZE);
    for(i=1;i<=n;i++)
    {
     printf("\n  data=");
     scanf("%d",&x);
     insert(Q,x);
    }
}


void insert(SeQueue *Q,ElemType x)
{
    if((Q->rear+1)%MAXSIZE==Q->front)
    printf("QUEUE is FULL!\n");
    else
    {
     if(Q->front < 0)
      front=0;
     Q->rear=(Q->rear+1)%MAXSIZE;
     Q->elem[Q->rear]=x;
    }
}

ElemType DelQ(SeQueue *Q)
{
 ElemType temp;

 if(Q->front==-1)         //-1为串中为空
 {
   printf("QUEUE is NULL!\n"); 
   return -1;
  }
  temp=(Q->elem[Q->front]);
  if(Q->front==Q->rear)  //取出最后一个数后把串清空
  {
      Q->front=-1;
      Q->rear=-1;
  }
  else
      Q->front=(Q->front+1)%MAXSIZE;

 return temp;
}


void outlin(SeQueue Q)
{
 if(Q.front<0)
     printf("QUEUE is NULL!\n");
 else 
     for(i=front;i>Q.rear;i=(i+1)%MAXSIZE)  //从第一个数开始输出
        printf("\n %2d %6d",i,Q.elem[i]);
}

3 楼

我知到了,我的outlin函数本身有错误,后来我把outlin函数改成else for(i=Q.front+1,i<=Q.rear,i++)就好了。其他的不用修改!

4 楼

不知道outlin函数的功能是什么,代码是,谢谢

5 楼

Outlin函数是将队列里的元素输出而已!

我来回复

您尚未登录,请登录后再回复。点此登录或注册