Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4513272
  • 博文数量: 252
  • 博客积分: 5347
  • 博客等级: 大校
  • 技术积分: 13838
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-30 10:13
文章分类
文章存档

2022年(12)

2017年(11)

2016年(7)

2015年(14)

2014年(20)

2012年(9)

2011年(20)

2010年(153)

2009年(6)

分类: C/C++

2010-07-31 14:09:15

   这一篇主要是栈的各种操作的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;
}


阅读(6447) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~