| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 567 人关注过本帖
标题:怎么会不对呢?求大神......
只看楼主 加入收藏
randyoop
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-12-20
结帖率:0
收藏
已结贴  问题点数:40 回复次数:8 
怎么会不对呢?求大神......

#include<iostream>
#include<math.h>
using namespace std;
#define STACK_INIT_SIZE  100
#define   STACKINCREMENT  10
#define   ERROR   0
#define    OK    1
#define   OVERFLOW   -1

//栈:
typedef struct {
int *base;
int *top;
int stacksize;
}sqstack;
//构建一个空栈
int initstack(sqstack *s){
    s->base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));
if(!s->base)
exit(OVERFLOW);
//存储分配失败(健壮性)
s->top=s->base;
s->stacksize=STACK_INIT_SIZE;
return OK;
}

//进栈
void Push(sqstack *s,int e){
if(s->top-s->base>=s->stacksize){    //栈满,追加存储空间
s->base=(int *)realloc(s->base,(s->stacksize+STACKINCREMENT) * sizeof(int));
if(!s->base)
exit(OVERFLOW);
//存储分配失败(健壮性)
s->top=s->base+s->stacksize;
s->stacksize+=STACKINCREMENT;
}
*(s->top++)=e;
}

//出栈
int Pop(sqstack *s,int *e){
//若栈不空,则删除s的栈顶元素,用e返回其值,并返回OK,否则返回ERROR
if(s->top==s->base)
return ERROR;
*e=* (--s->top);
return OK;
}

//判断已存栈是否为空
int StackEmpty(sqstack *s){
return (s->top==s->base);
}

//数制转换
void conversion(int n, int m){
sqstack s;
int e;
initstack(&s);
while(n){
Push(&s,n%m);
n=n/m;
}
while(!StackEmpty(&s)){
Pop(&s,&e);
cout<<e;
}
}
//队列:
typedef struct qnode{
int data;
struct qnode * next;
}qnode,*queueptr;
typedef struct{
queueptr *front;
queueptr *rear;
}linkqueue;
//构建队列
int initqueue(linkqueue *q){
(q->front) = (q->rear)= (queueptr) malloc(sizeof(qnode));
if(!q->front)exit(OVERFLOW);
(q->front)->next=NULL;
return OK;
}
//插入元素
int enqueue(linkqueue *q,int f){
qnode *p;
p=(queueptr)malloc(sizeof(qnode));
if(!p)exit(OVERFLOW);
(p->data)=f;
(p->next)=NULL;
(q->rear)->next= p;
(q->rear)=p;
return OK;
}
//删除元素
int dequeue(linkqueue *q,int &f){
if(q->front==q.rear)renturn ERROR;
P=q->front->next;
f=p->data;
q->front->next=p->next;
if(q->rear==p)q->rear=q->front;
free(p);
return OK;
}
//小数部分的转换
void conversion2(float n,int m){
    linkqueue q;
    float n;
    linkqueue(&q);
    while(n){
        r=n*m;
        int floor(float r);  //向下取整
        enqueue(&q,r);
        n=n*m-r;
    }
    while(!q->front=q->rear){
        dequeue(&q,&f);
        cout<<f;
    }
}
//主函数
void main(){
int N,m;
float M;
cout<<"                    请输入一个非负的十进制数: ";
cout<<"整数部分: ";
cin>>N;
cout<<"小数部分(0.--形式): ";
cin>>M;
cout<<"                    请键入需要转换的进制数: "<<endl;
cout<<"                       1.转换成二进制数"<<endl;
cout<<"                       2.转换成八进制数"<<endl;
cout<<"                       3.转换成十六进制数"<<endl;
cout<<"                       0.退出程序"<<endl;
int t=1;
while(t){
cin>>m;
switch(m){
case 1:cout<<"              转换成的二进制数为:";
conversion(N,2);
cout<<".";
conversion2(M,2);
break;
case 2:cout<<"              转换成的八进制数为:";
conversion(N,8);
cout<<".";
conversion2(M,8);
break;
case 3:cout<<"              转换成的十六进制数为:";
conversion(N,16);
cout<<".";
conversion2(M,16);
break;
case 0:cout<<"              退出程序!";
break;
default:cout<<"             输入有误,请重新输入!"<<endl;
}
cout<<endl;
}
return 0;
}
搜索更多相关主题的帖子: namespace return include 
2013-05-11 18:45
randyoop
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-12-20
收藏
得分:0 
没有人么?
2013-05-11 19:10
挥霍吧青春
Rank: 2
等 级:论坛游民
帖 子:6
专家分:14
注 册:2013-5-11
收藏
得分:10 
这是新手能干的事?
2013-05-11 20:12
锋了
Rank: 7Rank: 7Rank: 7
来 自:向日葵幼儿园
等 级:黑侠
威 望:2
帖 子:306
专家分:586
注 册:2012-10-27
收藏
得分:10 
太长了,真心看不下
2013-05-11 20:40
narutokou
Rank: 2
等 级:论坛游民
帖 子:3
专家分:10
注 册:2012-7-18
收藏
得分:10 
太长了,应该在栈结构里设置两个全局变量,一个是容量,一个是使用情况
s->top-s->base>=s->stacksize,这个不能计算长度
还有好多。。。。。
代码太乱了,表示没看完
好好看书吧
2013-05-11 22:17
randyoop
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-12-20
收藏
得分:0 
课本上就是这样的,栈结构那里没问题,就是后面的队列那里有错,不知道怎么改。。。
2013-05-11 22:21
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:10 
你这是用栈进行处理,其实我觉得你没必要那么麻烦,你的栈处理太麻烦,所以会出现问题,对于栈的定义,你不熟练就可以用顺序结构进行存储,这样也挺方便的,你这问题有点多。你都没弄清楚,栈和队列的声明为什么会用到两个结构体吧!你没搞清楚,所以你在赋值的过程中会出错,你在好好看看,给你个建议,你把栈和队列都用顺序存储写出来,然后去实现这个问题,肯定不会有问题,你把顺序存储看懂了,在去看链式存储。

