前言:找了上课时数据结构的教程来看,但是用的语言是c++,所以具体实现在网上搜大神的博客来看,我看到的大神们的博客都写得特别好,不止讲了最基本的思想和算法实现,更多的是侧重于实例运用,一边看一边在心里隐隐歌颂大神的厉害,然后别人的厉害不是我的,所以到底看得各种受打击+头昏脑涨,写 ...
前言:找了上课时数据结构的教程来看,但是用的语言是c++,所以具体实现在网上搜大神的博客来看,我看到的大神们的博客都写得特别好,不止讲了最基本的思想和算法实现,更多的是侧重于实例运用,一边看一边在心里隐隐歌颂大神的厉害,然后别人的厉害不是我的,所以到底看得各种受打击+头昏脑涨,写这个系列是希望自己能够总结学到东一块、西一下的知识,因为水平有限+经验不足,所以在此只说最基础的思想,附上我自己的算法实现(肯定还有更优解),如果要想看进阶版的,可以在园里搜“数据结构”,各种语言实现和进阶提升的文章有很多,希望大家都能尽快打败数据结构这个纸老虎~
参考书是:数据结构(c++版)(第2版) 编者:王红梅、胡明、王涛
正文:
热身准备:
1、根据数据元素之间的不同关系,数据结构可以分为以下四种:
(1)集合:数据元素之间的关系就是“属于同一集合”,除此之外,没有其他关系。(此关系过于简单,就不详述了)
(2)线性结构:数据元素之间存在“一对一”的线性关系。
(3)树结构:数据元素之间存在“一对多”的层级关系。
(4)图结构:数据元素之间存在“多对多”的任意关系。
2、数据结构在计算机中的存储方式,主要有两种:顺序存储和链接存储。
3、线性结构在计算机中的实现,即线性表。当然根据存储方式的不同又可以分为:顺序表和链表。
(1)顺序表:用一段地址连续的存储单元依次存储线性表的数据元素。通常用一维数组来实现。其数据元素间的关系由下标表现。
(2)链表:最常见的是单链表。单链表是用一组任意的存储单元存放数据元素。其数据元素间的关系由指针表现。除去单链表外,常见的还有循环链表和双链表,都是在单链表的基础上增加了更多信 息,便于实现某些操作。
开始运动:
栈和队列都是某些功能受限制的线性表,所以它们有线性表的基本性质,但是更特别,也正是它们的特别之处才使得它们脱颖而出。
栈:限定仅在表尾进行插入和删除操作的线性表,允许插入和删除的一端成为栈顶,另一端称为栈底,不含任何元素的栈称为空栈。
栈具有FILO(first in last out)即先进后出的特性。
1、栈的基本操作:
push
前置条件:栈已存在
输入:元素值x
功能:入栈操作,在栈顶插入一个元素x
输出:如果插入不成功,则抛出异常
后置条件:如果插入成功,则栈顶增加一个元素
pop
前置条件:栈已存在
输入:无
功能:出栈操作,删除栈顶元素
输出:如果删除成功,返回被删除元素,否则抛出异常
后置条件:如果删除成功,则栈顶减少一个元素
getTop
前置条件:栈已存在
输入:无
功能:取栈顶元素,读取当前的栈顶元素
输出:如栈不空,返回当前的栈顶元素
后置条件:栈不变
2、顺序栈
function SeqStack(){ this._stack = []; //栈 this._top = -1; //栈顶指针}SeqStack.prototype = { _push:function(x){
原标题:用JS描述的数据结构及算法表示——栈和队列(基础版)
关键词:JS
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。