/*
题目:设计一个字符型的链栈。
编写进栈、出栈、显示栈中全部元素的程序。
题目:编写一个把十进制整数转换为二进制数的应用程序
题目:编写一个把中缀表达式转换为后缀表达式(逆波兰式)的应用程序
题目:设计一个选择式菜单,以菜单方式选择上述操作。
*
栈子系统
*
*******************************
*
*
1------
进
栈
*
*
*
2------
出
栈
*
*
*
3------
显
示
*
*
*
4------
数值转换
*
*
*
5------
逆波兰式
*
*
*
0------
返
回
*
*******************************
请选择菜单号( 0--5 ):
*/
#include <>
#include <>
#define STACKMAX 50
typedef struct sta
//
栈的存储结构
{
int data;
struct sta *next;
}stackNode;
typedef struct
//
指向栈顶的指针
{
stackNode *top;
}linkStack;
void conversion(int n);
void push(linkStack *p, int x);
int pop(linkStack *p);
void showStack(linkStack *p);
void sufflx();
/*************************************************
Function: main()
Description:主调函数
Calls: push()
pop()
showStack()
conversion()
Input: NULL
Return: void
Others: NULL
*************************************************/
void main()
{
int x, choice, i = 1;
linkStack p;
= NULL;
//
置空栈
while (i)
{
printf("\n
栈 子 系 统 \n");
printf("*******************************\n");
printf("*
1------
进
栈
*\n");
printf("*
2------
出
栈
*\n");
printf("*
3------
显
示
*\n");
printf("*
4------
数值转换
*\n");
printf("*
5------
逆波兰式
*\n");
printf("*
0------
返
回
*\n");
printf("*******************************\n");
printf("
请选择菜单号(
0--5
): ");
fflush(stdin);
//
清空输入的缓存区
choice = getchar();
switch(choice)
{
case '1':
while (1)
{
printf(" 请输入一个整数( ‘0’表示结束)并按回车: "); scanf("%d", &x);
if (x != 0)
{
push(&p, x);//入栈
}
else
{
break;
}
}
break;
case '2':
x = pop(&p);//出栈
if (x > 0)
{
printf("出栈元素为: %d\n", x);
}
else
{
printf("栈为空,没有元素可以出栈!\n");
}
break;
case '3':
showStack(&p);//显示栈元素
break;
case '4':
printf("请输入十进制数:");
scanf("%d", &x);
conversion(x);
//
数值转换
break;
case '5':
sufflx();
break;
case '0':
i = 0;
break;
default:
i = 1;
break;
}
}
}
/*************************************************
Function: conversion()
Description:十进制数转换二进制数
Calls: push()
pop()
Input: n :输入的要转换的数
Return: void
Others: NULL
*************************************************/
void