题目:从文件中读取表达式,对其中的“()”“{}”“【】”括号匹配,输出匹配的结果
#include<iostream>
#include<fstream>
#include<malloc.h>
#include<string>
using namespace std;
typedef char SElemType;
typedef int Status;
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#define STACK_INIT_SIZE 10//初始分配量
#define STACKINCREMENT 2 //存储空间分配增量
typedef struct SqStack
{
SElemType *base; //在栈构造之前和销毁之后,base值为NULL
SElemType *top; //栈顶指针
int stacksize; //当前已分配的存储空间,以元素为单位
}SqStack; //顺序栈
Status InitStack(SqStack *S,int size)
{ /* 初始栈 */
(*S).base=(SElemType *)malloc(size*sizeof(SElemType));
if(!(*S).base)
exit(OVERFLOW);
(*S).top=(*S).base;
(*S).stacksize=size;
return OK;
}
Status StackEmpty(SqStack S)
{ /* 判断栈空 */
if(S.top==S.base)
return TRUE;
else
return FALSE;
}
Status Push(SqStack *S,SElemType e)
{ /* 插入新元素到栈 */
if((*S).top-(*S).base>=(*S).stacksize)
{
(*S).base=(SElemType *)realloc((*S).base,((*S).stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!(*S).base)
exit(OVERFLOW);
(*S).top=(*S).base+(*S).stacksize;
(*S).stacksize+=STACKINCREMENT;
}
*((*S).top)++=e;
return OK;
}
Status Pop(SqStack *S,SElemType *e)
{ /* 出栈 */
if((*S).top==(*S).base)
return ERROR;
*e=*--(*S).top;
return OK;
}
void check(char a[],int size)
{
SqStack s;
SElemType *p,e;
if(InitStack(&s,size))
{
p=a;
while(*p!=NULL)
{
// cout<<*p<<endl;
switch(*p)
{
case '{':
case '(':
case '[':Push(&s,*p++);
break;
case '}':
case ')':
case ']':if(!StackEmpty(s))
{
Pop(&s,&e);
if(*p==')'&&e!='('||*p==']'&&e!='[')
{
cout<<("左右括号不配对\n");
exit(ERROR);
}
else
{
p++;
break;
}
}
else
{
cout<<("缺乏左括号\n");
exit(ERROR);
}
default: p++;
}
}
if(StackEmpty(s))
cout<<("括号匹配\n");
else
cout<<("缺乏右括号\n");
}
}
void StrToChar(char a[],string b)
{
for(int i=0;i<b.length();i++)
{
a[i]=b[i];
cout<<a[i];
}
a[b.length()]='\0';
cout<<endl;
}
void main()
{
string str[2];
ifstream infile;
char a[256];
int k=0;
int size;
infile.open("input.txt");
infile>>size;
while(infile.good() &&k<2)
{
getline(infile,str[k]);
k++;
}
infile.close();
cout<<"表达式是:";
StrToChar(a,str[1]);
check(a,size);
}
分享到:
相关推荐
1. 栈的基本概念 2. 栈的顺序存储表示表示和实现 (1)顺序栈动态分配存储空间方法 和对栈操作设计 (2)顺序栈静态分配存储空间方法 和对栈操作设计 * 3. 栈的链式存储结构——链栈 顺序栈静态分配存储空间方法 和对...
数据结构(C语言版)——共享栈(代码版),里面是C文件和exe文件。其中包含的操作有1:初始化共享栈2:向共享栈中插入元素3:当前共享栈元素个数
将十进制数N和其它d进制数的转换是计算机实现计算的基本问题,其解决方案很多,其中最简单方法基于下列原理:即除d取余法。
C语言一道练习如何建立栈和运用栈来进行一些操作的好题。里面涉及加减乘除括号的优先级考虑和入栈出栈的规则来实现计算中缀表达式。作为数据结构中比较重要的一个结构——栈,我们可以通过这道题更加好的理解栈的...
(完整word版)数据结构课程设计 利用栈求表达式的值,可供小学生作业,并能给出分数.docx(完整word版)数据结构课程设计 利用栈求表达式的值,可供小学生作业,并能给出分数.docx(完整word版)数据结构课程设计 利用栈求...
数据结构\数据结构全部课件\第二章线性表3_栈与递归 课堂练习答案.doc
利用栈求表达式的值,可供小学生作业,并能给出分数
总的来说,通过这两次的上机实验练习,我的收获比较多,基本上掌握了队和栈的基本知识,达到了实验要求的目的。
采用C++语言实现利用顺序栈、链栈将10进制数转为2、8、16进制数。 通过本编程实例,可以进一步了解到顺序栈和链栈之间区别和联系,体会两者的异同,进一步加深知识印象,是不错的练习素材哦。
此外,该文档还包括了一个逐步指南,介绍如何在Python中创建栈类,包括代码示例和实现细节。 本文档中的实验练习提供了创建和操作栈的实践,包括从头开始创建栈,压入和弹出元素,以及搜索和排序栈等。该文档还包括...
T串在S串中出现的位置与次数,建立一个非递减表,插入一个元素,建立一个非递减表,删相同元素,交换元素,链队列与循环队列的入队和出队,树,用算符优先法求表达式值.
迷宫求解——栈的简单应用 要熟练得掌握一种数据结构,要经过大量的练习,而将数据结构应用于实际用用中则是一种非常好的锻炼方式。 此次便是应用java来实现 迷宫求解 这个经典的程序设计问题。
数据结构练习题 一、单项选择题 1、以下数据结构中哪一个是非线性结构?(C) A. 队列 B. 栈 C. 二叉树 D. 线性表 线性结构:向量 列表 堆栈 队列 非线性结构: 树形 图形 2、栈中元素的进出原则是(B ) A. 先进先...
利用栈求表达式的值,可供小学生作业,并能给出分数。 要求:建立试题库文件,随机产生n个题目;题目涉及加减乘除,带括弧的混合运算;随时可以退出;保留历史分数,能回顾历史,给出与历史分数比较后 的评价。
C++模板类型题型,更全面,也可以更从中了解模板的运用与技术。
博文链接:https://baby69yy2000.iteye.com/blog/173051
栈是基本的数据结构。其特点是添加和访问数据都在线性表的一端(头端)。数据访问遵循先进后出(FILO)的原则。栈一般用数组或者链表来实现。...是C++、数据结构及算法学习的一个小小练习。供大家参考。
一个栈的入栈序列是1,2,3,4,5,则栈的不可能的输出序列是( C )。 A 54321 B 45321 C 43512 D 12345 7. 常对数组进行的两种基本操作是( B ) A.建立和删除 B. 索引和修改 C.插入和修改 D.插入和索引 8. 算法...
《数据结构与算法》期末练习 一 选择题 1.以下与数据的存储结构无关的术语是( D )。 A.循环队列 B. 链表 C. 哈希表 D. 栈 2. 算法的时间复杂度取决于( A ) A.问题的规模 B. 待处理数据的初态 C. A和B D. ...
数据结构之表达式求值 c++编写,练习栈的使用 c++源文件 typedef struct sqstack { char data[MAXSIZE]; int top; } stack,*seqstack;