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









难么长的代码,,,
