实现简单的队和栈结构,附代码,图
来源:互联网 发布:c语言中逗号运算符 编辑:程序博客网 时间:2024/05/21 11:17
</pre><span style="font-size:18px;">数据结构相信大家都不陌生<img alt="大笑" src="http://static.blog.csdn.net/xheditor/xheditor_emot/default/laugh.gif" />,经过了多操作多类别的链表,下来是比较简单的栈和队列,栈(FILO),队列(FIFO). </span><p></p><p></p><p><span style="font-size:18px;"><strong>1.栈结构.</strong></span></p><p><span style="font-size:18px;">栈呢,类似于顺序表,可以将你的数据压栈,相当于压在你所创的顺序表的[0]下标处,_top指向你最后一个元素的下一位置。说白了就是对一个动态数组进行操作,_top和定义的_capacity,还有增容函数比较重要,掌握这些就可以编写简单的栈啦。</span></p><p><span style="font-size: 18px;">数据入栈,你的_top就得向上走一位啦,相对的pop一个数据时,_top就得相应的减1。</span></p><p><span style="font-size:18px;">如下图:</span></p><p><img src="http://img.blog.csdn.net/20160407131937184?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></p><p><span style="font-size:18px;">来到代码段</span>:</p><p><pre name="code" class="cpp"><span style="font-size:18px;"><span style="font-size:18px;"></span></span><pre name="code" class="cpp">#include<iostream>#include<assert.h>using namespace std;
<span style="font-size:18px;">template <class T>class stack{public:stack():_top(0),_capacity(0),a(NULL){}//将对象成员初始化~stack(){delete[] a;_top = 0;_capacity = 0;}void checkCapacity(){if(_top==_capacity)//判断容量是否够用,不够则按照下面规则进行增容{T *temp = new T[_capacity*2+1];_capacity=_capacity*2+1;memcpy(temp,a,sizeof(T)*_top);//将原来的复制到新增容空间delete[] a;a = temp;//使原来的指针指向增容后的空间}elsereturn;}void push(T x){checkCapacity();//进行是否需要增容的判断if(_top<=_capacity)//容量够用进行插入{a[_top++]=x;}}void pop(){assert(_top>0);//断言_top>0_top--;}void display(){while(_top){cout<<a[_top-1]<<"->"; //_top 指向最后一个数字的后一位_top--;}cout<<"Nul"<<endl;}private:T *a;int _top;size_t _capacity;};int main(){stack<int> sc;sc.push(1);sc.push(2);sc.push(3);sc.push(4);sc.push(5);sc.push(6);sc.push(6);sc.pop();sc.display();return 0;}</span>2.队列
队列的理解呢,就好比你去食堂打饭,有个先来后到的顺序,你先来那你必定先买到饭,后来的肯定后买到喽。通过概念的理解,这种结构用一个单链表就可以很好的解决问题了,实现先进先出。(注意_head和_tail的操作)
图解:
话不多说上代码:
#include<iostream>#include<assert.h>using namespace std;template<class T>struct Node{Node(const T &x):_data(x),_next(NULL){}T _data;Node<T>* _next;};//定义一个节点的结构体template<class T>class deque{public:deque():_head(NULL),_tail(NULL){}//将头尾初始化void push(const T &x){if(_head==NULL)//判断头是否为空{_head = new Node<T>(x);_tail = _head;}else{Node<T> *tmp;tmp = new Node<T>(x); _tail->_next= tmp;_tail = tmp;//进行尾插}}void pop(){assert(_head!=NULL);//头不能为空if(_head == _tail)//只有一个节点{delete _head;_head = _tail = NULL;}Node<T> *tmp = _head;//定义一个临时变量保存当前头节点_head = _head->_next;delete tmp;}T& GetTail(){return _tail->_data;}void display(){assert(_head!=NULL);while(_head){cout<<_head->_data<<"->";_head=_head->_next;}cout<<"Nul"<<endl;}private:Node<T> *_head;Node<T> *_tail;};int main(){deque<int> d1;d1.push(1);d1.push(2);d1.push(3);d1.push(4);d1.push(5);d1.push(6);d1.pop();d1.display();int t = d1.GetTail();cout<<t<<endl;return 0;}
0 0
- 实现简单的队和栈结构,附代码,图
- 使用J2ME技术实现简单的动画(附代码实现)
- 使用J2ME技术实现简单的动画(附代码实现)
- QT入门笔记--信号和槽(附简单的C++类实现代码)
- 简单的单层神经网络的实现,附代码
- 用java实现简单的网络通信,相当于一个最简单的控制台qq(附代码)
- 栈的链接存储结构--链栈 图解和代码实现
- 栈的链接存储结构--链栈 图解和代码实现
- 树 的 存储结构 和 代码实现
- linux——Shell的控制结构(附shell编写代码和运行结果)
- J2ME 3D学习笔记——实现简单的界面(附代码)
- Linux C++ 一个线程池的简单实现(附代码)
- 多项式除法的实现(附c代码)
- 在线求解关于视图的解决问题,附代码和图
- 局域网聊天软件 简单实现原理(附:代码)
- Spring3步实现定时任务,超简单,附代码实例
- 栈和队列简单代码实现
- Android 中Home键和Back键监听的区别以及代码实现(附源代码)
- 如何在TabBar上自定义添加个性按钮
- opencv环境在QT的配置
- iOS图片裁剪和小图看大图动画
- java导出pdf
- CDMA2000 3G Chat 拨号
- 实现简单的队和栈结构,附代码,图
- HDU 2693 Bone Collector II
- win32下安装mingw32和cmake来编译opencv2.4.9
- 機器學習基石(Machine Learning Foundations) 机器学习基石 作业三 Q13-15 C++实现
- WebRequest请求范例
- Hibernate 下载、安装和使用
- Docker初学
- MFC改变静态控件字体的大小
- HDU 1257 最少拦截系统