| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 888 人关注过本帖
标题:书上的的例题有错,大家给看看为什么我这么改不对
只看楼主 加入收藏
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
结帖率:100%
收藏
已结贴  问题点数:100 回复次数:13 
书上的的例题有错,大家给看看为什么我这么改不对
题目是求队列中元素个数的
程序代码:
#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: 3Rank: 3
来 自:哈尔滨
等 级:论坛游侠
帖 子:64
专家分:132
注 册:2010-10-12
收藏
得分:20 
程序代码:
#include<stdio.h>
#include<stdlib.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 = ( queue * )malloc( sizeof(queue) * 1 );

    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));
}
    

第一种改法,修改主函数,将 "&sq----sq",然后还应该queue *sq = ( queue * )malloc( sizeof(queue) * 1 );开辟内存

图!
不一定是真相!
2010-11-20 10:57
m21wo
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:4
帖 子:440
专家分:1905
注 册:2010-9-23
收藏
得分:30 
书上的例子没什么大错误啊!
typedef struct
{
    elemtype data[Maxlen];
    int front,rear;
}queue;
当然可以这样写sq->data[sq->rear]=x啊
我改了一下,能运行!
程序代码:
#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=new queue;

    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));
}

 



 

If You Want Something, Go Get It, Period.
2010-11-20 10:59
七有新人
Rank: 3Rank: 3
来 自:哈尔滨
等 级:论坛游侠
帖 子:64
专家分:132
注 册:2010-10-12
收藏
得分:20 
程序代码:
#include<stdio.h>
#include <stdlib.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 = (queue *)malloc(sizeof(queue) * 1);
    queue **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));
}


你的改法,子函数里 (*sq)->rear ,*sq应该用括号,涉及优先级的问题,
    queue *sq = (queue *)malloc(sizeof(queue) * 1);
    queue **sw = &sq;
    初始化问题

图!
不一定是真相!
2010-11-20 11:03
xiaomarn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:348
专家分:2026
注 册:2009-3-18
收藏
得分:30 
程序代码:
#include<stdio.h>

#define Maxlen 20

typedef char elemtype;

typedef struct
{
    elemtype data[Maxlen];
    int front;
    int 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;    //指针改成对象 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));
}

为了凸显我的工作量,我把代码给复制了一遍
其实只将主函数中的sq定义改了一下 queue sq;  
2010-11-20 11:05
遮天云
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: 3Rank: 3
来 自:哈尔滨
等 级:论坛游侠
帖 子:64
专家分:132
注 册:2010-10-12
收藏
得分:0 
回复 7楼 遮天云
我的第二个回复里有,
指针和指向符号的优先级问题

图!
不一定是真相!
2010-11-20 11:10
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
呃,谢谢,这个 到没注意
2010-11-20 11:44
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
以下是引用遮天云在2010-11-20 11:44:43的发言:

呃,谢谢,这个 到没注意
遮天大哥, 这是哪本书上的例题?

我就是真命天子,顺我者生,逆我者死!
2010-11-20 12:19
快速回复:书上的的例题有错,大家给看看为什么我这么改不对
数据加载中...
 
   



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

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