简单实现栈结构
#include <iostream>
#include <string>
#include <cstdlib>
#define MAX_SIZE 100 //定义栈的初始化个数
#define CREATESIZE 10 //定义栈的扩容个数
using namespace std;
typedef int ElemType; //定义栈的数据元素类型
//定义栈结构
typedef struct Stack
{
ElemType* top; //栈顶
ElemType* base; //栈底
int stackSize; //当前栈的最大容量
}Stack;
//初始化栈
string InitStack(Stack& stack);
//获取栈中元素的个数
int GetLength(Stack stack);
//入栈(压栈)
string PushStack(Stack& stack,ElemType e);
//获取栈顶的元素
ElemType GetTopElem(Stack stack);
//元素出栈
ElemType PopStack(Stack& stack);
//输出栈中所有元素
void ShowStack(Stack stack);
int main()
{
/** 十进制转二进制测试 */
Stack stack;
InitStack(stack);
int a;
cin >> a;
while (a)
{
PushStack(stack, a % 2);
a /= 2;
}
ShowStack(stack);
system("pause");
return 0;
}
//初始化栈
string InitStack(Stack& stack)
{
//为栈分配空间
stack.base = (ElemType*)malloc(sizeof(ElemType) * MAX_SIZE);
//栈分配空间失败
if (!stack.base)
{
return "erro";
}
//将栈顶和栈底指向同一块内存空间
stack.top = stack.base;
//初始化栈的最大容量
stack.stackSize = MAX_SIZE;
return "OK";
}
//获取栈中元素的个数
int GetLength(Stack stack)
{
return (stack.top - stack.base);
}
/**
* 入栈(压栈)
* 注意事项:判断栈中元素是否已满
*/
string PushStack(Stack& stack,ElemType e)
{
//栈的空间不够(元素个数多于100个),对栈进行扩容
if ((stack.top- stack.base) > stack.stackSize)
{
//为栈分配扩容空间
stack.base = (ElemType*)realloc(stack.base,sizeof(ElemType) * CREATESIZE);
//扩容失败,退出程序
if (!stack.base)
{
return "erro";
}
//将栈顶指针指向栈顶(栈底加上栈的元素个数)
stack.top = stack.base + stack.stackSize;
//将栈的容量进行更新(加上新扩容的空间)
stack.stackSize += CREATESIZE;
}
*(stack.top) = e;
stack.top++;
return "OK";
}
/**
* 获取栈顶的元素
* 注意事项:判断是否为空栈
*/
ElemType GetTopElem(Stack stack)
{
//空栈的情况
if (stack.top == stack.base)
{
cout << "栈为空" << endl;
exit(1);
}
//返回栈顶元素
return *(--stack.top);
}
/**
* 元素出栈
* 注意事项:是否为空栈
*/
ElemType PopStack(Stack& stack)
{
if (stack.top == stack.base)
{
cout << "栈为空" << endl;
exit(1);
}
return *(--stack.top);
}
//输出栈中所有元素
void ShowStack(Stack stack)
{
while (stack.top != stack.base)
{
cout << *(--stack.top) << " ";
}
}