将之前定义的栈类和队列类都实现成模板类
栈:
- #include
- #define MAX 128
-
- using namespace std;
-
-
- template<typename T,typename C>
- class Stack
- {
- private:
- T top; //栈顶元素的下标
- C *data; //指向堆区空间
-
-
- public:
- Stack():top(-1),data(new C[MAX]) {} //无参构造
-
- //析构函数
- ~Stack()
- {
- delete[] data;
- cout<<"析构函数"<
- }
- //拷贝构造函数
- Stack(const Stack &other):top(other.top),data(new T(*other.data))
- {
- for(int i=0;i<=top;i++)
- {
- data[i]=other.data[i];
- }
- cout<<"拷贝构造函数"<
- }
- //入栈
- int Stack_push(C e)
- {
- top++;
- data[top]=e;
- cout<<"入栈成功"<
- return 0;
- }
- //出栈
- int Stack_pop()
- {
- top--;
- cout<<"出栈成功"<
- return 0;
- }
- //清空栈
- void Stack_clear()
- {
- top=-1;
- return;
- }
- //判空
- bool Stack_empty()
- {
- return top==-1;
- }
- //判满
- bool Stack_full()
- {
- return top==MAX-1;
- }
- //获取栈顶元素
- C & Stack_top()
- {
- return data[top];
- }
- //求栈的大小
- int Stack_size()
- {
- return top+1;
- }
- };
-
- int main()
- {
- Stack<int,int> n1;
- n1.Stack_push(1);
- n1.Stack_push(2);
- cout<<"栈的大小为"<
Stack_size()< - cout<<"栈顶元素为"<
Stack_top()< - Stack<int,string> n2;
- n2.Stack_push("hello");
- n2.Stack_push(" world");
- cout<<"栈的大小为"<
Stack_size()< - cout<<"栈顶元素为"<
Stack_top()< -
- return 0;
- }
运行结果:
队列:
代码:
- #include
- #define MAX 128
-
- using namespace std;
-
-
- template<typename C>
- class queue
- {
- private:
- int front;
- int tail;
- C data[MAX];
-
-
- public:
-
- //构造函数
- queue():front(0),tail(0)
- {
- cout<<"构造函数"<
- }
- //析构函数
- ~queue()
- {
- cout<<"析构函数"<
- }
- //拷贝构造函数
- queue(const queue &other ):data(new C(*other.data))
- {
- int index=front;
- while(index!=tail)
- {
- data[index]=other.data[index];
- index=(index+1)%128;
- }
- cout<<"拷贝构造函数"<
- }
- //入队
- int queue_push(C e)
- {
- if(queue_full())
- {
- return -1;
- }
- data[tail]=e;
- tail=(tail+1)%128;
- return 0;
-
- }
- //出队
- int queue_pop()
- {
- if(queue_empty())
- {
- return -1;
- }
- front=(front+1)%128;
- return 0;
- }
- //清空队列
- void queue_delete()
- {
- tail=front=0;
- }
- //判空
- bool queue_empty()
- {
- return front==tail;
- }
- //判满
- bool queue_full()
- {
- return (tail+1)%128==front;
- }
- //求队列的大小
- int queue_size()
- {
- return (tail-front+128)%128;
- }
-
- //遍历
- void queue_show()
- {
- for(int i=front;i!=tail;i=(i+1)%128)
- {
- cout<" ";
- }
- putchar(10);
- }
- };
- int main()
- {
- queue<int> n1;
- n1.queue_push(1);
- n1.queue_push(2);
- n1.queue_show();
- queue
n2; - n2.queue_push("hello");
- n2.queue_push(" world");
- n2.queue_show();
- return 0;
- }
运行结果:
-
相关阅读:
Linux - Linux下Java安装路径查找;配置Java环境变量
学生类定义(类和对象)Java
2023年数维杯国际赛B题赛题解题思路+部分代码
el-date-picker的使用,及解决切换type时面板样式错乱问题
Three.js 实现导出模型文件(.glb,.gltf)功能 GLTFExporter
03-JAVA设计模式-访问者模式
Redis入门到通关之Redis数据结构-List篇
CAD快捷键——绘制类
领跑两轮电动车江湖,谁是“关键先生”?
[Linux]Windows使用ssh连接Linux虚拟机(mininet)
-
原文地址:https://blog.csdn.net/cwj442257772/article/details/132863681