数据结构——栈

来源:互联网 发布:数据泄密的主要途径 编辑:程序博客网 时间:2024/06/05 07:57

    栈是一种后进先出的线性表,他要求只在表尾进行删除和插入的工作。

    栈的定义:定义一个结构体,里面的成员有:

    1栈顶指针;

    2栈底指针;

    3栈的最大容量;

   typedef struct node

{

int *base;    //栈底指针,数据类型可以是其他,不一定是int

int *top;     //栈顶指针,数据类型可以是其他,不一定是int

int stacksize;  //栈的最大容量

}Stack;

      创建一个栈:

    1在内存中开辟一段连续的内存空间作为栈空间,将首地址赋给栈底指针;

    2初始:令栈底和栈顶相同;

    3设置栈的最大容量;

代码:栈中存放的数据类型为int

#define STACK_INIT_SIZE 100

 

void initStack(Stack*s)

{

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

  if(s->base==NULL) exit(0);

  s->top=s->base;

  s->stacksize=STACK_INIT_SIZE;

}

 

 

   入栈操作:

1如果栈满,追加空间;

2重新设置栈的最大容量;

3放入数据;(栈顶指针指向的位置);

4栈顶指针递增1;

void Push(Stack *s,int item)

{

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

   { /*栈满,追加空间*/

   s->base=(int *)malloc((s->stacksize+STACK_INCREMENT)*sizeof(int));

   s->top=s->base+s->stacksize;    //调整栈顶指针

   s->stacksize+=STACK_INCREMENT;  //重新设置栈的最大容量

   }

   *(s->top)=item;  //放入数据

   s->top++;    //栈顶指针自增1

}

 

出栈操作:

 1判断是否栈空,是则返回;

 2栈不空,则栈顶指针自减1,取出指针指向的内容;

 

int Pop(Stack*s)      //该栈存储int类型数据

{    int item;

if(s->top==s->base)  //判断是否栈空,是则返回

{return NULL;}   

    s->top--;    //指针自减1

item=*(s->top);  //取出指针指向的内容

   return item;

}

原创粉丝点击