数据结构:栈子系统
- 格式:doc
- 大小:41.50 KB
- 文档页数:8
/*
*题目:设计一个字符型的链栈。
* 编写进栈、出栈、显示栈中全部元素的程序。
*题目:编写一个把十进制整数转换为二进制数的应用程序
*题目:编写一个把中缀表达式转换为后缀表达式(逆波兰式)的应用程序*题目:设计一个选择式菜单,以菜单方式选择上述操作。
* 栈子系统
* *******************************
* * 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;
p.top = 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
*************************************************/