数据结构_实验2_栈的基本操作

本文通过栈来实现算术表达式求值,包括初始化栈、判栈为空、出栈、入栈等基本操作。实验目标是理解和运用栈结构解决实际问题,如处理加减乘除和乘方运算。实验内容包括设计程序,实现算术表达式求值,支持+、-、*、/、%和^运算。提供了几个测试用例及其结果,并强调该实现无需使用队列。
摘要由CSDN通过智能技术生成

本人为编程小白,实验会有很多错误和不规范的地方,欢迎指出,仅供借鉴
本题不需要用到队列,笔者只是作为练习
一、实验目的
熟练掌握栈的基本操作:初始化栈、判栈为空、出栈、入栈等运算。
理解栈在数据处理中扮演的角色,运用栈结构实现具体的应用。
二、实验内容
栈是数据结构中一个非常重要的结构。表达式计算是掌握程序设计语言的重要部分之一,也是栈的应用的一个典型例子。本次实验的主要内容是利用栈的基本操作,设计一个程序,实现用算符优先法对算术表达式求值的过程。对本设计系统实现+、-、*、/、%和乘方(^)运算。符合要求,同时提高自己的编程能力。实现算术表达式求值。
三、实验要求
1.认真阅读和掌握本实验的算法。
2.上机将本算法实现。
3.在程序的编写中尽量与专业的编程规范靠拢,系统代码采用结构化的编程方式,力求设计代码以及注释等规范,
4.保存和打印出程序的运行结果,并结合程序进行分析。

需求分析

本实验为用栈实现对算术表达式求值的功能。
输出的形式:直接输出结果
程序所能达到的功能:对含有±/%^的算术表达式求值
测试数据:
测试一:3+6/2%2^1-4
输出结果:0
测试二:5-6^2+5%7
6/2
输出结果:-16
测试三:3^2+6&2
输出结果:你输入了不符合要求的字符

概要设计

在这里插入图片描述
在这里插入图片描述

详细设计

伪代码:
·初始化栈

Void InitStack{
   
	s.top = s.base;
	s.stackSize = size;
	}

·入栈

void push(stack<T> s,T e){
   
	if(s.top-s.base>=stackSize)return error;
	else{
   
s.top+=1;*(s.top)=e;
	return OK;
	}
}

·出栈,用e返回出栈元素

T  pop(stack<T> s){
   
	If(isEmpty(stack))return error;
	Else{
   
	T e = *(s.top);
	s.top-=1;
	return OK;}

·初始化队列

Void InitQueue(Queue q){
   
	q.rear=q.front;}

·入队

Void enQueue(Queue q,char e){
   
	p->date=e;
	q.rear->next=p;
	q.rear = p;}

·出队,用e返回出队元素

Char deQueue(Queue& q){
   
	If(isEmpty(q))return error;
	Else{
   Char e = q.front->next->data;
	q.front = q.front->next;
	return OK;}

·主函数

Int main(){
   
	Stack stack1,stack2;Queue queue;
	InitStack(stack1);InitStack(stack2);InitQueue(queue);
	String f;cin>>f;
	For(int i=0;i<f.size();i++){
   
		If(0<=f(i)<=9)enQueue;
		Else if(f(i)=+||-
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值