estructura de almacenamiento secuencial y la belleza de la estructura almacén de cadena estructuras de datos (seis) pila

(Resumen de la "estructura de datos hacia el oeste" principiante estructura de datos recomienda este libro)

directorio

montón

almacenamiento secuencial pila estructura

En la pila.

operaciones pop

Apilar dos espacio compartido

Pila de estructura de almacenamiento vinculado

En la pila.

operaciones pop



montón

Stack (pila) se define sólo las operaciones de inserción y supresión en la cola de la forma lineal

Nos pila permite la inserción y la supresión de un extremo llamado pila (parte superior), y el otro extremo se llama la parte inferior pila (inferior), sin ningún tipo de elementos de datos llamados pila vacía.

También conocido pila LIFO (Last In First Out) forma lineal, denominado estructura LIFO.

La pila sólo el elemento superior.

almacenamiento secuencial pila estructura

Dado que la pila sólo puede ser insertado y retirado por el extremo, que la sección se utilizan?

Subíndice 0 como el extremo inferior de la pila es mejor, debido a que el primer extremo de los elementos de la pila están presentes, el cambio mínimo para la parte inferior de la pila de la misma.

ok, definimos una variable para indicar la posición del elemento de pila superior de la matriz, pero debe ser menor que la pila longitud StackSize.

La condición de determinación es pila vacía Top = -1 , cuando los medios de pila que no es un elemento, top = 0.

//栈的结构定义
typedef int SElemType;
typedef struct
{
    SElemType data[MAXSIZE];
    int top;    //用于栈顶指针
}SqStack;

En la pila.

Como se muestra, la idea de la operación de empuje es: ①, pila puntero + 1, ②, asignado al elemento a ser insertado en el espacio de pila

Status Push(SqStack *s,SElemType e)
{
    if(S->top == MAXSIZE-1)
    {
        return ERROR;  //栈满,无法添加
    }
    S->top++;          //① 、栈顶指针+1
    S->data[S->top]=e;//②、待插入元素赋值给栈顶空间
    return OK;
}

operaciones pop

Pila idea de la operación es simple: al puntero de pila -1

Status Pop(SqStack *S)
{
    if(S->top ==-1)
        return ERROR;
    S->top--;
    return OK;
}

 

Apilar dos espacio compartido

Stack es conveniente, porque el problema tiene que mover elementos de inserciones y deleciones, cuando no hay una mesa lineal. Pero es igualmente errónea, ya que la matriz debe primero determinar el tamaño del espacio de almacenamiento. Para dos de la misma pila tipo, podemos maximizar el uso del espacio de almacenamiento abierto, cómo usarlo? Dos pilas es nuestra parte!

Cómo compartida ley? Compartir acción, debe haber varios objetos entre sí utilizando el mismo objeto. Sabemos que hay dos extremos de la matriz, y sólo una pila inferior de la pila, no puede ser en ambos extremos de la seguridad de una parte inferior de la pila, entre la matriz de extenderlo? Esta es nuestra compartidas dos pilas.

typedef struct
{
    SElemType data[MAXSIZE];
    int top1;  //栈1的栈顶指针
    int top2;  //栈2的栈顶指针
}SqDoubleStack;

ok, ahora dos pilas comparten una serie de espacio, ¿cómo saber cuando se inserta en el inserto, que echan ella? Así que tenemos que tener un poco de algo para realizar una función: Dime antes de insertar, que desea insertar el elemento al que la pila, es decir stackNumber

//插入操作
Status Push(SqDoubleStack *s,SElemType e,int stackNumber)
{
    if(S->top1+1==S->top2)
        return ERROR;  //此时栈满

    if(stackNumber==1)
        S->data[++S->top1]=e;   //往top1+1位置处插入元素
    else if(stackNumber==2)
        S->data[--S->top2]=e;    //往top2-1位置处插入元素
    return OK;
}
//删除操作
//若栈不空,删除S的栈顶元素,用e返回其值,并返回OK,否则返回ERROR
Status Pop(SqDoubleStack *S, SElemType *e,int stackNumber)
{
    if(stackNumber==1)    
    {
        if(S->top1 ==-1)
            retrun ERROR;
        *e=S->data[S->top1--];
    }

    if(stackNumber==2)    
    {
        if(S->top2 ==MAXSIZE)
            retrun ERROR;
        *e=S->data[S->top2++];
    }
    return OK;
}

Luego está surge la pregunta: acciones propiedad de Acciones, que se encuentra en la matriz, la matriz es de tamaño fijo, entonces ¿para qué es? Así que sí, esta estructura de datos se utiliza generalmente cuando el espacio necesita dos pilas tienen una relación inversa, es decir, un crecimiento en otro acortado, si los dos están en constante crecimiento, que pronto habrá terminado debido a un desbordamiento de pila.

 

Pila de estructura de almacenamiento vinculado

Ponemos la cabeza en la parte superior de la pila lista enlazada, eliminar el primer nodo, debido a que la estructura de la cadena pila no requiere nodo principal, no tiene sentido.

//链栈结构代码如下
typedef struct StackNode
{
    SElemType data;
    struct StackNode *next;
}StackNode,*LinkStackPtr;

typedef struct LinkStack
{
    LinkStackPtr top;
    int count;
}LinkStack;

En la pila.

Impulsar la idea: Desde el puntero de pila en lugar de un nodo principal, entonces el puntero de pila es seguro que desempeñar un papel.

Abrir un nuevo nodo, campos de datos ponen un nuevo elemento de datos, entonces se apunta al siguiente elemento del puntero de pila actual, y luego dejar que el puntero de pila a punto para el nuevo nodo.

Status Push(LinkStack *s,SElemType e)
{
    LinkStackPtr s=(LinkStackPtr)malloc(sizeof(StackNode));
    s->data=e;
    s->next=S->top;
    S->top=s;
    S->count++;
    return OK;
}

operaciones pop

Ideas de pila: p apunta a la parte superior con un espacio variable pila puntero hacia abajo, p caída libre

//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK,否则返回ERROR
Status Pop(LinkStack *S,SElemType *e)
{
    LinkStackPtr P;

    if(StackEmpty(*S))
        return ERROR;

    *e=S->top->data;
    p=S->top;

    S->top=S->top->next;
    free(p);
    S->count--;
    return OK;
}

secuencia de la cadena de la pila y la pila se extrae en la pila y O (1) Tiempo de complejidad, longitud y secuencia de la pila fija, hay un campo de puntero de pila de enlaces, la presencia de tanto el desperdicio de espacio de memoria. Si la pila durante el uso, el cambio impredecible elemento, grande pequeño, preferiblemente con una pila de enlace, si la variación en el intervalo controlable, recomienda pila orden.

Publicado 38 artículos originales · ganado elogios 6 · vistas 1907

Supongo que te gusta

Origin blog.csdn.net/weixin_43827227/article/details/100856860
Recomendado
Clasificación