3.1 Estructura de doble pila y sus operaciones básicas

Tema: Almacene las dos pilas numeradas 0 y 1 en un espacio de matriz de espacio V [m], y la parte inferior de la pila está en los dos extremos de la matriz. Cuando el puntero superior top [0] de la pila No. 0 es -1, la pila está vacía, cuando el puntero superior top [1] de la pila No. 1 es m, la pila está vacía. Ambas pilas crecen desde los extremos hasta la mitad (como se muestra en la figura siguiente). Intente escribir las funciones de inicialización de doble pila, juzgando pila vacía, pila completa, apilamiento, estallido y otros algoritmos.
La definición de la estructura de doble pila es la siguiente:

typedef struct{
int top[2],bot[2];//栈顶和栈底指针 
SElemType *V;//栈数组 
in m;//栈最大可容纳元素的个数(也就是数组长度) 
}DblStack;

Inserte la descripción de la imagen aquí
1.
Idea de inicialización de pila doble : Asigne un espacio de matriz de tamaño m para el espacio de pila doble. Los valores iniciales del puntero superior y el puntero inferior de la pila 0 son ambos -1; los valores iniciales del puntero superior y el puntero inferior de la pila 1 son m. Indica que la pila está vacía.

algoritmo:

Status InitStack(Dblstack &S, int m){
    S.V=(SElemType *)malloc(m*sizeof(SElemType));  //为双栈分配一个大小为m的数组空间
    if(!S.V){
        return ERROR;   //存储分配失败
    }
    S.top[0]=-1;
    S.bot[0]=-1;
    S.top[1]=m;
    S.bot[1]=m;
    return OK;
}

2. Determine si la pila doble está vacía:
Idea: Cuando el puntero superior de la pila y el puntero inferior de la pila de la pila 0 apuntan a la misma dirección y el puntero superior de la pila y el puntero inferior de la pila 1 también apuntan a la misma dirección, el doble la pila está vacía.

algoritmo:

Status DblstackEmpty(Dblstack &S){
    if(S.top[0]==S.bot[0]&&S.top[1]==S.bot[1]){
        return TRUE;  //栈空
    }else{
        return FALSE;  //栈非空
    }
}

3. Determine si la pila doble está llena.
Idea: Cuando S.top [0] y S.top [1] son ​​adyacentes, es decir, S.top [1] -S.top [0] == 1, el la pila está llena.

algoritmo:

Status DblstackFull(Dblstack &S){
    if(S.top[1]-S.top[0]==1)
        return TRUE;  //栈满
    else
        return FALSE; //栈不满
}

4.
Idea de la pila : primero juzga si la pila doble está llena, si está llena, devuelve ERROR; si no, guarda e1 en la parte superior de la pila 0, e2 en la parte superior de la pila 1 y el puntero en la parte superior de la pila 0 Shift derecha, el puntero superior de la pila 1 se desplaza hacia la izquierda. (Mover a la izquierda y a la derecha es para la imagen de arriba)

algoritmo:

Status Push(Dblstack &S,int e1,int e2){
    if(DblstackFull(S)){  //调用3中的判满函数
        return ERROR;   //栈满,无法入栈
    }
    S.V[++S.top[0]]=e1;    //e1存到0号栈栈顶,栈顶元素右移
    S.V[--S.top[1]]=e2;    //e2存到1号栈栈顶,栈顶元素左移
    return OK;
}

5.
Idea de la pila : primero juzgue si la pila doble está vacía, si está vacía, devuelva ERROR; si no está vacía, asigne el valor del elemento superior de la pila 0 a e1, el valor del elemento superior de la pila 1 El valor se asigna a e2, el puntero en la parte superior de la pila 0 se mueve a la izquierda y el elemento en la parte superior de la pila 1 se mueve a la derecha. (Mover a la izquierda y a la derecha es para la imagen de arriba)

algoritmo:

Status Pop(Dblstack &S,int e1,int e2){
    if(DblstackEmpty(S)){  //调用2中的判空函数
        return ERROR;    //栈为空,无法出栈
    }
    e1=S.V[S.top[0]--];  //将0号栈栈顶元素的值赋值给e1,栈顶元素左移
    e2=S.V[S.top[1]++];  //将1号栈栈顶元素的值赋值给e2,栈顶元素右移
    return OK;
}

Supongo que te gusta

Origin blog.csdn.net/qq_39688282/article/details/108059487
Recomendado
Clasificación