小学生版DEV_c++ - 教你不一样的c++
序
什么是数据结构?其实我也不是很了解,刚学,感觉有总结的价值,所以才发布这篇文章。数据结构可以分很多种类,比如说string,queue(队列),stack(栈)都能算。
其实说呢,要是自己写个东西也不难。
下面的话是我做了一个简单的stack程序,自带了清空。(简陋勿喷)
class STACK { private : vector<int >v; int sum=0; public: void push(int a) { v.push_back(a); sum++; } void pop() { v.pop_back(); sum--; } void clear() { while(sizeof(v)) { v.pop_back(); } sum=0; } int top() { return v[sum-1]; } bool empty() { return sum==0; } int size() { return sum; } };
这个网页有点问题,看着就行了
//上面是栈,有操作top(),size(),empty(),clear(),push(),pop()
其实只要你创造一个容器,还创造了它的各种操作方式,我认为就可以叫数据结构(个人理解)
概念
现在我们说一下物理存储结构和逻辑结构
我一看到也是懵。。。。。。
瓦特?物理存储结构?
??????
![]()
瓦特?逻辑结构??????
![]()
然后头脑风暴,想出来了!!!物理存储结构:
盒子。
逻辑结构???
逻辑图。
![]()
有点离谱
![]()
不过没关系,现在引入正题。。。
***********
* O O *
***********
first:物理存储结构:
就是像我的那个STACK,就是物理存储结构。
电脑容器。
second:逻辑结构:
自己想的。
想出来的。
![]()
我也不会啊!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!
初学请不要骂我。。。。。
例子
下来我们可以看看一个例子,有关表达式:①中缀表达式转后缀表达式
我们平时生活中会有很多算式:就像什么1+1的,5+5的,还有各种加减乘除。那么我们可已把它转换成后缀表达式。后缀表达式是一种比较一算的式子。
我们先来看第一个例子:
首先说明下,‘(’优先级是1,‘+,-’是2,‘*,/’是3,‘)’是4
5+10*50/(2+2)
先读入了5
输出:5
栈:
再读入加号,存入栈
输出:5
栈:+
读入10,输出10
输出:5 10
栈:+
读入*
现在栈里有2个运算符号。用top和进来的比较,*优先级更高,压栈。
输出:5 10
栈:+*
读入50
输出:5 10
栈:+ *
读入/
比较,* =/,但是*更早进入,输出*
连着输出+
压栈/
读入(
压栈(
因为有(所以不输出
输出:5 10 50 * +
栈: (/
读入2
输出2
输出:5 10 50 * + 2
栈:(/
读入+,压栈,因为有 ( 不做输出运算。
输出:5 10 50 * + 2
栈:(/+
读入2,输出
输出:5 10 50 * + 2 2
栈:(/+
读入)!!
一见到),输出所有的在(之前的符号(‘(’不输)
输出+
输出/
输出:5 10 50 * + 2 2 + /
栈:
输出结果就是:5 10 50 * + 2 2 + /
那么怎么去计算呢
![]()
很简单:因为我们的后缀表达式有个特性:每两个数一计算,就这么算。
依然是例子:
5 10 50 * + 2 2 + /
提取5
存:5
提取10
存:5 10
提取50
存:5 10 50
提取*
栈内提取50,pop
栈内提取10,pop
10*50=500
压栈
栈:10 500
提取+
栈内提取10,500(都pop)
10+500=510
压栈
栈:510
提取2,压栈
栈:510 2
提取2,压栈
栈:510 2 2
提取+,提取2,2(pop)
2+2=4
压栈
栈:510 4
提取/,提取510 4
510/4=
![]()
算数不好,查了下计算器
你的答案是:
127
或
127.5
为什么有两个答案呢
![]()
![]()
因为你的数据结构不同,整形会出现127
而double会出现127.5
下一期我会出cpp的,文件和代码都会发一遍。
就这么结束吧!
![]()
![]()