数据结构—顺序栈的基本功能实现
- 栈是仅限在表尾进行插入或删除操作的线性表。栈中有栈底(表头端)和栈顶(表尾端),栈又被称为后进先出线性表(LIFO结构)。
- 当top=base时,栈为空。
- 每当一个元素进栈时,top指针加1;每当一个元素出栈时,栈顶元素减1。即非空栈中的栈顶指针始终在栈顶元素的下一个位置上。
- 下面是顺序栈的代码实现
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
#define STACK_INIT_SIZE 100 //栈的初始化容量
#define STACK_INC_SIZE 10 //栈的分配增量
typedef int elemType;
//栈的数据结构
typedef struct{
elemType* base; //栈底指针
elemType* top; //栈顶指针
int stackSize; //当前已分配的栈总存储空间
}SqStack;
void initStack(SqStack& S); //构造空栈并初始化
void pushStack(SqStack& S,elemType data); //数据元素进栈
void popStack(SqStack& S); //数据元素出栈
void initStack(SqStack& S)
{
S.base=(elemType*)malloc(STACK_INIT_SIZE * sizeof(elemType));
if(!S.base) exit(1);
S.top=S.base;
S.stackSize=STACK_INIT_SIZE;
}
void pushStack(SqStack& S,elemType data)
{
if(S.top-S.base>=S.stackSize) //栈满,扩充容量
{
S.base=(elemType*)realloc(S.base,(S.stackSize+STACK_INC_SIZE) * sizeof(elemType));
if(!S.base) exit(1);
S.top=S.base+S.stackSize; //栈顶改变
S.stackSize+=STACK_INC_SIZE;
}
*S.top=data;
cout<<"进栈:"<<*S.top;
S.top++;
cout<<endl;
}
void popStack(SqStack& S)
{
if(S.top!=S.base)
{
cout<<"出栈:"<<*(S.top-1);
S.top--;
}
cout<<endl;
}
void printStack(SqStack& S)
{
cout<<"栈中的内容为:";
for(elemType* i=S.base;i<S.top;i++)
{
int j=0;
cout<<*(i+j)<<" ";
j++;
}
cout<<endl;
}
int main()
{
SqStack S; //定义栈S
initStack(S); //初始化栈S
pushStack(S,1);
pushStack(S,2);
pushStack(S,3);
pushStack(S,4);
printStack(S);
popStack(S);
printStack(S);
return 0;
}
运行结果: