数据结构--栈

1.栈的定义:
栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

2.栈的特点:
栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。
栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。栈也称为后进先出表。
栈可以用来在函数调用的时候存储断点,做递归时要用到栈!

3.图形说明:
数据结构--栈_第1张图片

4.栈的基本算法:
1).进栈(PUSH)算法
①若TOP≥n时,则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出;不满则作②);
②置TOP=TOP+1(栈指针加1,指向进栈地址);
③S(TOP)=X,结束(X为新进栈的元素);
2).退栈(POP)算法
①若TOP≤0,则给出下溢信息,作出错处理(退栈前先检查是否已为空栈, 空则下溢;不空则作②);
②X=S(TOP),(退栈后的元素赋给X):
③TOP=TOP-1,结束(栈指针减1,指向栈顶)。

5.代码实现:

#include
#include
#include
#define MAX_SIZE 10

typedef int DataType;
typedef struct Stack
{
    DataType _array[MAX_SIZE];
    int _size;
}Stack;

//初始化
void StackInit(Stack* s)
{
    assert(s);
    s->_size = 0;
}

//尾插
void StackPush(Stack* s, DataType data)
{
    assert(s);
    if (StackEmpty(s))
        return;
    s->_size--;
}

//栈顶元素
DataType StackTop(Stack* s)
{
    assert(s);
    return s->_array[s->_size - 1];
}

//栈的大小
int StackSize(Stack* s)
{
    assert(s);
    return s->_size;
}

//清空
int StackEmpty(Stack *s)
{
    assert(s);
    return 0 == s->_size;
}

你可能感兴趣的:(数据结构,栈,数据结构,栈)