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

来源:互联网 发布:原始dbc数据 编辑:程序博客网 时间:2024/05/21 03:55
链栈的数据存储为:
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;}