精华内容
参与话题
问答
  • // 利用栈的数据结构特点完成表达式的运算 // // Created by 柯木超 on 2018/12/4. // Copyright © 2018 柯木超. All rights reserved. // #include <iostream> #define maxsize 20 /** 解决思路...
    
    //
    //  main.cpp
    //  利用栈的数据结构特点完成表达式的运算
    //
    //  Created by 柯木超 on 2018/12/4.
    //  Copyright © 2018 柯木超. All rights reserved.
    //
    
    #include <iostream>
    
    #define maxsize 20
    
    /**
     解决思路:
     1、自左向右扫描表达式,凡是遇到操作数一律进操作数栈
     2、当遇到运算符时候,如果他的优先级比运算符栈的栈顶元素(它前面的那个操作符)的优先级低,就取出栈顶运算符和两个连续的操作数进行运算,并将结果存入操作数栈,然后继续比较该运算符与栈顶运算符(它前面的那个操作符)的优先级,反之,就进栈保存,继续往下扫描
     3、如果遇到左括号,一律进运算符栈,右括号一律不进运算符栈,而是取出运算符栈的栈顶运算符和操作数栈的两个操作数进行运算,并将结果押入操作数栈,直到取出左括号为止
     
     第一个例子:a + b * c,我们从前向后扫描,遇到a,压到操作数栈里,遇到 + ,压到操作符栈里,下一个是 b,此时,我们是不能像后缀表达式求值那样,直接计算 a + b,然后压栈的。因为我们不确定,b 是否会先参与后面的运算,所以我们只能把 b 先压栈,继续向后扫描。看到 * 以后,再把 * 压到操作符栈里;看到 c 以后,也要把 c 先压栈,理由与 b 压栈相同。接下来,再往下扫描,就发现已经到了末尾了。那我们就可以放心地从操作符栈里取出顶上的操作符,在这个例子中,就是 *,然后再从操作数栈里取出两个操作数,就是 b 和 c,然后把b和c的积,不妨记为d,放到操作数栈里。接下来,再去看操作符栈里,还有一个 +,那就把 + 取出来,然后去操作数栈里取出 a 和 d,计算它们的和,这就是最终的结果了。
     
     第二个例子:a + b + c,我们从前向后扫描,遇到a,压到操作数栈里,遇到 + ,压到操作符栈里,下一个是 b,压到操作数栈里。再下一个,又是 + ,由于加法的结合律,我们知道,先把a + b 的结果计算出来,或者后计算,都不会影响最终的结果。所以我们就把能做的化简先做掉。就是说,在扫描到第二个操作符是 + 以后,我们就把第一个操作符取出来,再把两个操作数取出来,求和并且把和送到操作数栈里。接下来的过程与第一个例子是相同的,不再赘述了
     
     总的来说就是:
     一个操作符究竟什么时候进行运算,并不取决于它前面的那个操作符是什么,而是取决于它后面的那个操作符是什么。更具体一点讲:如果后面的操作符的运算优化级比前面的操作符高,那么前面的操作符就必须延迟计算;如果后面的操作符优化级比前面的低或者相等,那么前面的操作符就可以进行计算了
     
     参考文章:https://zhuanlan.zhihu.com/p/24556103
     **/
    
    
    // 数据栈
    typedef struct {
        int data[maxsize];
        int top;
    }dataStask, *seqDataStask;
    
    // 运算符栈
    typedef struct {
        int data[maxsize];
        int top;
    }operatorStask, *seqOperatorStask;
    
    // 创建空栈
    seqDataStask createStask(){
        seqDataStask L = (seqDataStask)malloc(sizeof(dataStask));
        L->top = -1;
        return L;
    }
    
    //  设置空栈
    seqDataStask setNULLStask(seqDataStask L){
        L->top = -1;
        return L;
    }
    
    // 元素入栈
    seqDataStask pushStask(seqDataStask L, int data){
        
        L->data[L->top] = data;
        L->top++;
        
        return L;
    }
    
    // 元素出栈
    seqDataStask popStask(seqDataStask L, int data){
        
        L->data[L->top] = data;
        L->top--;
        
        return L;
    }
    
    // 获取运算符的优先级
    int getPri(char cp){
        switch (cp) {
            case '+':
            case '-':
                return 1;
                break;
            case '*':
            case '/':
                return 2;
            case '(':
                return 3;
            default:
                break;
        }
        return 0;
    }
    
    int main(int argc, const char * argv[]) {
        
        return 0;
    }
    
    
    // 未完,待续

     

    展开全文
  • 栈(stack)又名堆栈,它是一种运算受限的线性表,下面这篇文章主要给大家介绍了关于利用JavaScript实现栈的数据结构的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
  • 利用栈的括号匹配算法 C语言数据结构 利用栈的括号匹配算法 C语言数据结构
  • 利用栈数据结构解决括号匹配问题 题目描述: 在文字处理软件或编译程序设计时,常常需要检查一个字符串或一个 表达式中括号是否相匹配?利用数据结构的“栈”机制,设计算法并 编写程序,判断表达式中括号匹配问题...

    利用栈数据结构解决括号匹配问题
    题目描述:
    在文字处理软件或编译程序设计时,常常需要检查一个字符串或一个
    表达式中的括号是否相匹配?利用数据结构的“栈”机制,设计算法并
    编写程序,判断表达式中括号匹配问题。(了解“栈” 的定义)
    题目描述:输入算术表达式 A,以#键结束。其中包括:整数、四则运
    算符,和六种括号“(”, “)”, “[”, “]” , “{”, “}”,请你利
    用数据结构的“栈”机制设计算法并编写程序,检查算术表达式 A 的
    括号是否匹配,如果匹配输出“括号匹配成功”,否则输出“括号匹配
    失败”。
    样例 1: 8*(3+3)/5*[9-3]+9#
    输出:括号匹配成功
    样例 2: 8*(9-6)/5*[3+3*{9-5}]#
    输出:括号匹配成功
    样例 2: 8*(9-6)/5][3+3{9-5}#
    输出:括号匹配失败

    源程序编码如下:
    #include
    #include
    using namespace std;

    int main()
    {string s;
    int n=0;
    while ( cin>>s[n]&&s[n]!= ‘#’)
    {
    n++;
    }

    stack<char> brackets;
    int i=0;
    for(i=0;i<s.length();i++)
     {      if(s[i]=='('||s[i]=='['||s[i]=='{')
               brackets.push(s[i]);
            if(s[i]==')')
            {if(brackets.empty()){
                    cout<<"NO!"<<endl;
                return 0;}
                if(brackets.top()=='(')
            brackets.pop();
                else {cout<<"NO!"<<endl;
                return 0;}
            }
            if(s[i]==']')
            {if(brackets.empty()){
                    cout<<"NO!"<<endl;
                return 0;}
                if(brackets.top()=='[')
            brackets.pop();
                else {cout<<"NO!"<<endl;
                return 0;}
            }
            if(s[i]=='}')
            {if(brackets.empty()){
                    cout<<"NO!"<<endl;
                return 0;}
                if(brackets.top()=='{')
            brackets.pop();
                else {cout<<"NO!"<<endl;
                return 0;}
            }
    }
    if(!brackets.empty()) cout<<"NO!"<<endl;
    else cout<<"Yes!"<<endl;
    return 0;
    

    }

    使用说明:
    输入任意算术表达式,检验其中的括号是否匹配,中括号套在大括号外面也算正确。#之后的表达式不再检查。

    重点:
    1.了解栈的用法;
    定义栈:
    #include
    stack a;
    出栈 a.pop()
    入栈 a.push()
    返回栈顶元素 a.top()
    返回栈是否为空 a.empty()

    展开全文
  • - PAGE PAGE 2 欢迎下载 北京邮电大学电信工程学院 第 PAGE 1页 数据结构实验报告 实验名称 实验二利用栈结构实现八皇后问题 学生姓名 班 级 班内序号 学 号 日 期 2013年11月21日 实验要求 1实验目的 通过选择下面...
  • 利用栈的数据结构特性实现{}是否闭合 栈的数据结构 的特点 先进后出 用javascript 实现栈结构的特性 class Stack { constructor() { this._items = []; // 储存数据 } // 向栈内压入一个元素 push(item) { ...

    利用栈的数据结构特性实现{}是否闭合

    栈的数据结构 的特点 先进后出
    用javascript 实现栈结构的特性

    class Stack {
        constructor() {
          this._items = []; // 储存数据
        }
        // 向栈内压入一个元素
        push(item) {
          this._items.push(item);
        }
        // 把栈顶元素弹出
        pop() {
          return this._items.pop();
        }
        // 返回栈顶元素
        peek() {
          return this._items[this._items.length - 1];
        }
        // 判断栈是否为空
        isEmpty() {
          return !this._items.length;
        }
        // 栈元素个数
        size() {
          return this._items.length;
        }
        // 清空栈
        clear() {
          this._items = [];
        }
    }
    
    // 1 遍历数组中的每一项
    // 2 判断 每次入栈的元素 是否是 “{” 如果是 就 入栈  
    // 3 如果下次入栈的是 } 就 删除 栈中的最后一项 
    // 4 遍历完成后 判断 stack.length  为0 就是闭合的 其中首次入栈的是 “}” 就直接 返回 false 
    function isBanlanced(str) {
            let arr = [...str]; // 把字符串转化为数组
            let stack = [];		// 创建一个数组
            for (let i = 0; i < arr.length; i++) { 
                if (arr[i] == "{") { 
                    stack.push("{");
                } else if (arr[i] == "}") {
                    if (stack.length === 0) {
                        return false;
                    }
                    stack.pop();
                }
            }
     
            return stack.length === 0;
        }
     
        console.log(isBanlanced("{{{{{}}"));  // false
        console.log(isBanlanced("{}{}{{}}"));  // true
        console.log(isBanlanced(""));  // true
    
    展开全文
  • 使用栈结构完成字符串倒序,。 使用islower,isupper,isalpha等函数完成相关大小写判断 #include<iostream> #include<string> #include<stack> using namespace std; string trans(string s,...
    1. 使用栈结构完成字符串的倒序,。
    2. 使用islower,isupper,isalpha等函数完成相关的大小写判断
    #include<iostream>
    #include<string>
    #include<stack>
    using namespace std;
    string trans(string s, int n) {
    	// write code here
    	stack<string> line;
    	string word;
    	for (auto &temp : s) {
    		if (isspace(temp)) {
    			if (!word.empty())
    				line.push(word);
    			line.push(" ");
    			word.clear();
    		}
    		else if (isalpha(temp)) {//判断如果是字母
    			if (islower(temp))
    				temp = toupper(temp);
    			else if (isupper(temp))
    				temp = tolower(temp);
    			word += temp;
    		}
    	}
    	line.push(word);//这句话很关键,如果字符的结尾没有空格的话,要把最后一个单词进栈。
    	string result,top_str;
    	while (!line.empty()) {    //出栈操作
    		top_str = line.top();
    		result = result + top_str;
    		line.pop();
    	}
    	return result;
    }
    int main() {
    	string a{ "hello world" };
    	cout<<trans(a, 12);
    	return 0;
    }

     

    展开全文
  • 2. 利用栈的数据结构实现一个简单的4则运算计算器(不需要支持括号)。例如, 分析5 * 2 + 3 * 4的执行过程,输出进出栈的顺序(提示:中间结果得到后可继续push到栈中)。 最好能写出代码 并加注释 c语言 不是...
  • 利用栈实现一个简易计算器 实现了加减乘除运算(没有使用STL) 基本思想: 1.一个数据栈,一个符号栈 2.优先级判断 3.负号和减号判别与处理 4.括号匹配 代码如下: #include&lt;iostream&gt; #...
  • 有趣的数据结构算法9——利用栈完成2进制到8进制的转换解题思路实现代码GITHUB下载连接 刚学习完栈的我想试试栈都可以干嘛,于是找到了一个小应用,利用栈完成2进制到8进制的转换。如果大家还不清楚什么是栈、如何...
  • 编写一个程序,利用栈的结构,将二进制数转换为十进制数,
  • 数据结构

    2018-02-15 11:21:39
    利用栈的数据结构,将二进制转换为十进制 首先初始化创建一个栈 然后通过循环语句输入二进制0/1,用’#”作为结束标志。在输入的过程,用push()将二进制字符串从高位到低位顺序压栈 输入完毕,用StackLen()函数...
  • 利用栈实现表达式计算: 例如:12*(5+69)+78+(5-6*8+5/6)*12 要解决问题主要有两个: × , ÷ 和 + , - 运算顺序处理问题 括号内表达式优先运算问题 这里利用栈来解决这两个问题 首先我们设置两个栈,...
  • 最近刚开始学数据结构,发现数据结构真是个神奇的东西哈,很多现实中的问题都可以用不同的数据结构来解决,比如利用和栈中缀表达式编写一个计算机程序,利用栈破解迷宫游戏,今天我就来跟大家分享一下如何利用栈来...
  • 栈的简介 栈作为一种数据结构,是一种只能在一端进行插入和删除操作。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来...
  • 利用顺序这种数据结构来设计一个计算器,实现利用后缀表达式来计算含+,-,*,/表达式
  • 利用栈实现简单括号匹配 利用python实现栈 括号匹配代码: from pythonds.basic.stack import Stack def parChecker(symbolString): s = Stack() for symbol in symbolString: if symbol
  • 栈的数据结构定义: //简单版 typedef struct{ char data[MaxSize]; int top; }SqStack; //严格按照严版教材版 typedef int SElemType;//顺序栈元素类型定义 typedef struct {//顺序栈元素结构 SElemType* base; ...
  • 利用栈求表达式值,可供小学生作业,并能给出分数。 完整课程设计报告,源程序代码.
  • 栈的特点和队列相反,先进后出. 可以把队列类比于一个两头通透的通道,一端进入另一端拿出. 而栈是一个一头封闭的通道,从一端压入一端拿出. 下面是基于数组的实现, import java.util.List; /** * @Project: ...
  • 程序如下:(当程序执行后,比如数个1348,结果无限返回2,,是什么问题呢,,跪求大佬。) #include #include #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef int ElemType; ...
  • 数据结构学习笔记:利用Python列表实现结构 利用Python列表实现结构。有两种实现方式: 1、将列表末尾(rear)作为栈顶(top) 2、将列表前端(front)作为栈顶(top) 一、将列表末尾(rear)作为...
  • **后缀表达式运算过程**:遇到数字入栈,遇到运算符从中弹出两个元素,结算结果,结果入栈,继续扫描. **中缀转后缀**: ``` 1. 扫描字符串,遇到数字,入队 2. 遇到符号 2.1 如果为空则入栈 2.2 符号为左括号则...
  • 首先地图是采用深度优先算法(对每一个可能分支路径深入到不能再深入为止,而且每个节点只能访问一次)来实现,具体如上课所说用先入后出的栈来找各种路线并且记录下来,生成各种线路 2、具体实现 1、奇数行...
  • 双端栈是为了更有效的利用栈的空间而产生的。 双端栈是一种特殊的顺序栈。 双端栈适用于一组互补的数据。 双端栈两端为底,2个整形表示栈顶指针。 代码收获 主要还是弄清双端栈的结构。 #include &...
  • 利用栈将递归转换为非递归 对于一般的递归过程,仿照递归算法执行过程中递归工作栈的状态变化,可直接写出相应的非递归算法。 步骤 第一次调用的参数push进堆栈,原有递归代码外层加一个while循环,判断条件就是...
  • 福州大学数计学院 数据结构上机实验报告 专业和班级信息计算科学与应用数学 6 班 学号 姓名 成绩 实验名 栈队列 实验内容 利用栈实现迷宫求解 称 实验目的 应用栈结构来解决应用问题加深对栈结构特点认识和应用 实...
  • 利用两种不同的数据结构实现双端,即一个存储空间存放两个不同的 1.利用数组实现双端(两个相向生长) 2.利用双端队列deque实现双端(两个反向生长) 利用两种不同的数据结构实现双端,即一个...

空空如也

1 2 3 4 5 ... 20
收藏数 2,450
精华内容 980
关键字:

利用栈的数据结构

数据结构 订阅