顺序栈的实现相对较为容易,但是应用极其广泛强大。
/*
** SqStack.h
*/
#ifndef SQSTACK_H
#define SQSTACK_H
#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef int SElemType;
typedef int Status;
typedef struct
{
SElemType *base;//栈底指针
SElemType *top; //指向栈顶元素的上一个位置
int stacksize; //栈分配的当前容量大小
}SqStack;
void InitStack(SqStack &s);
void Push(SqStack &s, SElemType e);
Status GetTop(SqStack &s);
Status StackLength(const SqStack s);
void Pop(SqStack &s);
#endif // !SQSTACK_H
/*
** SqStack.cpp
*/
#include "SqStack.h"
void InitStack(SqStack &s)
{
s.base = (SElemType*)malloc(sizeof(SqStack)*STACK_INIT_SIZE);
if(!s.base)
printf("存储空间分配失败");
s.top = s.base;
s.stacksize = STACK_INIT_SIZE;
}
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)
printf("没有多余空间可利用");
s.top = s.base + s.stacksize;
s.stacksize += STACKINCREMENT;
}
*s.top = e;
++s.top;
}
Status GetTop(SqStack &s)
{
if(s.base == s.top)
printf("栈空\n");
return *(s.top-1);
}
Status StackLength(const SqStack s)
{
return (s.top - s.base);
}
void Pop(SqStack &s)
{
if(s.top == s.base)
printf("栈空\n");
--s.top;
}
/*
** main.cpp
*/
#include "SqStack.h"
int main()
{
SqStack s;
InitStack(s);
for(int i = 0; i < 5; i++)
Push(s, i);
printf("栈中元素个数为:%d\n", StackLength(s));
printf("栈顶元素为:%d\n", GetTop(s));
Pop(s);
printf("栈中元素个数为:%d\n", StackLength(s));
printf("栈顶元素为:%d\n", GetTop(s));
return 0;
}
运行结果图: