网站搭建教程导航类,无锡做网站的公司电话,python做网站 要学多久,网页设计html代码大全美食stack栈类
stack.h
#ifndef STACK_H
#define STACK_H
#include iostream
#includestring
using namespace std;
//自行封装一个栈的类#xff0c;包含私有成员属性:栈的数组、记录栈顶的变量
//成员函数完成:
//构造函数、析构函数、拷贝构造函数
//入栈、出…stack栈类
stack.h
#ifndef STACK_H
#define STACK_H
#include iostream
#includestring
using namespace std;
//自行封装一个栈的类包含私有成员属性:栈的数组、记录栈顶的变量
//成员函数完成:
//构造函数、析构函数、拷贝构造函数
//入栈、出栈、清空栈、判空、判满、获取栈顶元素、求栈的大小template class T
class Mystack
{
private:T *arr;int top;int size;
public://无参构造函数Mystack(){this-size 100;this-arr new T[size];this-top -1;}//有参构造函数Mystack(int arrnum){this-size arrnum;this-arr new T[arrnum];this-top -1;}//拷贝构造函数Mystack(const Mystack stk){this-size stk.size;coutthis-size stk.sizeendl;this-arr new T[size];for(int i 0 ; istk.top ; i){*(arri) *(stk.arri);}this-top stk.top;cout1top:this-top stk.topendl;}//拷贝赋值函数Mystack operator(const Mystack stk){this-size stk.size;this-arr new T[size];for(int i 0 ; istk.top ; i){*(arri) *(stk.arri);}this-top stk.top;return *this;}//析构函数~Mystack(){delete arr;}int getTop() const;//判空bool empty();//判满bool full();//入栈void push(T elem);//出栈void pop();//获取栈顶元素T topelem();//求栈大小int stksize();
};
#endif // STACK_Hmain.cpp
#include stack.cpp
//int类型
void test()
{coutstk1:endl;Mystackint stk(100);for(int i 0 ; i10;i)stk.push(i1);coutstk的栈顶元素stk.topelem()endl;coutstk的大小stk.stksize()endl;stk.pop();coutstk的栈顶元素stk.topelem()endl;coutstk的大小stk.stksize()endl;coutstk2:endl;Mystackint stk2(stk);coutstk2的栈顶元素stk2.topelem()endl;coutstk2的大小stk2.stksize()endl;stk2.pop();coutstk2的栈顶元素stk2.topelem()endl;coutstk2的大小stk2.stksize()endl;
}//string类型
void test2()
{Mystackstring stk(10);stk.push(1);stk.push(2);stk.push(3);stk.push(4);stk.push(5);stk.push(6);coutstk.topelem()endl;coutstk.stksize()endl;stk.pop();coutstk.topelem()endl;coutstk.stksize()endl;}
int main()
{test();//test2();return 0;
}queue.cpp
#includestack.htemplate class T
int MystackT::getTop() const
{return top;
}template class T
bool MystackT::empty()
{if(top -1)return true;return false;
}template class T
bool MystackT::full()
{if(top size-1)return true;return false;
}
//入栈
template class T
void MystackT::push(T elem)
{if(full())return;top top 1;this-arr[top] elem;}
//出栈
template class T
void MystackT::pop()
{if(empty())return;this-top--;
}//获取栈顶元素
template class T
T MystackT::topelem()
{return *(arrtop);
}//求栈大小
template class T
int MystackT::stksize()
{return this-top1;
}queue队列
queue.h
#ifndef QUEUE_H
#define QUEUE_H
#include iostream
//自行封装一个循环顺序队列的类包含私有成员属性:存放队列的数组、队头位置、队尾位置
//成员函数完成:构造函数、析构函数、拷贝构造函数、入队、出队、清空队列、判空、判满、求队列大小
using namespace std;
template class T
class Queue
{
private:T *arr;int head;int tail;int size;
public://无参构造Queue();//有参构造Queue(int elemnum);//拷贝构造Queue(const Queue q);//拷贝赋值函数void operator(Queue q);//析构函数~Queue();//判空bool empty();//判满bool full();//入队void push(T elem);//出队void pop();//清空队列void clear();//求队列大小int queuesize();//返回最后一个元素T* back();//返回第一个元素T* front();
};
#endif // QUEUE_Hmain.cpp
#includequeue.cppvoid test()
{Queueint q1(20);for(int i 0;i 10;i){q1.push(i1);}cout第一个元素: *q1.front()endl;cout最后一个元素: *q1.back()endl;q1.pop();cout第一个元素: *q1.front()endl;cout最后一个元素: *q1.back()endl;Queueint q2(q1);coutq2的第一个元素: *q2.front()endl;coutq2的最后一个元素: *q2.back()endl;Queueint q3;q3 q1;coutq3的第一个元素: *q3.front()endl;coutq3的最后一个元素: *q3.back()endl;
}
int main()
{test();return 0;
}
queue.cpp
#includequeue.h
//无参构造
template class T
QueueT::Queue():arr(new T[100]),head(0),tail(0),size(100)
{
}
//有参构造
template class T
QueueT::Queue(int elemnum):arr(new T[elemnum]),head(0),tail(0),size(elemnum)
{
}
//拷贝构造
template class T
QueueT::Queue(const Queue q):arr(new T[q.size]),head(q.head),tail(q.tail),size(q.size)
{int i q.head;while(i ! q.tail){*(this-arri) *(q.arri);i (i1q.size)%q.size;}
}
//析构函数
template class T
QueueT::~Queue()
{delete arr;
}
//拷贝赋值函数
template class T
void QueueT::operator(Queue q)
{arr new T[q.size];head q.head;tail q.tail;size q.size;int i q.head;while(i ! q.tail){*(this-arri) *(q.arri);i (i1q.size)%q.size;}return *this;
}
//判空
template class T
bool QueueT::empty()
{return head tail;
}
//判满
template class T
bool QueueT::full()
{return (tail1)%size head;
}//入队
template class T
void QueueT::push(T elem)
{if(full())cout队满endl;else{arr[tail] elem;tail(tail1)%size;}
}
//出队
template class T
void QueueT::pop()
{if(empty()){}elsehead(head1)%size;
}
//清空队列
template class T
void QueueT::clear()
{head 0;tail head;
}
//求队列大小
template class T
int QueueT::queuesize()
{return (tailsize-head)%size;
}
//返回最后一个元素
template class T
T* QueueT::back()
{if(empty()){T *elem nullptr;cout空队列endl;return elem;}elsereturn arr(tailsize-1)%size;
}
//返回第一个元素
template class T
T* QueueT::front()
{if(empty()){T *elem nullptr;cout空队列endl;return elem;}elsereturn arrhead;
}