栈、时间复杂度

ぐ巨炮叔叔 提交于 2020-01-08 16:38:07

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

栈的知识点学习:

使用栈首先需要创建栈对象:Stack stack = new Stack();

栈的基本方法:

置空栈:InitStack(s);

判栈空:StackEmpty(s);

判栈满:StackFull(s);

进栈(在栈中插入或者添加):Push(s,x); //进栈的元素都是排在栈顶的

出栈(删除栈中的元素):Pop(s);删除栈顶的数据,并且返回。栈为空删除则会溢出。

取栈顶元素GetTop(s);栈为空会报溢出错误。

 

时间复杂度:为什么链表的时间复杂度是O(n)呢?而数组的是O(1)呢?

时间复杂度:就是一个算法执行需要消耗的时间。是这个算法每条语句的执行时间之和。

每条语句的执行时间就是这条语句执行的次数 * 执行的一次的时间之和。

(例如数组和链表:10个数据进行查找和修改,数组只执行一次即可,时间为10秒。而链表需要通过指针依次执行,若该值在第九位则执行了九(n)次,时间为90秒)。

链表和数组的性质区分:

数组是静态数据结构,链表是动态数据结构。

由于链表是空间不连续的,所以链表查找值是需要从头或者尾依次访问判断,语句需要执行n次。不像数组是在一块连续空间,语句只执行1次。

从具体实现上来看:链表是在不连续的空间内,需要靠指针来依次递进的判断来获取,数组是在一块连续的空间内,只需要访问一次即可得到想要获取的元素。

结论:链表需要靠指针依次访问和判断,所以执行了n次,所以时间复杂度是O(n),而数组则是在一块连续的空间进行判断。不论数组多长都只需要执行一次,时间复杂度为O(1)。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!