| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 486 人关注过本帖
标题:非常急的一道题
取消只看楼主 加入收藏
chen1204019
Rank: 1
来 自:广东
等 级:新手上路
帖 子:93
专家分:0
注 册:2012-12-3
结帖率:90.63%
收藏
已结贴  问题点数:6 回复次数:0 
非常急的一道题
  链栈基本操作的实现:栈的初始化,生成一个空栈;压栈,即元素进栈;弹栈,即元素出栈;
  十进制整数N向其它进制数d(二、八、十六)的转换是计算机实现计算的基本问题。转换法则:该转换法则对应于一个简单算法原理:
n=(n div d)*d+n mod d   其中:div为整除运算,mod为求余
程序代码:
#include <dos.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
enum BOOL{False,True};
typedef struct Lnode       //定义节点结构
{
    char  data;               //数据域
    struct Lnode *next;       //后向指针
}LNode,*LPoint;
int conversion();
void initial(LPoint&);    //初始化一个堆栈
void  push_linkstack(LPoint&,char);       //将一个元素入栈
BOOL pop_linkstack(LPoint&,char &);        //将一个元素出栈
void print_linkstack(LPoint); //显示栈中所有元素
void main()
{
    LPoint ls;
    char ch,j;
    int flag=1;
    BOOL temp;

    initial(ls);       //初始化堆栈S
    while(flag)
    {
        printf("请选择:\n");
        printf("1.显示栈中所有元素\n");
        printf("2.入栈\n");
        printf("3.出栈\n");
        printf("4.进行进制转换\n");
        printf("5.退出程序\n");
        scanf(" %c",&j);
        switch(j)
        {
        case '1':print_linkstack(ls);
            break;
        case '2':printf("请输入要入栈的元素(一个字符):");
            scanf(" %c",&ch);   //输入要入栈的字符
            push_linkstack(ls,ch);//入栈
        //    print_linkstack(ls);
            break;
        case '3':temp=pop_linkstack(ls,ch);  //出栈
            if(temp==True)
            {
                printf("出栈一个元素:%c\n",ch);//若栈不空,显示出栈的元素
                print_linkstack(ls);
            }
            else printf("堆栈为空!\n");//否则堆栈为空
            break;
        case '4':
            conversion();
            print_linkstack(ls);
            break;
        default:flag=0;printf("程序结束,按任意键退出!\n");
        }
    }
    getch();
}
//函数功能:生成空栈
void initial(LPoint &pi)
{
    pi=NULL;   //栈顶指针初始化为NULL
}
//函数功能:进栈
void push_linkstack(LPoint &pi,char ch)
{
    //入栈,由于采用链式结构,一般不会产生栈满的情况
    LPoint po;
    po=(LPoint)malloc(sizeof(LNode));//生成一个新节点
    po->data=ch;                     //赋值
    po->next=pi;                  //新节点的后向指针指向原栈顶节点
    pi=po;                          //站顶指针指向新节点
}
//函数功能:出栈
BOOL pop_linkstack(LPoint &pi,char &e)
{
    //出栈,成功返回True,并用e返回该元素值,失败返回False
    LPoint po;
    po=pi;
    pi=po->next;                  //栈顶指针指向下一个节点
    if(po==NULL) return False;    //栈已空
    else {
        e=po->data;
        return True;
    }                  
}
//函数功能:显示栈中的元素
void print_linkstack(LPoint p)   
{
    //显示栈中所有元素
    if(p==NULL) printf("堆栈为空!\n");//栈为空
    else  {
        printf("堆栈所有元素:");
        while(p!=NULL)                       //否则显示栈中所有元素
        {
            printf("%c ",p->data);
            p=p->next;
        }
        printf("\n");
    }
}
//函数功能:进行进栈转换 (这里有问题,如何修改)
int conversion()
{
    LPoint ls;
    //initial(ls);
    int n, e=0, flag=0;
    char ch;
    printf("输入要转化的十进制数:\n");
    scanf("%d", &n);
    printf("要转化为多少进制:2进制、8进制、16进制 (填数字)!\n");
    scanf("%d", &flag);
    printf("将十进制数%d转化为%d进制是:\n", n, flag);
    while(n)
    {
        ch=n%flag;
        push_linkstack(ls, ch);//入栈
        n=n/flag;
    }
    printf("\n");
    return 0;
}
运算
第四个功能无法用到!!
为什么那个进制转换无法进栈??如何修改??求帮忙指导??
搜索更多相关主题的帖子: 十进制 元素 
2013-05-06 00:13
快速回复:非常急的一道题
数据加载中...
 
   



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

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