C++栈的实现
《大学》–第四章
所谓诚其意者,毋自欺也。如恶如臭,如好好色,此之谓自谦,故君子必慎独也。
小人闲居为不善,无所不致,见君子然后厌然, 揜其不善而著其善。
人之视己,如见其肺肝然,则何益矣?
此谓诚于中,形于外,故君子必慎其独也。
曾子曰:“十目所视,十手所指,其严乎!”
富润屋,德润身,心广体胖,故君子必诚其意。
译文:
文章目录所谓真诚面对自己的意念,就是指不要欺骗自己。就像讨厌难闻的味道,就像喜欢美丽的色彩,这样才可以说让自己满意了,因此君子一定要在独处时特别谨慎。小人平日就不做善的事,没有什么坏事不做的;看到君子之后,才躲躲闪闪的样子,遮掩他所做的坏事,并且弘扬他所做的善事,就像看透自己的肺肝一样清楚,这样做又有什么用处呢?这叫做:心中的真正情况会显示于外在的言行上,因此君子一定要在独处时特别谨慎。
曾子说:“十只眼在看着,十只手指在指着,真是严厉啊!”
财富可以装潢屋子,德行可以滋润身体。心胸开阔而体态舒适,因此君子一定要真诚的面对自己的意念。
- 1.栈(stack)的定义
- 2.栈的基础操作
栈是限定仅在表尾进行插入和删除操作的线性表
- 栈顶:
- 允许插入和删除的一端叫做栈顶(Top)
- FILO(先进后出)
- 栈的初始化
- 获取栈的元素个数
- 栈的判空操作
- 获取栈顶元素值
- 出栈
- 出栈的同时获取栈顶元素值
#includeusing namespace std; enum { STACK_INIT_SIZE = 20, STACK_INC_SIZE = 2 }; #define T int class MyStack { private: T * data; int top; int size; public: //构造函数--申请资源 MyStack() :data(nullptr), top(-1), size(STACK_INIT_SIZE) { data = new(nothrow) T[size]; if (data == nullptr) { exit(1); } } //析构函数--释放资源 ~MyStack() { delete[]data; data = nullptr; top = -1; size = 0; } //拷贝构造函数 MyStack(const MyStack& stack) { size = stack.size; top = stack.top; data = new T[size]; memmove(data, stack.data, sizeof(T) * stack.Size()); } bool Resize(T newsize) { if (newsize <= size)return true; //在这里注意 申请空间以2倍扩容 T* newdata = new(nothrow)T[STACK_INIT_SIZE*STACK_INC_SIZE]; if (newdata == nullptr) { return false; } memmove(newdata, data, sizeof(T) * Size()); delete []data; data = nullptr; data = newdata; size = STACK_INIT_SIZE*2; return true; } //获取元素个数 int Size() const { return top + 1; } //判空操作 bool Empty()const { return Size()==0; } int Capc()const{ return size; } //判满 bool Full() { //如果栈中元素的个数与栈的大小相等的话,那么栈已满 return Size() == Capc(); } //入栈 bool Push(const T val) { //栈已满,入栈失败 if (Full()&&!Resize(STACK_INIT_SIZE*STACK_INC_SIZE)) { return false; } top += 1; data[top] = val; return true; } T Top()const { if (!Empty()) { return data[top]; } else { cout << "栈为空,无元素" << endl; return false; } } bool Pop() { if (!Empty()) { top -= 1; return true; } return false; } //既要出栈也要获取栈顶元素值 T GetPop() { if (!Empty()) { T x = data[top]; top -= 1; return x; } return false; cout << "栈已经为空,没有元素可以出栈" << endl; } }; int main() { int n; cin >> n; MyStack st; for (int i = 0; i < n; i++) { st.Push(i ); } for (int i = 0; i < n; i++) { cout <



