计算机程序离不开算法和数据结构,在数据结构算法应用中,栈和队列应用你比较广泛,因为两者在数据存放和读取方面效率比较高,本章节重点讲解两者的基本概念和实现。

栈:是一种先进后出,后进先出的数据结构,本质上是线性表,只是限制仅允许在表的一段进行插入和删除工作。此端为栈顶,这是在栈中应用很关键的概念。所有数据的处理都是在栈顶进行的,进栈时,栈中元素增加,栈顶上移一位,出栈时栈顶下移一位。应用中比如:洗碗,每次洗干净的碗放在上面-进栈,取碗,从顶上取出一个-出栈;装子弹-进栈,开枪-出栈。

队列:是一种先进先出的数据结构,同样是线性表,允许在表一段进行插入(队尾),而表的另一端进行删除工作(队头)。应用中比如:购物-先到的先购物,晚到的在队尾后买物品。

浅谈数据结构系列 栈和队列

存储结构

因为在c++中已经有实现的stack和queue,我们就以程序中封装的程序进行解读。

1、顺序存储结构

数组本质上是顺序存储结构,所以在栈和队列的顺序存储结构上的实现,用数组实现即可,也就是在数组基础上进行二次封装,也就意味着会有溢出的现象。

a.栈的顺序存储结构

:push,直接添加一个元素s[n]到数组,pop直接返回s[n-1]

浅谈数据结构系列 栈和队列

 1 template<typename T>
 2 class MyStack
 3 {
 4      T item[] ;
 5      int number;
 6      int Max;
 7     MyStack()
 8     {
 9         Max= 20;
10         item = T[20];
11         number = 0;
12     }
13     //入栈
14     void MyStack::Push(T _item)
15     {
16         //如果超过数组大小,则重新申请控件
17         if (number == Max) Resize(2 * Max);
18         //number记录数组中个数,同时将push的元素放在数组最后面。先赋值然后number++.
19         item[number++] = _item;
20     }
21     //出栈
22      T MyStack::Pop()
23     {
24         //先——再获取元素.
25         T temp = item[--number];
26         //其他设置为kong
27         item[number] = default(T);
28         if (number > 0 && number == Max / 4) Resize(Max / 2);
29         return temp;
30     }
31 
32      void MyStack::Resize(int capacity)
33     {
34         T[] temp = new T[capacity];
35         for (int i = 0; i < Max; i++)
36         {
37             temp[i] = item[i];
38         }
39         item = temp;
40     }
41 };
View Code

相关文章:

  • 2022-01-28
  • 2021-11-27
  • 2022-01-17
  • 2021-08-24
  • 2021-11-26
  • 2021-07-31
猜你喜欢
  • 2021-10-18
  • 2021-06-13
  • 2021-08-09
  • 2021-09-12
  • 2021-11-30
  • 2019-10-31
  • 2021-11-15
相关资源
相似解决方案