队列类链式存储
代码:
linkqueue.hpp
// 队列类 #pragma once #include "linkList.hpp" template <typename T> class linkQueue { public: linkQueue(); ~linkQueue(); public: int clear(); int append(T &t); int retIEve(T &t); int header(T &t); int length(); protected: linkList<T> *m_List; }; template <typename T> linkQueue<T>::linkQueue() { m_List = new linkList < T > ; } template <typename T> linkQueue<T>::~linkQueue() { clear(); delete m_List; m_List = NulL; } template <typename T> int linkQueue<T>::clear() { T t; while (m_List->getLen() > 0) { m_List->del(0,t); } return 0; } template <typename T> int linkQueue<T>::append(T &t) { return m_List->insert(t,m_List->getLen()); } template <typename T> int linkQueue<T>::retIEve(T &t) { return m_List->del(m_List->getLen() - 1,t); } template <typename T> int linkQueue<T>::header(T &t) { return m_List->get(0,t); } template <typename T> int linkQueue<T>::length() { return m_List->getLen(); }
main.cpp
// 队列类测试程序 #include <iostream> #include <cstdio> #include "linkqueue.hpp" using namespace std; struct Student { char name[32]; int age; }; voID play() { Student s1,s2,s3; s1.age = 21; s2.age = 22; s3.age = 23; linkQueue<Student> lq; // 创建队列 lq.append(s1); // 入队列 lq.append(s2); lq.append(s3); Student tmp; lq.header(tmp); cout << "header of queue: " << tmp.age << endl; cout << "length of queue: " << lq.length() << endl; while (lq.length() > 0) { lq.retIEve(tmp); cout << tmp.age << " "; } cout << endl; lq.clear(); } int main() { play(); return 0; }
栈类链式存储
linkstack.hpp
// 栈类 #pragma once #include "linkList.hpp" template <typename T> class linkStack { public: linkStack(); ~linkStack(); public: int clear(); int push(T &t); int pop(T &t); int top(T &t); int size(); protected: linkList<T> *m_List; }; template <typename T> linkStack<T>::linkStack() { m_List = new linkList < T > ; } template <typename T> linkStack<T>::~linkStack() { clear(); delete m_List; m_List = NulL; } template <typename T> int linkStack<T>::clear() { T t; while (m_List->getLen() > 0) { m_List->del(0,t); } return 0; } template <typename T> int linkStack<T>::push(T &t) { return m_List->insert(t,0); } template <typename T> int linkStack<T>::pop(T &t) { return m_List->del(0,t); } template <typename T> int linkStack<T>::top(T &t) { return m_List->get(0,t); } template <typename T> int linkStack<T>::size() { return m_List->getLen(); }
main.cpp
// 链式存储栈类的测试程序 #include <iostream> #include <cstdio> #include "linkstack.hpp" using namespace std; struct Student { char name[32]; int age; }; voID play() { Student s1,s3; s1.age = 21; s2.age = 22; s3.age = 23; linkStack<Student> ls; // 创建栈 // 入栈 ls.push(s1); ls.push(s2); ls.push(s3); // 获取栈顶元素 Student tmp; ls.top(tmp); cout << "top of stack: " << tmp.age << endl; cout << "size of stack: " << ls.size() << endl; // 出栈 while (ls.size() > 0) { ls.pop(tmp); } ls.clear(); } int main() { play(); return 0; }
linkList.h
// 链表类 #pragma once #include <iostream> #include <cstdio> using namespace std; template <typename T> struct Node { T t; Node<T> *next; }; template <typename T> class linkList { public: linkList(); ~linkList(); public: int clear(); int insert(T &t,int pos); int get(int pos,T &t); int del(int pos,T &t); int getLen(); protected: Node<T> *header; int length; }; template <typename T> linkList<T>::linkList() { header = new Node < T > ; header->next = NulL; length = 0; } template <typename T> linkList<T>::~linkList() { Node<T> *tmp = NulL; while (header) { tmp = header->next; delete header; header = tmp; } } template <typename T> int linkList<T>::clear() { ~linkList(); linkList(); return 0; } template <typename T> int linkList<T>::insert(T &t,int pos) { Node<T> *cur = NulL; // 对pos的容错处理 if (pos >= length) { pos = length; } cur = header; for (int i = 0; i < pos; ++i) { cur = cur->next; } // 把上层应用的t结点缓存到容器中 Node<T> *node = new Node < T > ; node->next = NulL; node->t = t; // 把t缓存到容器中 node->next = cur->next; cur->next = node; ++length; return 0; } template <typename T> int linkList<T>::get(int pos,T &t) { Node<T> *cur = NulL; if (pos >= length) { return -1; } cur = header; for (int i = 0; i < pos; ++i) { cur = cur->next; } t = cur->next->t; // 把pos位置的结点赋值给t return 0; } template <typename T> int linkList<T>::del(int pos,T &t) { Node<T> *cur = NulL; if (pos >= length) { return -1; } cur = header; for (int i = 0; i < pos; ++i) { cur = cur->next; } Node<T> *ret = NulL; ret = cur->next; t = ret->t; // 把缓存的结点给上层应用t // 删除 *** 作 cur->next = ret->next; --length; delete ret; // 注意释放内存,因为insert的时候new Node<T> return 0; } template <typename T> int linkList<T>::getLen() { return length; }总结
以上是内存溢出为你收集整理的C++中实现队列类链式存储与栈类链式存储的代码示例全部内容,希望文章能够帮你解决C++中实现队列类链式存储与栈类链式存储的代码示例所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)