C++ 栈基本操作

来源:互联网 发布:分期贷款软件 编辑:程序博客网 时间:2024/04/30 20:40

一:目的

用C++实现栈的基本操作;

二:实现

1. 首先定义栈的结构和类,书写在stack.h中 

# include <iostream>using namespace std;#define STACK_INIT_SIZE 100 //存储空间的初始分配量#define STACKINCREMENT 10   //存储空间的分配增量stackincrementtypedef int SElemType; typedef struct{     SElemType *base;//指向栈底的指针     SElemType *top;//指向栈顶的纸指针     int stacksize;//已分配的存储空间}SqStack;class Stack{public:bool InitStack();//初始化bool push(SElemType val);//进栈操作int pop(SElemType &val);//出栈操作void print();//打印void FreeStack();//释放private:SqStack s;};
2. 实现代码放在stack.cpp中,具体如下

# include "statck.h"//初始化栈bool Stack::InitStack(){s.base = (int *)malloc(sizeof(SElemType) * STACK_INIT_SIZE);if(!s.base)return false;s.top = s.base;s.stacksize = STACK_INIT_SIZE;return true;}//进栈操作bool Stack:: push(SElemType val){if(s.top - s.base >= s.stacksize){//已满,重新申请s.base = (int *)realloc(s.base, sizeof(SElemType) * (s.stacksize + STACKINCREMENT));if(!s.base)return false;s.top = s.base + s.stacksize;s.stacksize += STACKINCREMENT;}*s.top =val;s.top++;return true;}//出栈操作int Stack:: pop(SElemType &val){if(s.top == s.base)return false;val = *(s.top-1);s.top--;return true;}//打印void Stack::print(){SElemType *top_temp = s.top;while(top_temp!= s.base  && *(top_temp-1)){//栈不为空并且有值top_temp--;cout<< *top_temp<<endl;}}//释放void Stack::FreeStack(){if(s.base == s.top){cout << "队列为空,不需要释放"<<endl;return;}free(s.base);s.top = s.base;s.stacksize = STACK_INIT_SIZE;}
3.简单测试如下

Stack s ;s.InitStack();s.FreeStack();s.push(1);s.push(2);s.push(3);s.push(4);s.push(5);s.FreeStack();s.InitStack();s.push(6);s.push(7);s.push(8);s.push(9);s.push(10);s.print();cout << "==========================" << endl;int val;for(int i = 0; i <10;i++){s.pop(val);cout << val << endl;}system("pause");












原创粉丝点击