C++数据结构用一个变量或一个临时栈实现栈的复制
2017-11-22 12:20
344 查看
本人还是个在校大学生,只是想把自己平时打的一点点代码拿出来分享一下。如果代码有误或者还有可以改进的地方,请多多指教!
下面为 arrstack.h
下面是arrstack.cpp
下面为测试代码
下面为 arrstack.h
template <class T> class arrStack { public: // 栈的顺序存储 int mSize; // 栈中最多可存放的元素个数 T *st; // 存放栈元素的数组 public: int top; // 栈顶位置,应小于mSize public: // 栈的运算的顺序实现 arrStack(int size); //构造函数 arrStack(); //默认构造函数 void clear(); //清除栈函数 bool push(T item); //入栈 bool pop(T & item); //出栈 bool getTop(T & item); //返回栈顶元素 bool isEmpty(); //判断栈是否为空 bool isFull(); //判断栈是否为满 void show(); //显示栈 void stackcopy(arrStack<T> & s); //用临时栈实现栈的复制 void variablecopy(arrStack<T> & s); //用一个变量实现栈的复制 };
下面是arrstack.cpp
#include "stdafx.h" #include "arrstack.h" template <class T> arrStack<T>::arrStack(int size) { mSize = size; top = -1; //此处规定top = -1时,栈为空 st = new T[mSize]; } template <class T> arrStack<T>::arrStack() { top = -1; } template <class T> void arrStack<T>::clear() { top = -1; } template <class T> bool arrStack<T>::push(T item) { if (isFull()) { cout << "栈满溢出" << endl; return false; } else { st[++top] = item; return true; } } template <class T> bool arrStack<T>::pop(T & item) { if (isEmpty()) { cout << "栈为空,不能出栈操作" << endl; return false; } else { item = st[top--]; return true; } } template <class T> bool arrStack<T>::getTop(T & item) { if (top == -1) { cout << " 栈为空,不能出栈操作" << endl; return false; } else { *item = st[top]; return true; } } template <class T> bool arrStack<T>::isEmpty() { if (top <= -1) { return true; } return false; } template <class T> bool arrStack<T>::isFull() { if (top >= mSize - 1) { return true; } return false; } template <class T> void arrStack<T>::stackcopy(arrStack<T> & s) { arrStack<T> temp(this->mSize); T t; int i = 0; int index = this->top + 1; while (i < index) { this->pop(t); temp.push(t); i++; } i = 0; while (i < index) { temp.pop(t); this->push(t); s.push(t); i++; } } template <class T> void arrStack<T>::show() { if (isEmpty()) { cout << "show(): 空栈!!" << endl; return; } for (int i = top; i > -1; i--) { cout << "NO." << i + 1 << " is: " << st[i] << endl; } cout << endl; } template <class T> void arrStack<T>::variablecopy(arrStack<T> & s) { int data; int temp; int index = this->top; for (int i = 0; i <= index; i++) { for (int j = index - i; j > 0; j--) { if (this->pop(temp)) { s.push(temp); } } this->pop(data); for (int k = index - i; k > 0; k--) { if (s.pop(temp)) { this->push(temp); } } s.push(data); } }
下面为测试代码
#include "stdafx.h" #include "arrstack.cpp" #include <iostream> using namespace std; int main() { arrStack<int> s1(5); arrStack<int> s2(5); for (int i = 1; i < 6; i++) { s1.push(i * 11); } cout << "original s1.show :" << endl; s1.show(); cout << "this is stackcopy:" << endl; s1.stackcopy(s2); cout << "s2.show :" << endl; s2.show(); system("pause"); return 0; }
相关文章推荐
- C++ 数据结构实现两个栈实现一个队列
- 程序员面试宝典之数据结构基础----C++两个栈实现一个队列功能
- 怎样实现C结构体数据的整体复制
- 软件设计师教程 数据结构之线性链表的实现 (C/C++语言)
- [PHP][Function]实现将一个文件夹下的所有文件及文件夹复制到另一个文件夹里(保持原有结构
- 快速实现将一个表中数据更新至另一个库中的同结构表
- 数据结构之顺序表C++实现
- 数据结构之单链表实现队列C++
- 数据结构(2)单链表 c++ 模板实现
- 实现了一个 native层读写音频数据时用到的一个 音频数据缓冲区(线程安全的)(c++)
- 数据结构(3)单循环链表 c++ 模板实现
- 数据结构(4) 顺序栈 c++ 模板实现
- Sql 语句实现在同一个DB中复制表和空清一个DataTable中的所有数据
- 数据结构实验:一元多项式计算器(C++ 实现)
- C++ 虚拟函数vs 回调函数 像有虚拟方法表一样有一个虚拟变量表就可以实现类级回调函数了
- 数据结构之单链表(C++实现)
- 只复制一个表结构,不复制数据
- C++实现数据结构作业——表达式求值
- sql复制表结构和数据的实现方法
- 数据结构单项链表C++实现改变C版本