用链表实现栈 c 学习数据结构应不应该用stl实现?
c 学习数据结构应不应该用stl实现?
学习数据结构,根据教师的意愿和学校的培训计划,应该由自己来实现,而不是调用现成的STL。
因为STL是一种很好的数据结构:链表、数组、队列、堆栈、集合、双端队列、哈希数组。
自我实现是根据数据结构理论定义mylist、myArray、myqueue、mystack、mydeque、myset、myhashset等。
数据结构已经告诉您这些类应该如何组织内存以及它们应该提供什么操作接口。这是你的工作。
但是,如果老师要求您完成作业或小项目,最好使用您之前定义的课程。如果没有,则调用现有的STL来完成这些项目,这表明您已经理解了数据结构的原理和本质。而且会灵活运用,这次用STL是可以理解的,也意味着你对书本不满意,会主动去学习和实践别人的好容器。这说明你有很强的主动学习和应用能力。
所以,总的来说,你是否使用STL取决于老师作业的内容:
1当你实现一个数据结构时,当然,你可以自己实现它
2当你完成一个相对复杂的任务时,你可以调用现成的。如果你能自己打电话实施,老师当然会很满意的。
链栈的设计与实现?
使用数组:优点:数据连续存储在堆栈区,比堆栈区不连续存储更方便缓存,速度明显更快;另外,数组是高级语言语法中的基本类型,结构简单,有利于编译器做寄存器优化,不断折叠、无用代码简化等,优化速度更快。R缺点:数组大小在编译时是死的(C99有变量数组,但VC不支持,C与之不兼容)。只能在数组打开时存储尽可能多的数据,如果超出限制,则超出范围。另外,栈空间非常宝贵,数组结构所能存储的数据量明显少于链表结构。这就注定了阵列封装的栈不能应用于工程实践。R使用链表:优点和缺点就在上面,反之亦然。实际工程中的解决方案:cstl(可以说是算法和数据结构模板库中的基准)默认使用两个终端队列来封装栈。双端队列的底层由几个不连续的缓冲区组成,但每个缓冲区的内部元素是连续的。这样可以减少内存分配的次数,减少内存碎片,提高缓存命中率,可以说是数组和链表的优点的结合。队列是一种排序表,先进先出。作为一种数据结构,堆栈只能在一个节中删除或插入,所以它是先入后出的。关于队列堆栈的概念我没听太多,链表堆栈(也称为链堆栈)和普通顺序堆栈的区别是“头删除”。链栈采用单链表的形式实现。每次在链表末尾插入和删除时,都需要遍历整个链表以找到尾部节点。在链表的头部进行删除和插入时,只需根据头部指针找到链表的第一个元素节点。队列堆栈应该以队列的形式实现。队列是FIFO。它在表格前面被删除,在后面被插入。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。