一:目的
用C++实现栈的基本操作;
二:实现
1. 首先定义栈的结构和类,书写在stack.h中
# include <iostream>
using namespace std;
#define STACK_INIT_SIZE 100 //存储空间的初始分配量
#define STACKINCREMENT 10 //存储空间的分配增量stackincrement
typedef 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");