关于做网站的书做网站客户会问什么问题
张小明 2026/1/9 15:45:06
关于做网站的书,做网站客户会问什么问题,做内部优惠券网站赚钱吗,网站建设每天需要做什么前言
今天我的任务是首先利用一个小时完成用栈实现队列以及用队列实现栈的代码整理#xff0c;并保证能够独立写出来#xff0c;然后利用半小时的时间#xff0c;完成串的概念以及代码的学习#xff0c;然后去健身一个小时到一个半小时#xff0c;然后利用半小时吃个饭并保证能够独立写出来然后利用半小时的时间完成串的概念以及代码的学习然后去健身一个小时到一个半小时然后利用半小时吃个饭然后晚上七点半回来做牛客周赛比赛结束后利用一个小时学习概数。代码#includeiostream #includestdexcept using namespace std; templatetypename T class Stack { private: T* data; int size; int capacity; void resize(); public: Stack() :data(new T[10]), size(0), capacity(10){} ~Stack(); void push(T x); T pop(); T top() const;//必须加const int getSize() const;//必须加const bool empty() const;//添加判断是否为空的接口 }; templatetypename T void StackT::resize() { T* newData new T[capacity * 2]; for (int i 0; i size; i) { newData[i] data[i]; } delete[] data; data newData; capacity * 2; } templatetypename T StackT::~Stack() { delete[] data; } templatetypename T void StackT::push(T x) { if (size capacity) { resize(); } data[size] x; } templatetypename T T StackT::pop() { if (size 0) { throw underflow_error(Stack is empty!); } return data[--size]; } templatetypename T T StackT::top() const{ if (size 0) { throw underflow_error(Stack is empty!); } return data[size - 1]; } templatetypename T int StackT::getSize() const{ return size; } templatetypename T bool StackT::empty() const { return size 0; } //templatetypename T不用写这个 class Queue { private: Stackint s1;//直接大小于号套数据类型 Stackint s2;//辅助栈 public: Queue(){} void push(int x) {//这里为什么不先声明然后再实现函数呢 s1.push(x); } int pop() {//这个接口的实现逻辑有点看不懂 if (s2.empty()) { while (s1.getSize()) { s2.push(s1.pop()); } } return s2.pop(); } int peek() {//返回队首元素 if (s2.empty()) { while (s1.getSize()) { s2.push(s1.pop()); } } return s2.top(); } bool empty() { /*if (s1.empty() s2.empty()) { return true; } else { return false; }*/ return s1.empty() s2.empty(); } }; int main() { Queue q; q.push(1); q.push(2); q.push(3); q.push(4); cout q.pop(); return 0; }解释按照以往的传统我们依然采用逐字逐句去剖析的方法首先是栈部分代码的实现这里我们首先是利用顺序表来实现这个栈这部分的代码我们之前已经讲过啦请看这个顺序表实现栈具体函数实现然后这里主要说一下相比以前添加的部分这是判断栈为空的函数后续需要配合实现队列的过程使用。templatetypename T bool StackT::empty() const { return size 0; }然后就是队列的类的实现啦前面栈的类的实现部分使用了这一行语句templatetypename T这里使用模板将Stack类作为通用型栈容器可以支持任何的数据类型而下面这个队列被设计为存储int类型的队列所以不需要模板的声明其中作为成员变量的两个栈数据类型也是用通用栈的类名加上对应的数据类型来使用的。//templatetypename T不用写这个 class Queue { private: Stackint s1;//直接大小于号套数据类型 Stackint s2;//辅助栈还有后面的具体函数实现部分与前面栈的类的实现不同队列这里的函数是直接在类内实现的而前面通用型栈的类的实现中函数都是在类外进行实现的其实两者实现方式都是可以的只不过模板类的要加上全模板声明比如templatetypename T void StackT::push(T x)。还有就是在队列的类的实现中构造函数中没有任何内容这是因为实现队列的两个栈已经在栈的类中完成了初始化所以说在队列中就不需要啦。public: Queue(){} void push(int x) {//这里为什么不先声明然后再实现函数呢 s1.push(x); } int pop() {//这个接口的实现逻辑有点看不懂 if (s2.empty()) { while (s1.getSize()) { s2.push(s1.pop()); } } return s2.pop(); } int peek() {//返回队首元素 if (s2.empty()) { while (s1.getSize()) { s2.push(s1.pop()); } } return s2.top(); } bool empty() { /*if (s1.empty() s2.empty()) { return true; } else { return false; }*/ return s1.empty() s2.empty(); } };反思对于获取长度获取栈顶元素判断是否为空等函数不要忘记添加const关键字