栈(stack)
栈是只能在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。栈也称为后进先出表。
程序:
#include "stdafx.h"
#define maxsize 100
using namespace std;
typedef struct
{
char elem[maxsize];
int top;
}Stack,*pStack;
//初始化栈
void InitStack(Stack *&s)
{
s = (pStack)malloc(sizeof(Stack));
ZeroMemory(s->elem,sizeof(s->elem));
s->top = 0;
}
//释放栈
void ClearStack(pStack &s)
{
free(s);
}
//求栈的长度
int StackLength(pStack s)
{
return s->top;
}
//判断栈是否为空栈
bool StackEmpty(pStack s)
{
return (s->top == 0);
}
//进栈元素e
bool StackPush(pStack &s, char x)
{
if (s->top == maxsize)
{
return false;
}
else
{
s->elem[s->top] = x;
++s->top;
return true;
}
}
//出栈一个元素
bool StackPop(pStack &s, char &x)
{
if (s->top==0)
{
return false;
}
x=s->elem[(s->top -1)];
s->top --;
return true;
}
//取栈顶元素
bool GetStackTop(pStack s, char &x)
{
if (s->top==0)
{
return false;
}
x=s->elem[(s->top -1)];
return true;
}
//从栈顶到栈底输出元素
void DispStack(pStack s)
{
int i;
for (i = (s->top -1); i>=0;--i)
{
cout<<s->elem[i]<<endl;
}
}
void main()
{
pStack tack;
char buffer;
InitStack(tack);
StackPush(tack,'a');
StackPush(tack,'b');
StackPush(tack,'c');
StackPush(tack,'d');
StackPush(tack,'e');
DispStack(tack);
cout<<"栈长为 "<<StackLength(tack)<<endl;
cout<<"栈是否为空"<<StackEmpty(tack)<<endl;
GetStackTop(tack,buffer);
cout<<"栈顶元素为"<<buffer<<endl;
StackPop(tack,buffer);
cout<<"出栈一个元素 值为"<<buffer<<endl;
DispStack(tack);
ClearStack(tack);
return ;
}