C语言利用模板实现简单的栈类
更新时间:2020年4月25日 17:26 点击:2090
本文实例为大家分享了C语言利用模板实现简单的栈类(数组和单链表),供大家参考,具体内容如下
主要的功能是实现一个后进先出的列表,有入栈、出栈、返回大小、判空等基本功能
#pragma once using namespace std; const int MAXSIZE = 0xfff; template<class type> class Class_Linkstack { int top; type* my_s; int max_size; public: Class_Linkstack() :top(-1), max_size(MAXSIZE) { my_s = new type[max_size]; if (my_s == NULL) { cerr << "动态存储分配失败!" << endl; exit(1); } } Class_Linkstack(int size) :top(-1), max_size(size) { my_s = new type[size]; if (my_s == NULL) { cerr << "动态存储分配失败!" << endl; exit(1); } } ~Class_Linkstack() { delete[] my_s; } bool Empty_Linkstack(); void Push_Linkstack(type tp); void Pop_Linkstack(); type Top_Linkstack(); int Size_Linkstack(); void Print_Linkstack(); }; template<class type> void Class_Linkstack<type>::Print_Linkstack() { if (top == -1) cout << "空栈" << endl; else { for (int i = 0; i < top+1; i++) cout << my_s[i] << '\t'; } } template<class type> bool Class_Linkstack<type>::Empty_Linkstack() { if (top == -1) return true; else { return false; } } template<class type> void Class_Linkstack<type>::Push_Linkstack(type tp) { if (top + 1 < max_size) my_s[++top] = tp; else { cout << "栈已满" << endl; exit(1); } } template<class type> void Class_Linkstack<type>::Pop_Linkstack() { if (top == -1) { cout << "为空栈" << endl; exit(1); } else { my_s[top--] = 0; } } template<class type> type Class_Linkstack<type>::Top_Linkstack() { if (top != -1) return my_s[top]; else { cout << "为空栈" << endl; exit(1); } } template<class type> int Class_Linkstack<type>::Size_Linkstack() { return top + 1; }
测试代码
#include "Class_Linkstack.h" int main() { Class_Linkstack<int> sk1(5); for (int i = 0; i < 5;i++ ) sk1.Push_Linkstack(i * 2 + 1); sk1.Print_Linkstack(); system("pause"); return 0; }
补充(通过单链表实现)
上面是通过数组来实现,与数组相比,链表实现更灵活,更容易增删元素。
单链表实现的核心思想是不断更新栈顶指针,来实现出栈压栈,每一个节点是一个结构体,包含一个value和一个next指针指向下一个元素,初始化时将栈顶指针置为NULL。
#pragma once using namespace std; template<class type> struct listnode { type value; listnode* next; listnode(type v,listnode* p):value(v),next(p){ } }; template<class type> class List_stack { listnode<type>* top; int size = 0; public: List_stack(); void Push(type &tp); void Pop(); bool Empty(); int Size(); void Print(); ~List_stack() { while (top) { listnode<type> * p = top; top = top->next; delete p; } } }; template<class type> bool List_stack<type>::Empty() { if (top == NULL) return true; else { return false; } } template<class type> List_stack<type>::List_stack() { top = NULL; size = 0; } template<class type> void List_stack<type>::Push(type &tp) { listnode<type> *tmp=new listnode<type>(tp,top); top = tmp; size++; } template<class type> void List_stack<type>::Pop() { if (top == NULL) { cout << "为空栈" << endl; } else { top = top->next; size--; } } template<class type> int List_stack<type>::Size() { return size; } template<class type> void List_stack<type>::Print() { listnode<type>* tmp = top; while (tmp != NULL) { cout << tmp->value << '\t'; tmp = tmp->next; } }
简单测试:
int main() { List_stack<int> ls; for (int i = 0; i < 5; i++) ls.Push(i); ls.Print(); ls.Pop(); ls.Pop(); cout << endl; ls.Print(); cout << endl; cout << ls.Size(); system("pause"); return 0; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持猪先飞。
上一篇: C++构造函数和析构函数的使用与讲解
下一篇: C++关于引用作为函数的用法
相关文章
- 这篇文章主要为大家详细介绍了C语言实现放烟花的程序,有音乐播放,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-23
- 本篇文章主要介绍C语言中char的知识,并附有代码实例,以便大家在学习的时候更好的理解,有需要的可以看一下...2020-04-25
- 这篇文章主要介绍了详解如何将c语言文件打包成exe可执行程序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-25
- free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下...2020-04-25
深入解析WordPress中加载模板的get_template_part函数
这篇文章主要介绍了WordPress中加载模板的get_template_part函数,其中重点讲解了其函数钩子的使用,需要的朋友可以参考下...2016-01-14- 这篇文章主要介绍了C语言中计算正弦的相关函数总结,包括正弦和双曲线正弦以及反正弦的函数,需要的朋友可以参考下...2020-04-25
详解C语言中的rename()函数和remove()函数的使用方法
这篇文章主要介绍了详解C语言中的rename()函数和remove()函数的使用方法,是C语言入门学习中的基础知识,需要的朋友可以参考下...2020-04-25- 这篇文章主要介绍了C语言中求和、计算平均值、方差和标准差的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-12-10
- mysql安装成功后有几个默认的配置模板,列表如下: my-huge.cnf : 用于高端产品服务器,包括1到2GB RAM,主要运行mysql my-innodb-heavy-4G.ini : 用于只有innodb的安装,最多有4GB RAM,支持大的查询和低流量 my-large.cnf : 用于...2015-03-15
- 本篇文章主要讲解C语言 基本语法,这里提供简单的示例和代码来详细讲解C语言的基本语法,开始学习C语言的朋友可以看一下,希望能够给你带来帮助...2021-09-18
- 1、简介Smarty是一个使用PHP写出来的模板PHP模板引擎,是目前业界最著名的PHP模板引擎之一。它分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与HTML代码混杂在一起PHP代码逻辑分离。简单的讲,目...2014-05-31
- 这篇文章主要介绍了C语言中send()函数和sendto()函数的使用方法,是C语言入门学习中的基础知识,需要的朋友可以参考下...2020-04-25
- 这篇文章主要为大家详细介绍了Ionic默认的Tabs模板使用实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-09-01
- 今天小编就为大家分享一篇C语言实现从文件读入一个3*3数组,并计算每行的平均值,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-25
- 这篇文章主要介绍了C语言中memcpy 函数的用法详解的相关资料,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了使用C语言操作文件的基本函数整理,包括创建和打开以及关闭文件的操作方法,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了C语言中查找字符在字符串中出现的位置的方法,分别是strchr()函数和strrchr()函数的使用,需要的朋友可以参考下...2020-04-25
- 很多同学在学习c语言的时候是不是会碰到a++和++a都有甚么作用啊。今天我们就来探讨下...2020-04-25
- 这篇文章主要介绍了Springboot使用thymeleaf动态模板实现刷新,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-08-31
- 这篇文章主要对C语言中const关键字的用法进行了详细的分析介绍,需要的朋友可以参考下...2020-04-25