# include<iostream>
using namespace std;
#define STACK_INIT_SIZE 10
#define STACKINCREMENT 5
typedef int SElemType;
//定义栈结构
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
//建立栈
void InitStack(SqStack &S)
{
S.base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if (!S.base)
{
cout << endl << "Allocate space failure !" << endl;
}
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
*S.top++ = 5; //先将元素赋给*S.stop, 然后指针S.top++
*S.top++ = 8;
*S.top++ = 12;
*S.top++ = 18;
*S.top++ = 30;
*S.top++ = 37;
*S.top++ = 45;
*S.top++ = 78;
}
//返回栈顶元素
void GetTop(SqStack &S)
{
SElemType e;
if (S.top == S.base) cout << "栈为空!" << endl;
e = *(S.top - 1);
cout << "Top元素为:" << e << endl;
}
//插入元素e
void Push(SqStack &S, SElemType e)
{
if (S.top - S.base >= S.stacksize)
{
S.base = (SElemType *)realloc(S.base, (S.stacksize + STACKINCREMENT)*sizeof(SElemType));
if (!S.base)cout << "追加存储空间失败!" << endl;
S.top = S.base + S.stacksize; //重新初始化S.top的位置
S.stacksize += STACKINCREMENT; //栈长度加上增加的长度
}
*S.top++ = e;
cout << endl << "插入成功!" << endl;
}
//打印栈
void PrintStack(SqStack &S)
{
SElemType *p;
cout << endl << endl << "栈元素";
cout << endl << "------";
cout << endl << "The old SqStack is (base to top) : " << endl;
for (p = S.base; p != S.top; p++) //output the old SqStack
{
cout << *p << " 地址为:" << p << endl;
}
cout << S.base << endl;
}
//删除顶元素
void Pop(SqStack &S)
{
if (S.top == S.base) cout << "栈为空,删除失败!" << endl;
--S.top;
}
void main()
{
SqStack S;
SElemType e;
e = 999;
cout << endl << endl << "InitStack.cpp";
cout << endl << "==============" << endl;
//建栈,并初始化
InitStack(S);
//返回top元素
GetTop(S);
//打印栈元素
PrintStack(S);
//向栈插入元素e
Push(S, e);
PrintStack(S);
//删除栈顶元素
Pop(S);
PrintStack(S);
system("pause");//防止运行结果一闪而过
}
c++实现栈建立,插入,删除
最新推荐文章于 2024-06-26 21:08:25 发布