非常急的一道题
⑴ 链栈基本操作的实现:栈的初始化,生成一个空栈;压栈,即元素进栈;弹栈,即元素出栈;⑵ 十进制整数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; }运算
第四个功能无法用到!!
为什么那个进制转换无法进栈??如何修改??求帮忙指导??