| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 366 人关注过本帖
标题:一个循环队列的调用出错
只看楼主 加入收藏
鹿言弓
Rank: 1
等 级:新手上路
帖 子:26
专家分:1
注 册:2012-11-14
结帖率:83.33%
收藏
已结贴  问题点数:17 回复次数:6 
一个循环队列的调用出错
程序代码:
#include
#include
typedef struct {
        int *base;
        int front;
        int  rear;
        }sqqueue;
   int En_que(int borrow, sqqueue Q)
   {   
       printf("%d",borrow);//
       if(!Q.base){
       printf("内存已满!\n");
       }
      
       if((Q.rear+1)%6==Q.front){
            Q.rear=0;
            Q.base[Q.rear]=borrow;
            Q.rear++;
              printf("%d",Q.base[Q.rear]);//
            }
       else{
            Q.base[Q.rear]=borrow;
            Q.rear++;
             printf("%d",Q.base[Q.rear]);//
            }
                return 0;            
          }
       int  De_que(sqqueue Q){
            int n;
            if(!Q.base){
            printf("你还没有去过银行\n");
            n=0;}
            if((Q.front+1)%6==Q.front){
                   n=Q.base[Q.front];                     
                   Q.front=0; }
                   else if(Q.front==Q.rear)
                   n=0;
                   else
             {n=Q.base[Q.front];
             Q.front++;}
             return n;
             }                            
    int main(){
        int i,n;
        int borrow;
        sqqueue Q;
        Q.base=(int*)malloc(6*sizeof(int));
        Q.rear=Q.front=0;
        while(1){
           printf("你的选择是:");     
        scanf("%d",&i);
        if(i==1){     
        scanf("%d",&borrow);
        En_que(borrow,Q);
        }
         else if(i==2){
                    for(i=1;1<=5;i++){                                        
                      n=De_que(Q);
                      if(n<0)
                      printf("你向银行还款%d元",n);
                      else if(n>0)
                      printf("你向银行贷款%d元",n);
                      }
                      }  
                      } 
        return 0;
       
    }
真心不知道怎么回事,应该是出队与入队两个调用函数的问题。
万分感谢。

搜索更多相关主题的帖子: include borrow 
2012-12-02 11:16
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:1 
先说最严重的问题:楼主知道什么叫形参么?你的两个函数操作对 Q未作任何更改!


[fly]存在即是合理[/fly]
2012-12-02 12:25
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:1 
真心不知道你做的是什么...
不如你把目的写清楚吧,我试试重做一个...

I have not failed completely
2012-12-02 13:03
鹿言弓
Rank: 1
等 级:新手上路
帖 子:26
专家分:1
注 册:2012-11-14
收藏
得分:0 
回复 2楼 azzbcc
那怎么办呢?能说说吗?
感觉每次都是你的出现来拯救的我,大爱!!!
感觉大一学个C语言,结果是。。。水货一个,基础知识不扎实。
2012-12-02 22:35
鹿言弓
Rank: 1
等 级:新手上路
帖 子:26
专家分:1
注 册:2012-11-14
收藏
得分:0 
回复 3楼 神龙赖了
还是自己写吧,毕竟写了总有收获的说。
2012-12-02 22:36
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:15 
程序代码:
int En_que(int borrow, sqqueue &Q)//这里用了C++的引用,可以改变队列 ,不过我建议你用传指针的方法
{   //我只写这个函数,出队列的自己想一下
    printf("%d",borrow);
    if(!Q.base)
    {
        printf("内存已满!\n");
        exit(0);
        //内存已满 ,要么继续分配,要么直接退出啊
    }

    if((Q.rear+1)%6==Q.front)//你知道这个条件什么意思么?判断循环队列满
    {
        printf("队列满!\n");
        return 1;
    }
    else
    {    //队列未满时
        Q.base[Q.rear]=borrow;    //入队列
        Q.rear++;                //头移动
        //这缺一个东西,Q.rear超过分配内存数 6怎么办?
        if (Q.rear >= 6)
            Q.rear = 0;//这样就循环了
        //printf("%d",Q.base[Q.rear]);//这里是要输出入列数么?下标已经移动了如何输出?
        //非要输出的话,在移动前输出就行
    }
    return 0;          
}


[ 本帖最后由 azzbcc 于 2012-12-2 23:14 编辑 ]


[fly]存在即是合理[/fly]
2012-12-02 23:12
鹿言弓
Rank: 1
等 级:新手上路
帖 子:26
专家分:1
注 册:2012-11-14
收藏
得分:0 
回复 6楼 azzbcc
谢谢啦。发现自己需要的其实并不是完全的队列结构。弄得自己的程序是三不像。我要修改下,也了解到形参这个知识点。
2012-12-03 12:40
快速回复:一个循环队列的调用出错
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.044572 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved