文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>栈的各种操作的C语言实现

栈的各种操作的C语言实现

时间:2010-07-31  来源:frankzfz

   这一篇主要是栈的各种操作的C语言实现。
   首先还是数据结构的定义:

typedef struct Stack
{
  SElemType *base;
  SElemType *top ;
  int stacksize;
}SqStack;

    下面是各种操作的具体的实现,因为栈和队列在后面的树的操作中,会经常的用到,所以,这里会影响到后面树的实现。

Status InitStack(SqStack *S)
{//构造一个空栈

  if(!(S->base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType))))
    exit(OVERFLOW);
  S->top = S->base;
  S->stacksize = STACK_INIT_SIZE;
  return OK;
}

Status DestroyStack(SqStack S)
{//销毁栈S

  free(S.base);
  S.base = NULL;
  S.top = NULL;
  S.stacksize = 0;
  return OK;
}

Status ClearStack(SqStack S)
{//把栈S置空

  S.top = S.base;
  return OK;
}

Status StackEmpty(SqStack S)
{//若栈S为空,则返回TRUE,否则返回FALSE

  if(S.top == S.base)
    return TRUE;
  else
    return FALSE;
}

int StackLength(SqStack S)
{//返回S的元素个数,也就是栈的长度

  return S.top - S.base;
}

Status GetTop(SqStack S,SElemType *e)
{//用e返回栈顶元素

  if(S.top > S.base)
  {
    *e = *(S.top -1);
    return OK;
  }
  else
    return ERROR;
}

Status Push(SqStack *S,SElemType e)
{//插入元素e为栈顶元素

  if(S->top - S->base >=S->stacksize)
  {
    S->base=(SElemType *)realloc(S->base,(S->stacksize + STACKINCREMENT) * sizeof(SElemType));
    if(!S->base)
      exit(OVERFLOW);
     
    S->top = S->base + S->stacksize;
    S->stacksize +=STACKINCREMENT;
  }
  *(S->top)++=e;
  return OK;
}

Status Pop(SqStack *S,SElemType *e)
{//删除栈顶元素,用e返回其值

  if(S->top == S->base)
    return ERROR;
  *e = *--S->top;
  return OK;
}

Status StackTraverse(SqStack S,Status(*visit)(SElemType))
{// 输出栈顶元素

  while(S.top > S.base)
    visit(*S.base++);
  printf("\n");
  return OK;
}


相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载