您的位置:首页 > 理论基础 > 数据结构算法

数据结构与算法——栈的相关操作

2014-09-27 11:27 459 查看
1、定义栈

typedef struct

{

  ElemType *base;

  ElemType *top;

  int stackSize;

}sqStack;

2、创建一个栈

#define STACK_INIT_SIZE 100

initStack(sqStack *s)

{

  s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof((ElemType ));

  if(!s->base)

      exit(0);

  s->top = s->base; //最开始,栈顶就是栈底

  s->stackSize = STACK_INIT_SIZE; //容量赋值为100

}

3、入栈

#define STACKINCREMENT 10

Push(sqStack *s, ElemType e)

{

  if(s->top - s->base >= s->stackSize)

  {

     s->base = (ElemType *)realloc(s->base, (s->stackSize + STACKINCREMENT) * sizeof((ElemType));

     if(!s->base)

      exit(0);

     s->top = s->base + s->stackSize; //最开始,栈顶就是栈底

     s->stackSize = s->stackSize + STACKINCREMENT) 

  }

  *(s->top) = e;

  s->top ++;

}

4、出栈

Pop(sqStack *s, ElemType *e)

{

  if(s->top == s->base)

     return;

  *e = *--(s->top);

}

5、清空栈:只是清空,内存依然在

ClearStack((sqStack *s)

{

  s->top = s->base;

}

6、销毁栈:连栈所在的内存也销毁

DestoryStack((sqStack *s)

{

   int i, len;

   len = s->stackSize;;

   for(i = 0; i < len; i++)

   {

      free(s->base);

      s->base ++;

   }

   s->base = s->top = NULL;

   s->stackSize = 0;

}

7、计算栈的当前容量

int StackLen(sqStack s)

{

  return(s.top - s.base);//将两个地址进行相减

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  栈的学习笔记