Skip to content

Latest commit

 

History

History
112 lines (62 loc) · 3.12 KB

4.基本数据结构一.md

File metadata and controls

112 lines (62 loc) · 3.12 KB

一、线性数据结构 什么是线性数据结构?

简单来说就是:栈,队列,deques(双端队列),列表这一类数据的容器

特点:数据项之间的顺序由添加或删除的顺序决定

一旦一个数据项被添加,它相对于前后元素一直保持该位置不变,像这样的数据结构称之为线性数据结构

线性结构有哪些特点?

线性结构有两端,也称为左右,还可以被称为前后。

如何区分两个线性结构?

通过添加或者移除项的方式,特别是添加和移除项的位置(有的允许从一端添加,另一些允许从另一端移除)

二、 栈 什么是栈?

栈(有时称为“后进先出栈”)是一个项的有序集合,其中添加移除新项总发生在同一端。这一端称为“顶部”,与顶部对应的端称为“底部”

栈的特点:

栈的底部很重要,因为在栈中靠近底部的项是存储时间最长的。最近添加的项是最先会被移除的。这种排序原则有时被称为LIFO,后进先出。

栈的抽象数据类型

栈有以下操作:

Stack()创建一个空的新栈。它不需要参数,并返回一个空栈 push(item)将一个新项添加到栈的顶部,它需要item做参数并不返回任何内容 pop()从栈中删除顶部项。它不需要参数并返回item。栈被修改 peek()从栈返回顶部项,但不会删除它。不需要参数。不修改栈 isEmpty() 测试栈是否为空。不需要参数,返回布尔值 size()返回栈中的item数量。不需要参数,返回一个整数 pythonds

From pythonds.basic.stack import Stack

栈练习一:()匹配 ((1+2)*(3+4)/(5+6)) 计算机

最近开始的符号必须与下一个关闭符号相匹配。

处理的第一个开始符号必须等待直到其匹配最后一个符号

结束符号以相反的顺序匹配开始符号

算法实现

从空栈开始,从左到右处理括号字符串。如果一个符号是一个开始符号,将其作为一个信号,与之对应的结束符号稍后会出现。

如果符号是结束符号,弹出栈,只要弹出栈的开始符号可以匹配每个结束符号,则括号保持匹配状态。如果任何时候栈上没有出现符合开始符号的结束符号,则字符串不匹配。

当所有的符号都被处理后,栈是空的才可以。

​ “(())”

​ “((())”

栈练习二:{[()]}匹配 栈练习三:十进制转换成二进制 计算机中,所有的值都是以0和1存储的

十进制的233:210^2 + 310^1 + 3*10^0

二进制11101001:12^7+12^6+12^5+02^4+12^3+02^2+02^1+12^0

00000111

12^2 + 12^1 + 1*2^0 = 7

十进制 7 转换成8位二进制

“除2法”

7/2 = 商3余1 1

3/2 = 商1 余1 1

1/2 = 商0 余1 1

十进制的233,用8位二进制

233 / 2 = 商116余1 1

116/2 = 商 58 余0 0

58/2 = 商 29 余0 0

29/2 = 商14 余1 1

14/2 = 商7 余0 0

7/2 = 商3余1 1

3/2 = 商1 余1 1

1/2 = 商0 余1 1

11101001 = 12^7+12^6+12^5+02^4+12^3+02^2+02^1+12^0

八进制:0-8 38^2+58^1+1*8^0

十六进制:0-9 + ABCDEF

233 / 16 = 商14 余9 9

14 /16 = 商0 余14 14

1416^1 + 916^0