代码如下:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#define STACK_INIT_SIZE 10
using namespace std;
typedef int ElemType ;
struct Stack
{
ElemType* base;
int top;
int tail;
};
void Init (Stack& sq)
{
sq.base=(ElemType*)malloc(sizeof(ElemType)*STACK_INIT_SIZE);
sq.top=sq.tail=0;
if(sq.base==NULL)
{
printf("栈初始化失败\n");
exit(-2);
}
}
bool Is_empty(Stack& sq)
{
if(sq.tail==sq.top)
{
return true;
}
else
return false;
}
int Gettop(Stack& sq)
{
if(Is_empty(sq))
{
printf("顺序栈为空\n");
return -1;
}
else
{
return sq.base[(sq.top-1)];
}
}
int Pop (Stack& sq)
{
if(Is_empty(sq))
{
printf("顺序栈为空\n");
return -1;
}
return sq.base[--sq.top];
}
bool Push (Stack& sq,ElemType data)
{
if(sq.top-sq.tail>=STACK_INIT_SIZE)
{
printf("栈已满,不能添加元素\n");
return false;
}
sq.base[sq.top++]=data;
return true;
}
void Traverse (Stack& sq)
{
for (int i=sq.top-1;i>=sq.tail;i--)
{
printf("%d%c",sq.base[i],i==sq.tail ? '\n':' ');
}
}
int Sq_len (Stack& sq)
{
return sq.top-sq.tail;
}
void Clear(Stack& sq)
{
sq.top=sq.tail;
}
void Destory (Stack& sq)
{
free(sq.base);
sq.base=NULL;
}
int main()
{
Stack s;
Init(s);
for (int i=0;i<15;i++)
{
Push(s,i);
printf("栈顶元素为: %d\n",Gettop(s));
}
Traverse(s);
printf("栈的长度为%d\n",Sq_len(s));
return 0;
}