顺序栈

栈(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 ;
}

顺序栈

posted @ 2016-03-24 16:07  SuperThinker  阅读(6)  评论(0编辑  收藏  举报  来源