| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 888 人关注过本帖
标题:书上的的例题有错,大家给看看为什么我这么改不对
取消只看楼主 加入收藏
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
结帖率:100%
收藏
已结贴  问题点数:100 回复次数:5 
书上的的例题有错,大家给看看为什么我这么改不对
题目是求队列中元素个数的
程序代码:
#include<stdio.h>
#define Maxlen 20
typedef char elemtype;
typedef struct
{
    elemtype data[Maxlen];
    int front,rear;
}queue;
int count(queue *sq)
{
    return (sq->rear-sq->front+Maxlen)%Maxlen;
}
void init(queue *sq)//初始化空栈
{
    sq->front=0;
    sq->rear=0;
}
int enqueue(queue *sq,elemtype x)//入队
{
    if((sq->rear+1)%Maxlen==sq->front)//队列上溢出(队满)
        return 0;
    else
    {
        sq->rear=(sq->rear+1)%Maxlen;
        sq->data[sq->rear]=x;
        return 1;
    }
}
int outqueue(queue *sq,elemtype *x)//出队
{
    if(sq->rear==sq->front)//队空
        return 0;
    else
    {
        sq->front=(sq->front+1)%Maxlen;//出队
        *x=sq->data[sq->front];
        return 1;
    }
}
void main()
{
    queue *sq;

    elemtype x;
    init(&sq);//初始化空队
    printf("a入队\n");
    enqueue(&sq,'a');
    printf("b入队\n");
    enqueue(&sq,'b');
    printf("c入队\n");
    enqueue(&sq,'c');
    printf("出队一次\n");
    outqueue(&sq,&x);
    printf("d入队\n");
    enqueue(&sq,'d');
    printf("出队一次\n");
    outqueue(&sq,&x);
    printf("e入队\n");
    enqueue(&sq,'e');
    printf("f入队\n");
    enqueue(&sq,'f');
    printf("队列中的元素个数为%d",count(&sq));
}
    
    
这是书上的原例子,显然是不对的,一级指针传递错误,
程序代码:
#include<stdio.h>
#define Maxlen 20
typedef char elemtype;
typedef struct
{
    elemtype data[Maxlen];
    int front,rear;
}queue;
int count(queue **sq)
{
    return (*sq->rear-*sq->front+Maxlen)%Maxlen;
}
void init(queue **sq)//初始化空栈
{
    *sq->front=0;
    *sq->rear=0;
}
int enqueue(queue **sq,elemtype x)//入队
{
    if((*sq->rear+1)%Maxlen==*sq->front)//队列上溢出(队满)
        return 0;
    else
    {
        *sq->rear=(*sq->rear+1)%Maxlen;
        *sq->data[*sq->rear]=x;
        return 1;
    }
}
int outqueue(queue **sq,elemtype *x)//出队
{
    if(*sq->rear==*sq->front)//队空
        return 0;
    else
    {
        *sq->front=(*sq->front+1)%Maxlen;//出队
        *x=*sq->data[*sq->front];
        return 1;
    }
}
void main()
{
    queue *sq,**sw;
    sw=&sq;

    elemtype x;
    init(sw);//初始化空队
    printf("a入队\n");
    enqueue(sw,'a');
    printf("b入队\n");
    enqueue(sw,'b');
    printf("c入队\n");
    enqueue(sw,'c');
    printf("出队一次\n");
    outqueue(sw,&x);
    printf("d入队\n");
    enqueue(sw,'d');
    printf("出队一次\n");
    outqueue(sw,&x);
    printf("e入队\n");
    enqueue(sw,'e');
    printf("f入队\n");
    enqueue(sw,'f');
    printf("队列中的元素个数为%d",count(sw));
}
    
    
这是我改后的,改成二级指针调用,但是还是有错误,不知道哦啊错在哪里,说是指针没指向结构体类型,不知为何,请前辈指教一二,谢谢了

[ 本帖最后由 遮天云 于 2010-11-20 11:00 编辑 ]
搜索更多相关主题的帖子: 例题 
2010-11-20 10:42
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
嗯,谢谢两位,就是指针传送出问题了,但是我想知道,为什么我改为二级至真时候还是不对啊?说是没指向结构体类型,就是我贴的第二段代码
2010-11-20 11:07
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
回复 5楼 xiaomarn
谢谢了,我看下,我改了半天了居然一点进展都没有
2010-11-20 11:09
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
呃,谢谢,这个 到没注意
2010-11-20 11:44
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
回复 10楼 BlueGuy
李春葆和曾慧,张植民编写的程序设计题典啊,没想到会有这种错误
2010-11-20 12:57
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
李春葆,曾慧,张植民,编写的数据结构程序设计题典,居然会有这样的错误
2010-11-20 12:59
快速回复:书上的的例题有错,大家给看看为什么我这么改不对
数据加载中...
 
   



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

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