数据结构---链栈的基本操作

链栈的数据存储为:
typedef struct SNode
{
  int data;
  struct SNode *next;
}SNode,*StackPtr;


typedef struct
{
  StackPtr top;
  int length;
}LinkStack;
链栈的基本操作为:
Status InitStack(LinkStack &S)
{
  S.top=(StackPtr)malloc(sizeof(SNode));
  if(!S.top) return ERROR;
  S.top->next=NULL;
  S.length=0;
  return OK;
}


Status DestroyStack(LinkStack &S)
{
  StackPtr p;
  while (S.top)
  {
    p=S.top->next;
    free(S.top);
    S.top=p;
  }
  S.length=0;
  return OK;
}


Status ClearStack(LinkStack &S)
{
  StackPtr q,p=S.top->next;
  S.top->next=NULL;
  S.length=0;
  while (p)
  {
    q=p->next;
    free(p);
    p=q;
  }
  return OK;
}


Status StackEmpty(LinkStack S)
{
  return 0==S.length?true:false;
}


Status StackLength(LinkStack S)
{
  return S.length;
}


Status Push(LinkStack &S,int e)
{
  StackPtr p=(StackPtr)malloc(sizeof(SNode));
  if(!p) return ERROR;
  p->data=e;
  p->next=S.top->next;
  S.top->next=p;
  S.length++;
  return OK;
}


Status Pop(LinkStack &S,int &e)
{
  if(StackEmpty(S)) return ERROR;
  StackPtr p=S.top->next;
  e=p->data;
  S.top->next=p->next;
  free(p);
  S.length--;
  return OK;
}


Status GetTop(LinkStack &S,int &e)
{
  if(StackEmpty(S)) return ERROR;
  StackPtr p=S.top->next;
  e=p->data;
  return OK;
}


Status StackTraverse(LinkStack S)
{
  StackPtr p=S.top->next;
  while (p)
  {
    printf("%d ",p->data);
    p=p->next;
  }
  printf("\n");
  return OK;
}

你可能感兴趣的:(★数据结构★)