栈实现个位数四则运算

写一个程序,使得该程序能够完成个位数的四则运算,但要用到栈的基本操作。既然是实验就会有它的目的和要求。
实验目的:1.掌握栈的定义及实现方法;
2.掌握利用栈求解算术表达式的方法。
实验要求:1.使用链式存储结构完成栈的各种基本操作;
2.补充完成In©, Preced(t1,t2), Operate(a,theta,b)三个函数。
栈是一种先进后出的线性表,既然是线性表,就可以有顺序形式,即顺序栈;也可以有链式形式,即链栈。本实验是要求用链式存储结构,所以以下内容就是关于链栈的表示和实现,以及用链栈实现个位数的四则运算。
初始化:即构造一个空栈,因为没必要设置头结点,所以直接将栈顶指针置空即可。
【算法描述】

Status InitStack(LinkStack &S)
{
   
	S=NULL;
	return OK;
}

入栈:链栈在入栈前不需要判断栈是否满,然而顺序栈的入栈操作是要判断的,链栈只需要为入栈元素动态分配一个结点空间。
【算法描述】

Status Push(LinkStack &S,SElemType e)
{
   
	p=new StackNode;
	p->data=e;
	p->next=S;  //将新结点插入栈顶
	S=p;     //修改栈顶指针为p
	return OK;
}

出栈:出栈前需要判空,跟顺序栈时一样的,但是,链栈跟链表的删除一样,出栈后需要释放栈顶元素的栈顶空间。
【算法描述】

Status Pop(LinkStack &S,SElemType e)
{
   
	if(S==NULL) return ERROR;  //栈为空的情况
	e=S->data;
	p=S;  //临时保存,以备释放;
	S=S->next;  //修改栈顶指针
	delete p;  //释放原栈顶元素空间
	return OK;
}

取栈顶元素:与顺序栈一样,当栈非空时,此操作返回当前栈顶元素的值,栈顶指针S保持不变。
【算法描述】

SElemType GetTop(LinkStack S)
{
   
	if(S!=NULL)
		return S->data;
}

链栈的基本操作就是以上这些,根据上面的基本操作以及要补充的代码(这些代码在后面的程序中有,里面的代码也简单,应该能看得懂),实现实验要求的完整代码如下:
【完整代码】

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define OVERFLOW -1 
#define OK 1
#define ERROR 0

typedef int Status;
typedef char SElemType;

typedef struct StackNode 
{
   
    SElemType  date;     
    struct StackNode *next;         
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值