Chinaunix首页 | 论坛 | 博客
  • 博客访问: 667030
  • 博文数量: 150
  • 博客积分: 4070
  • 博客等级: 中校
  • 技术积分: 1795
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-23 21:44
文章分类

全部博文(150)

文章存档

2012年(1)

2011年(123)

2010年(26)

分类: IT职场

2011-06-09 15:14:18

1、数据结构

#define INIT_SIZE 10

#define INCRE_SIZE 5

struct stack

{

       int *base;

       int *top;

       int stacksize;

};

2、构造栈

int CreateStack(struct stack &S)

{

       S.base = (int *)malloc(INIT_SIZE * sizeof(int));

       if (S.base == NULL)

       {

              return 0;

       }

       S.top = S.base;

       S.stacksize = INIT_SIZE;

       return 1;

}

3、插入元素

int Push(struct stack &S, int value)

{

       if (S.top - S.base >= S.stacksize)

       {

              S.base = (int *)realloc(S.base, (S.stacksize + INCRE_SIZE) * sizeof(int));

              if (S.base == NULL)

              {

                     return 0;

              }

              S.top = S.base + S.stacksize;

              S.stacksize += INCRE_SIZE;

       }

       *S.top++ = value;

       return 1;

}

4、判断是否为空栈

bool EmptyStack(struct stack S)

{

       if (S.base == S.top)

       {

              return true;

       }

       else

       {

              return false;

       }

}

5、如果栈不空,则返回栈顶元素

int GetTop(struct stack S, int &value)

{

       if (EmptyStack(S))

       {

              return 0;

       }

       else

       {

              value = *(S.top - 1);

              return 1;

       }

}

6、删除栈顶

int Pop(struct stack &S, int &value)

{

       if (EmptyStack(S))

       {

              return 0;

       }

       else

       {

              value = *(--S.top);

              return 1;

       }

}

7、销毁栈

void DestroyStack(struct stack S)

{

       free(S.base);

       S.base = NULL;

       S.top = NULL;

       S.stacksize = 0;

}

8、清空栈

void ClearStack(struct stack &S)

{

       S.top = S.base;

}

9、栈中元素个数

int LengthStack(struct stack S)

{

       if (S.base == S.top)

       {

              return 0;

       }

       else

       {

              return (S.top - S.base);

       }

}

10、到栈顶遍历元素 (由于参数S是以值的方式传送,因此函数中的S.base++并不会影响栈中的数组地址)

void TraverStack(struct stack S)

{

       while (S.top > S.base)

       {

              printf("%d ", *S.base++);

       }

       printf("\n");

}

阅读(3027) | 评论(0) | 转发(0) |
0

上一篇:双链表算法

下一篇:链式队列基本操作

给主人留下些什么吧!~~