`

栈练习一

 
阅读更多

题目:从文件中读取表达式,对其中的“()”“{}”“【】”括号匹配,输出匹配的结果

#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. 栈的定义 栈是一种后进先出(Last In First Out, LIFO)的数据结构。这意味着最后插入的数据元素将被最先删除。栈支持两种基本操作:入栈(Push)和出栈(Pop)。 #### 2. 栈的操作 - ...

    栈和队列基本操作及练习

    在本主题中,我们将深入探讨栈与队列的基本概念、操作以及相关的练习问题。 栈(Stack)是一种“后进先出”(Last In First Out, LIFO)的数据结构。它的主要操作包括压入(Push)、弹出(Pop)和查看栈顶元素...

    栈和队列+串+数组和广义表+树和二叉树练习题.docx

    10. 若已知一个栈的入栈序列是 1,2,3,…,n,其输出序列为 p1,p2,p3,…,pn,若 p1=n,则 pi 为 n-i+1。 11. 判定一个栈 ST(最多元素为 m0)为空的条件是 ST-&gt;top&lt;&gt;0。 12. 判定一个队列 QU(最多元素为 m0)为满...

    C中数据结构(链表,队列,栈的练习)

    通过"链表-栈练习"这个文件,你可以进一步熟悉这些概念并动手实践,这将有助于加深理解并提升编程技能。练习可能包括设计和实现各种操作函数,以及解决实际问题,如实现LRU缓存淘汰策略、表达式求值等。在实践中,要...

    数据结构栈的讲解以及习题

    栈是一种特殊的、只能在表的一端进行插入或删除操作的线性表。栈的逻辑结构和线性表相同,其最大特点是“后进先出”。栈的存储结构有顺序栈和链栈之分,要求掌握栈的C语言描述方法。 1. 顺序栈 顺序栈是利用地址...

    数据结构(C语言版)——共享栈

    1. **栈的基本概念** 栈是一种线性数据结构,遵循“后进先出”(LIFO)的原则。在栈中,最新的元素总是位于顶部,而最早的元素则位于底部。栈的主要操作包括压栈(将元素添加到顶部)、弹栈(移除顶部元素)和查看...

    两个栈实现一个队列

    本篇我们将探讨如何利用两个栈来模拟一个队列,这是数据结构与算法中的一个经典问题。 标题“两个栈实现一个队列”暗示了我们要用到栈的特性来构建一个具有队列行为的数据结构。通常,栈支持两种基本操作:push...

    十进制转化为八进制 c语言 数据结构栈练习

    本文将深入探讨如何使用C语言实现从十进制到八进制的转换,以及这一过程中的数据结构——栈的应用。 十进制是我们日常生活最常用的一种计数方式,而八进制则在计算机系统中有着特殊的地位,因为早期的计算机系统...

    数据结构 主要是栈 含有课件 练习

    1. 栈的基本概念 2. 栈的顺序存储表示表示和实现 (1)顺序栈动态分配存储空间方法 和对栈操作设计 (2)顺序栈静态分配存储空间方法 和对栈操作设计 * 3. 栈的链式存储结构——链栈 顺序栈静态分配存储空间方法 和对...

    数据结构小练习-栈(上)

    本小练习主要关注栈这一主题,我们将探讨栈的基本概念、操作以及其在实际问题中的应用。 栈是一种线性数据结构,其特点是只能在一端进行插入和删除操作,这一端通常被称为栈顶。在栈中,新添加的元素会压入栈顶,而...

    利用c语言练习栈的基本操作

    在这个“利用C语言练习栈的基本操作”的主题中,我们将深入探讨如何使用C语言来实现栈这一重要的数据结构。栈是计算机科学中一种特殊的线性数据结构,遵循“后进先出”(LIFO)的原则,常被用于解决各种问题,如括号...

    数据结构练习题-栈和队列.pdf

    如果一个栈在元素n进栈时发生上溢,这意味着栈的最大容量是n-1,因为栈已经无法容纳新的元素了。两个栈共享内存空间时,为了避免频繁的溢出,应将一个栈的栈顶设在空间的开始,另一个栈的栈顶设在空间的末尾。当两个...

    C语言:中缀算术表达式求值(栈 附答案).docx

    在C语言中,中缀表达式求值是一个常见的编程问题,它涉及到数据结构中的栈这一概念。本题目的目标是设计一个程序,能够...通过这个练习,我们可以更好地掌握栈的使用,以及如何利用栈来处理具有优先级的运算符问题。

    pwn栈溢出10道练习题有writeup

    1. **栈的结构**:了解栈的基本结构至关重要。栈由帧组成,每个函数调用创建一个新的帧,包含局部变量、返回地址和其他相关数据。栈从高地址向低地址增长,而函数的返回地址通常位于栈帧的顶部。 2. **缓冲区溢出**...

    数据结构第三章栈和队列练习及答案.doc

    "数据结构第三章栈和队列练习及答案" 本资源摘要信息将详细介绍栈和队列的知识点,包括栈和队列的定义、特点、操作和应用。 一、栈的定义和特点 栈是一种特殊的线性表,它只能在一端进行插入和删除操作。栈的特点...

    栈的链表实现(数制转换问题)

    栈是一种特殊的线性数据结构,它的特点是“后进先出”(Last In First Out,简称LIFO)。在计算机科学中,栈广泛应用于各种算法和数据处理中,例如括号匹配、表达式求值、深度优先搜索等。在本文中,我们将深入探讨...

    5_栈_

    标题中的“5_栈_”可能是指一系列关于栈的数据结构问题中的第五个主题,而描述则具体提到了如何使用栈来解决一个特定的算法问题——判断一个字符串是否为回文。回文是一种特殊的字符串,其正读和反读是一样的,比如...

    数据结构:栈子系统.docx

    1. **进栈**(Push):将一个元素压入栈顶。在本例中,`push()`函数接收一个指向`linkStack`类型的指针`p`和一个整数`x`作为参数。它首先创建一个新的`stackNode`,将`x`赋值给新节点的`data`,然后将新节点链接到...

    栈的应用-c++

    1. 创建两个栈,一个用于存储运算符(运算符栈),另一个用于临时存储处理过的中缀表达式的元素(临时栈)。 2. 从左到右扫描中缀表达式中的每一个字符: - 如果是数字,直接将其压入临时栈。 - 如果是运算符,与...

    利用栈求表达式的值,可供小学生作业,并能给出分数

    1. 初始化一个空栈。 2. 从左到右遍历表达式,遇到数字就压入栈,遇到运算符则比较优先级。 3. 当遇到运算符时,根据优先级规则进行运算:如果栈不为空,且当前运算符优先级高于栈顶运算符,或者当前运算符为左括号...

Global site tag (gtag.js) - Google Analytics