| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 806 人关注过本帖
标题:请教高手,一个简单的栈应用?
只看楼主 加入收藏
编程小呆
Rank: 2
来 自:西电
等 级:论坛游民
帖 子:31
专家分:23
注 册:2010-3-20
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
请教高手,一个简单的栈应用?
程序代码:
//将一个十进制数转换为八进制数
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

#define STACK_INIT_SIZE 100;
#define STACKINCREMENT 10;

typedef struct SqStack{
    int *base;
    int *top;
    int stacksize;
}SqStack;

Status 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_SISE;
    return OK;
}

Status 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;
    S.top++;
    return OK;
}

Status Pop(SqStack &S,int e){//出栈操作
    if(S.top==S.base)  return ERROR;
    S.top--;
    e=*S.top;
    return OK;
}

void conversasion(){//转换函数
    int N,e;
    SqStack S;
    InitStack(S);
    printf("请输入要转换为8进制的10进制数为:",N);
    scanf("%d",&N);
    while(N){
        Push(S,N%8);
        N=N/8;
    }
    while(S.top!=S.base)
        Pop(S,e);
    printf("%d",e);
}

int main(){
    conversation();
    return 0;
}
搜索更多相关主题的帖子: 应用 
2010-04-01 18:12
xichong
Rank: 7Rank: 7Rank: 7
来 自:四川南充
等 级:黑侠
威 望:2
帖 子:146
专家分:582
注 册:2009-6-10
收藏
得分:20 
#define STACK_INIT_SIZE 100
#define STACKINCREMENT  10
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
    int *base;
    int *top;
    int stacksize;
}SqStack;
void initialStack(SqStack *s)
{
    s->base=(int *)malloc(STACK_INIT_SIZE*sizeof(int));
    if(!s->base) exit(0);
    s->top=s->base;
    s->stacksize=STACK_INIT_SIZE;
}
void Push(SqStack *s,int e)
{
    if(s->top-s->base>=s->stacksize)
    {
        s->base=(int *)realloc(s->base,(STACK_INIT_SIZE+STACKINCREMENT)*sizeof(int));
        if(!s->base) exit(0);
        s->top=s->base+s->stacksize;
        s->stacksize+=STACKINCREMENT;
    }
    *(s->top)++=e;
}
void Pop(SqStack *s,int *e)
{
    if(s->top==s->base) exit(0);
    *e=*--(s->top);
}
int judge(SqStack *s)//判空
{
    if(s->base==s->top) return(0);
    else return(1);
}
void conversion()
{//输入一个非负十进制数,将其转换为其他进制的数并输出
    SqStack sq;
    int m,n,e;
    printf("请输入一个非负十进制数和你想把它转化为其他进制数(小于等于9)的进制:\n");
    scanf("%d %d",&m,&n);
    initialStack(&sq);
    printf("将%d转化为%d进制后的结果是:\n",m,n);
    while(m)
    {
        Push(&sq,m%n);
        m=m/n;
    }
    while(judge(&sq))//判断是否为空栈
    {
        Pop(&sq,&e);
        printf("%d",e);
    }
    printf("\n");
}
void main()
{
    conversion();
}
2010-04-01 20:56
xichong
Rank: 7Rank: 7Rank: 7
来 自:四川南充
等 级:黑侠
威 望:2
帖 子:146
专家分:582
注 册:2009-6-10
收藏
得分:0 
楼主的程序主要有几个问题:
1.&S是C++中的概念,应该在#include<iostream>中,在C语言中一般只能用指针;
2.OVERFLOW,OK,Staus,ERROR等的值都需要经过编译预处理赋值,如#define OK 1;
....
总之,书上的算法都是用伪C语言描述的,照搬过来是行不通的!
2010-04-01 21:02
编程小呆
Rank: 2
来 自:西电
等 级:论坛游民
帖 子:31
专家分:23
注 册:2010-3-20
收藏
得分:0 
好详细啊,真是谢谢了,我刚学数据结构,很多都不懂,今天花了好长时间都没有找出问题的所在,总觉得应该是那样,真的万分感谢
2010-04-01 23:14
zhuyunshen
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:212
专家分:455
注 册:2009-11-22
收藏
得分:0 
啦啦啦啦啦
2010-04-01 23:17
编程小呆
Rank: 2
来 自:西电
等 级:论坛游民
帖 子:31
专家分:23
注 册:2010-3-20
收藏
得分:0 
还有那个实现数值转换的代码,可以使任意数制间相互转换,多谢

2010-04-01 23:18
xuru1990
Rank: 2
等 级:论坛游民
帖 子:36
专家分:23
注 册:2009-10-28
收藏
得分:0 
status convers(sqstack & s,int n,int k)//任意进制转换
{

    char p[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
    while(n)
    {
        
    push(s,p[n%k]);
        n/=k;
    }
   
    return ok;
}   //1到16进制的转换
2010-04-07 12:54
编程小呆
Rank: 2
来 自:西电
等 级:论坛游民
帖 子:31
专家分:23
注 册:2010-3-20
收藏
得分:0 
回复 7楼 xuru1990
结贴了,没分给你了
2010-04-07 16:11
快速回复:请教高手,一个简单的栈应用?
数据加载中...
 
   



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

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