Maybe
2013-05-11 22:52
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:0 
struct stack
{
  int *stack;
int top;
int Maxsize;
};
这样应该比你那好理解好操作吧!队列你也可以这样,更容易理解

Maybe
2013-05-11 23:00
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:0 
给你看看栈的动态:
#define OK 1
#define ERROR -1
#define STACK_MAX_SIZE 100
#define increment 50
#include"stdio.h"
#include"stdlib.h"
typedef int  ElemType;
typedef int  status;
typedef struct Stack_node
{
  ElemType *bottom;
  ElemType  *top;
  int stack_size;
}stack_node;
status init_stack(stack_node *S)
{
    S->bottom=(ElemType*)malloc(STACK_MAX_SIZE*sizeof(ElemType));
    if(S->bottom==NULL)
        return ERROR;
    else
    {
        S->top=S->bottom;
        S->stack_size=STACK_MAX_SIZE;
        return OK;
    }
}
status push(stack_node *S,int e)
{   int  *p;
    if(S->top-S->bottom>=STACK_MAX_SIZE)
    {
        p=(ElemType*)realloc(S->bottom,(STACK_MAX_SIZE+increment)*sizeof(ElemType));
        if(p==NULL)
            return ERROR;
        else
        {    S->bottom=p;
            S->top=S->bottom+S->stack_size;
            S->stack_size+=increment;
            *S->top=e;
            S->top++;
            return OK;
        }
    }
        else
        {    *S->top=e;
        S->top++;
        return OK;
        }
    }
status pop(stack_node *S,int *e)
{
    if(S->top==S->bottom)
   
        return ERROR;
        else
        {
            S->top--;
            *e=*S->top;
            return OK;
        }
}
void main()
{
    stack_node S;
    int e;
    int xz=1;
    if(init_stack(&S)!=OK)
        printf("初始化未成功!\n");
    else
        while(xz!=0)
        {
            printf("1.入栈\t2.出栈\t0.结束\n");
            scanf("%d",&xz);
            switch(xz)
            {
            case 1:
                printf("请输入要入栈的数:");
                scanf("%d",&e);
                if(push(&S,e)==OK)
                    printf("入栈成功!\n");
                 else
                     printf("入栈未成功!\n");
                     break;
            case  2:
                if(pop(&S,&e)==OK)
                    printf("出栈的元素为:%d\n",e);
                else
                    printf("栈已为空!\n");
                break;

            case 0:
                printf("谢谢使用,再见!\n");
                break;
            default:
               
                    printf("输入有误,请重新输入!\n");
                    break;
            }
        }
}

Maybe
2013-05-11 23:07
快速回复:怎么会不对呢?求大神......
数据加载中...
 
   



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

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