v
栈的应用举例
n栈在表达式计算过程中的应用 :建立操作数栈和运算符栈。运算符有优先级。规则:
n自左至右扫描表达式,凡是遇到操作数一律进操作数栈。
n当遇到运算符时,如果它的优先级比运算符栈栈顶元素的优先级高就进栈。反之,取出栈顶运算符和操作数栈栈顶的连续两个操作数进行运算,并将结果存入操作数栈,然后继续比较该运算符与栈顶运算符的优先级。
n左括号一律进运算符栈,右括号一律不进运算符栈,取出运算符栈顶运算符和操作数栈顶的两个操作数进行运算,并将结果压入操作数栈,直到取出左括号为止。
v
栈的应用举例
n栈在表达式计算过程中的应用 :建立操作数栈和运算符栈。运算符有优先级。规则:
n自左至右扫描表达式,凡是遇到操作数一律进操作数栈。
n当遇到运算符时,如果它的优先级比运算符栈栈顶元素的优先级高就进栈。反之,取出栈顶运算符和操作数栈栈顶的连续两个操作数进行运算,并将结果存入操作数栈,然后继续比较该运算符与栈顶运算符的优先级。
n左括号一律进运算符栈,右括号一律不进运算符栈,取出运算符栈顶运算符和操作数栈顶的两个操作数进行运算,并将结果压入操作数栈,直到取出左括号为止。
error.h
#ifndef __ERROR_H_
#define __ERROR_H_
#define ERROR -1
#define FULL -2
#define EMPTY -3
#define Malloc -4
int error;
void myERROR(char *str);
char * mystrerror(int num);
#endif
error.c
#include"error.h"
#include<stdio.h>
void myERROR(char *str)
{
/*char * msg=mystrerror(error);
printf("%s:%s",str,msg);*/
switch(error)
{
case ERROR:
printf("%s:输入参数错误\n",str);
break;
case FULL:
printf("%s:已满栈\n",str);
break;
case EMPTY:
printf("%s:已空栈\n",str);
break;
}
}
char * mystrerror(int num)
{
switch(error)
{
case ERROR:
return "%s:输入参数错误\n";
case FULL:
return "%s:已满栈\n";
case EMPTY:
return "%s:已空栈\n";
case Malloc:
return "%s:空间分配失败\n";
}
}
#include<stdio.h>
void myERROR(char *str)
{
/*char * msg=mystrerror(error);
printf("%s:%s",str,msg);*/
switch(error)
{
case ERROR:
printf("%s:输入参数错误\n",str);
break;
case FULL:
printf("%s:已满栈\n",str);
break;
case EMPTY:
printf("%s:已空栈\n",str);
break;
}
}
char * mystrerror(int num)
{
switch(error)
{
case ERROR:
return "%s:输入参数错误\n";
case FULL:
return "%s:已满栈\n";
case EMPTY:
return "%s:已空栈\n";
case Malloc:
return "%s:空间分配失败\n";
}
}
Sqstack.h
#ifndef __SQSTACK_H_
#define __SQSTACK_H_
#define SIZE 100
#define TRUE 1
#define FALSE 0
#include"error.h"
typedef int stackdata;
typedef struct stack
{
stackdata data[SIZE];
int top;
}STACK;
typedef struct stack1
{
char data[SIZE];
int top;
}S;
int Initstack(STACK *s);//zhi kong
int Initstack1(S *s);
//shi fou kong
int stackempty(STACK *s);
int stackempty1(S *s);
//shi fou man
int stackfull(STACK *s);
int stackfull1(S *s);
//jin zhan
int push(STACK *s,stackdata x);
int push1 (S*s,char x);
//chu zhan
int pop(STACK *s,stackdata *x);
int pop1(S *s,char *x);
//qu zhan ding
int gettop(STACK *s,stackdata *x);
int gettop1(S *s,char *x);
#endif
#define __SQSTACK_H_
#define SIZE 100
#define TRUE 1
#define FALSE 0
#include"error.h"
typedef int stackdata;
typedef struct stack
{
stackdata data[SIZE];
int top;
}STACK;
typedef struct stack1
{
char data[SIZE];
int top;
}S;
int Initstack(STACK *s);//zhi kong
int Initstack1(S *s);
//shi fou kong
int stackempty(STACK *s);
int stackempty1(S *s);
//shi fou man
int stackfull(STACK *s);
int stackfull1(S *s);
//jin zhan
int push(STACK *s,stackdata x);
int push1 (S*s,char x);
//chu zhan
int pop(STACK *s,stackdata *x);
int pop1(S *s,char *x);
//qu zhan ding
int gettop(STACK *s,stackdata *x);
int gettop1(S *s,char *x);
#endif
Sqstack.c
#include"Sqstack.h"
#include<stdio.h>
//#include"error.h" <
#include<stdio.h>
//#include"error.h" <