DEV_C++之数据结构&物理存储结构&逻辑结构--denguhy--002--

作者在 2019-09-07 16:44:54 发布以下内容

小学生版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()


其实只要你创造一个容器,还创造了它的各种操作方式,我认为就可以叫数据结构(个人理解)


概念

现在我们说一下物理存储结构逻辑结构

我一看到也是懵。。。。。。

瓦特?物理存储结构?

??????

???.png (上传于2019-09-07 17:12:08)
???.png

瓦特?逻辑结构??????

???.png (上传于2019-09-07 17:12:08)
???.png

然后头脑风暴,想出来了!!!物理存储结构:

盒子。

逻辑结构???

逻辑图。

???.png (上传于2019-09-07 17:12:08)
???.png

有点离谱

QQ图片20190907173033.jpg (上传于2019-09-07 17:33:22)
QQ图片20190907173033.jpg

不过没关系,现在引入正题。。。

***********

*    O    O   *

***********

first:物理存储结构:

就是像我的那个STACK,就是物理存储结构。

电脑容器。


second:逻辑结构:

自己想的。

想出来的。

QQ图片20190907173033.jpg (上传于2019-09-07 17:33:22)
QQ图片20190907173033.jpg

我也不会啊!!!!!!!!!!!!!!!!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!

初学请不要骂我。。。。。


例子

下来我们可以看看一个例子,有关表达式:

①中缀表达式转后缀表达式

我们平时生活中会有很多算式:就像什么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 + /


那么怎么去计算呢

???.png (上传于2019-09-07 17:12:08)
???.png

很简单:因为我们的后缀表达式有个特性:每两个数一计算,就这么算。


依然是例子:

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=

QQ图片20190907173033.jpg (上传于2019-09-07 17:33:22)
QQ图片20190907173033.jpg

算数不好,查了下计算器

你的答案是:

127

127.5

为什么有两个答案呢

???.png (上传于2019-09-07 17:12:08)
???.png
t01a8b0718d15bdfb15.jpg (上传于2019-09-07 17:35:20)
t01a8b0718d15bdfb15.jpg

因为你的数据结构不同,整形会出现127

而double会出现127.5

下一期我会出cpp的,文件和代码都会发一遍。


就这么结束吧! 

DEV_c++专题--dengyuhy | 阅读 1897 次
文章评论,共0条
游客请输入验证码
浏览10710次