24小时热门版块排行榜    

查看: 229  |  回复: 0

1直在路上

铁虫 (小有名气)

[求助] 出栈哪里出错了呢?最后两个函数 empty 和out_queue ,VC6.0显示出栈失败。。。。

# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>

typedef struct Queue
{
        int*pBase;
        int front;
        int rear;
}QUEUE;

void init(QUEUE *pQ,int len);
void en_queue(QUEUE *pQ,int num,int len);
bool full_queue(QUEUE *pQ,int len);
void traverse(QUEUE *pQ,int len);
bool out_queue(QUEUE*pQ,int*pVal,int len);
bool is_empty(QUEUE*pQ);







int main (void)
{
        QUEUE Q;
        int len;
        int i;
        int num;
        int val;
       
        printf("请输入队列长度:len = ";
        scanf("%d",&len);
       
        init(&Q,len);
        for(i = 0; i < len-1; ++i )//入队循环
        {
                printf("请输入第%d个要入队的元素:",i+1);
                scanf("%d",&num);
                en_queue(&Q,num,len);// 入队函数调用,想想 len 的作用
               
        }
       
        traverse(&Q,len);// 入队后遍历

        printf("\n";

       
        if(out_queue(&Q,&val,len))
                {
                        printf("出队成功!且出队的元素是:%d\n",val);
                }
        else
        {
                printf("出队失败!\n";
        }  

       


        return 0;
}

void init(QUEUE *pQ,int len)
{
        pQ->pBase  = (int*)malloc(sizeof(int)*len);
        if (NULL == pQ->pBase)
        {
                printf("动态内存分配失败!\n";
                exit(-1);
        }
        else
        {
                pQ->front = 0;
                pQ->rear = 0;
               
        }
       
        return;
       
}

void en_queue(QUEUE *pQ,int num,int len)
{
        if(full_queue(pQ,len))
        {
                printf("队列已满!";
               
        }
       
        else
        {
                pQ->pBase[pQ->rear] = num;
                pQ->rear = (pQ->rear +1) % len;
               
        }
       
        return;
       
}

bool full_queue(QUEUE *pQ,int len)
{
        if((pQ->rear +1)%len == pQ->front)
                return true;
        else
                return false;
       
}

void traverse(QUEUE *pQ,int len)
{
        int cnt = 0;
        while(pQ->front != pQ->rear)
        {
                printf("%d\n",pQ->pBase[pQ->front]);
                pQ->front = (pQ->front +1) % len;
                cnt++;
               
        }
       
        printf("长度为%d的队列中实际元素的个数为:%d \n",len,cnt);
       
        return;

}

bool out_queue(QUEUE * pQ,int *pVal,int len)
{
        if(is_empty(pQ))
                return false;
        else
        {
                *pVal = pQ->pBase[pQ->front];
                pQ->front = (pQ->front + 1) % len;
                return true;
       
        }

       

}

bool is_empty(QUEUE *pQ)
{
        if(pQ->front == pQ->rear)
                return true;
        else
                return false;

}
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 1直在路上 的主题更新
信息提示
请填处理意见