栈的使用和基于堆栈的进制转换
题目:

解答:
#include<stdio.h>
#include <stack>
#define MAXLEN 100 //MAXLEN最大长度
std::stack <int>v;
typedef struct
{
int data[MAXLEN];//定义char类型数组date[100]
int top;//定义标志
}SeqStack;//声明栈结构体LinkStack
/*初始化顺序栈*/
void InitStack(SeqStack *S){
S->top = -1; //声明栈从0开始,最大元素99
}
/*判断栈是否为空*/
int EmptyStack(SeqStack *S){
if(S->top == -1)
return 1;
else
return 0;
}
/*判断栈满*/
int FullStack(SeqStack *S){
if(S->top == MAXLEN-1)
return 1;
else
return 0;
}
/*进栈*/
int Push(SeqStack *S, int x){
if(FullStack(S)){
printf("栈满,不能进栈!\n");
return 0;
}
else{
S->top++;
S->data[S->top]=x;
return 1;
}
}
/*出栈*/
int Pop(SeqStack *S, int *x){
if(EmptyStack(S)){
printf("栈空,不能出栈!\n");
return 0;
}
else{
*x = S->data[S->top];
S->top--;
return 1;
}
}
/*取栈顶元素*/
int GetTop(SeqStack *S, int *x){
if(EmptyStack(S)){
printf("栈空,取栈顶元素失败!\n");
return 0;
}
else{
*x = S->data[S->top];
return 1;
}
}
/*进制转换*/
void Change(int n,int d){
while(n)
{
v.push(n % d);
n = n / d;
}
while(!v.empty())
{
if(v.top()>=10)
printf("%c", v.top()+0x37);
else
printf("%d", v.top());
v.pop();///pop的返回值类型为空
}
}
void Menu()
{
printf("\n 顺序栈的各种操作");
printf("\n==========================================");
printf("\n| 1--始化顺序栈 |");
printf("\n| 2--调用入栈函数 |");
printf("\n| 3--调用出栈函数 |");
printf("\n| 4--取栈顶元素 |");
printf("\n| 5--调用进制转换函数 |");
printf("\n==========================================");
printf("\n请输入菜单号(0-5):");
}
main(){
int i,n,flag;
SeqStack S;
int x;
char ch1,ch2,a;
ch1 = 'y';
while(ch1 == 'y' || ch1 == 'Y'){
Menu();
scanf(" %c",&ch2);
getchar();
switch(ch2){
case '1':
InitStack(&S);/*初始化顺序栈*/
printf("栈的初始化完成!\n");
break;
case '2':
printf("输入要入栈的元素个数:\n");
scanf("%d",&n);
printf("输入%d个入栈的字符:",n);
for(i=0; i<n; i++){
scanf(" %c",&x);
flag = Push(&S,x);/*进栈*/
}
if(flag == 1)
printf("入栈成功!\n");
break;
case '3':
printf("输入要出栈的元素个数:\n");
scanf("%d",&n);
printf("出栈的元素为:\n");
for(i=0; i<n; i++){
flag = Pop(&S,&x);
printf("%c",x);
}
if(flag == 1)
printf("出栈成功!\n");
else
printf("出栈失败!\n");
break;
case '4':
if(flag = GetTop(&S, &x))
printf("当前的栈顶元素为%c\n",x);
break;
case '5':
printf("请输入一个十进制数字:\n");
scanf("%d",&n);
printf("将这个十进制转换为几进制?");
scanf("%d",&flag);
Change(n,flag);
break;
case '0':
ch1 = 'n';
break;
default:
printf("输入有误,请输入0-5进行选择!\n");
}
}
}


