数据结构-栈:顺序栈与链栈的C++模板类实现

来源:互联网 发布:淘宝企业店铺推广 编辑:程序博客网 时间:2024/04/23 14:13

C++模板类实现顺序栈和链栈

实现的功能: 

1.压栈,2.弹栈,3.显示栈顶元素,4.判空,5.判满,6.清空栈,7.求栈长度。

顺序栈的C++模板类实现代码:

//顺序栈*********************************************************************#include <iostream>using namespace std;#define STACK_SIZE 10template <class Stack>class SeqStack{public:SeqStack(){ top = -1; stack_sise = 0; }~SeqStack(){}void Push(Stack index);void Pop();Stack GetTop();bool Empty(){ top == -1 ? return true : return false; }bool Full(){ top > STACK_SIZE ? return true : return false; }void clearStack(){ while (top + 1) { data[top] = 0; top--; stack_sise = 0; } }int stack_sise;private:Stack data[STACK_SIZE];int top;};template <class Stack>void SeqStack<Stack>::Push(Stack index){if (top == STACK_SIZE - 1) { std::cout << "栈已满,无法压栈" << std::endl; }else { data[++top] = index; stack_sise++; }}template <class Stack>void SeqStack<Stack>::Pop(){int Index = 0;if (top == -1) std::cout << "栈已空,无法弹栈" << std::endl;else{Index = data[top--];stack_sise--;std::cout << "已弹栈:" << Index << std::endl;}}template <class Stack>Stack SeqStack<Stack>::GetTop(){if (top == -1){std::cout << "栈已空,栈顶无数据" << std::endl;return -1;}else{std::cout << "栈顶:" << data[top] << std::endl;return data[top];}}int main(){SeqStack<int> stack;int select = 10;int Item = 0;while (select){std::cout << std::endl;std::cout << "***************************" << std::endl;std::cout << "[1]压栈          [2]弹栈  *" << std::endl;std::cout << "[3]获取栈顶元素  [4]清空栈*" << std::endl;std::cout << "[5]栈长度                 *" << std::endl;std::cout << "***************************" << std::endl;cout << "请选择:>";std::cin >> select;switch (select){case 1:std::cout << "请输入要压入的值:>";std::cin >> Item;stack.Push(Item);std::cout << Item << " 已入栈" << std::endl;break;case 2:stack.Pop();break;case 3:stack.GetTop();break;case 4:stack.clearStack();std::cout << "栈已清空" << std::endl;break;case 5:std::cout << "栈长度:" << stack.stack_sise << std::endl;break;default:break;}}return 0;}


链栈的C++模板类实现代码:

//链栈********************************************************************#include <iostream>using namespace std;#define STACK_SIZE 100template <class DataType>class LinkStackNode{public:DataType data;LinkStackNode<DataType>* next;};template <class DataType>class LinkStack{public:int stack_sise;LinkStack(){ top = 0; stack_sise = 0; }~LinkStack(){}void Push(DataType index);void Pop();DataType GetTop();bool Empty(){ top == 0 ? return true : return false; }bool Full(){ top > STACK_SIZE ? return true : return false; }void clearStack();private:LinkStackNode <DataType> *top;};template <class DataType>void LinkStack<DataType>::Push(DataType index){LinkStackNode<DataType> *addNode = (LinkStackNode<DataType> *)malloc(sizeof(LinkStackNode<DataType>));addNode->data = index;addNode->next = top;top = addNode;stack_sise++;}template <class DataType>void LinkStack<DataType>::Pop(){if (top == 0)std::cout << "栈已空,无法弹栈" << std::endl;else{DataType pop_x;LinkStackNode<DataType> *pop_p;pop_x = top->data;pop_p = top;top = top->next;delete pop_p;stack_sise--;std::cout << "已弹栈:" << pop_x << std::endl;}}template <class DataType>DataType LinkStack<DataType>::GetTop(){if (top == 0){std::cout << "栈已空,栈顶无数据" << std::endl;return -1;}else{std::cout << "栈顶:" << top->data << std::endl;return top->data;}}template <class DataType>void LinkStack<DataType>::clearStack(){while (top != 0){DataType pop_x;LinkStackNode<DataType> *pop_p;pop_x = top->data;pop_p = top;top = top->next;delete pop_p;stack_sise = 0;}}//主函数int main(){LinkStack<int> stack;int select = 10;int Item = 0;while (select){std::cout << std::endl;std::cout << "***************************" << std::endl;std::cout << "[1]压栈          [2]弹栈  *" << std::endl;std::cout << "[3]获取栈顶元素  [4]清空栈*" << std::endl;std::cout << "[5]栈长度                 *" << std::endl;std::cout << "***************************" << std::endl;std::cout << "请选择:>";cin >> select;switch (select){case 1:std::cout << "请输入要压入的值:>";cin >> Item; getchar();stack.Push(Item);std::cout << "  " << Item << " 已入栈" << std::endl;break;case 2:stack.Pop();break;case 3:stack.GetTop();break;case 4:stack.clearStack();std::cout << "栈已清空" << std::endl;break;case 5:std::cout << "栈长度:" << stack.stack_sise << std::endl;break;default:std::cout << "输入错误" << std::endl;break;}}return 0;}



0 0
原创粉丝点击