estrutura de armazenamento sequencial e beleza estrutura cadeia de lojas de estruturas de dados (seis) pilha

(Resumo da "estrutura de dados Westward" estrutura de dados iniciante recomendo este livro)

anuário

pilha

pilha estrutura de armazenamento sequencial

Na pilha.

operações pop

Empilhar dois espaço compartilhado

Pilha de estrutura de armazenamento ligado

Na pilha.

operações pop



pilha

Pilha (pilha) é definida apenas as operações de inserção e de deleção na cauda de forma linear

Nós pilha permite a inserção e deleção de um chamado fim da pilha (topo), e a outra extremidade é chamada a parte inferior da pilha (inferior), sem quaisquer elementos de dados chamados pilha vazia.

Também conhecido pilha LIFO (Last In First Out) forma linear, referida estrutura LIFO.

A pilha de apenas o elemento de topo.

pilha estrutura de armazenamento sequencial

Desde a pilha só pode ser inserido e removido até o final, qual seção você usa?

Subscrito 0, quando a extremidade inferior da pilha é melhor, porque a primeira extremidade dos elementos da pilha estão presentes, a mudança mínima para o fundo da pilha ele.

ok, definimos uma variável para indicar a posição do elemento de topo da pilha na matriz, mas deve ser menor do que o comprimento da pilha STACKSIZE.

A condição é determinação pilha vazia Topo = -1 , quando os meios de pilha que existe um elemento, parte superior = 0.

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

Na pilha.

Como se mostra, a operação de push ideia é: ①, pilha ponteiro + 1, ②, atribuído ao elemento a ser inserido no espaço de pilha

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

operações pop

Pilha idéia de operação é simples: ponteiro da pilha -1

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

 

Empilhar dois espaço compartilhado

Stack é conveniente, porque o problema precisa mover elementos de inserções e deleções, quando não existe uma tabela linear. Mas é igualmente falho, porque a matriz deve primeiro determinar o tamanho do espaço de armazenamento. Para dois do mesmo pilha tipo, podemos maximizar o uso do espaço de armazenamento aberto, como usá-lo? Duas pilhas é a nossa parte!

Como a lei compartilhada? Share share, deve haver vários objetos em conjunto, utilizando o mesmo objeto. Sabemos que existem duas extremidades da matriz, e apenas um fundo pilha de pilha, ele não pode estar em ambas as extremidades da segurança de um fundo da pilha, entre a matriz para estendê-lo? Este é o nosso compartilhados duas pilhas.

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

ok, agora duas pilhas compartilhar uma série de espaço, como você sabe quando é inserido na inserção que empilhá-la? Então, precisamos ter um pouco de algo para executar uma função: Diga-me antes de inserir, você quer inserir o elemento ao qual a pilha, ou seja, 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;
}

Depois, há a questão que surge é: Compartilhar ações de propriedade, que é na matriz, a matriz é de tamanho fixo, então o que serve? Por isso sim, esta estrutura de dados é geralmente usado quando o espaço precisa de duas pilhas têm uma relação inversa, ou seja, um crescimento em outro encurtado, se os dois estão em constante crescimento, que em breve serão mais por causa de um excesso de pilha.

 

Pilha de estrutura de armazenamento ligado

Nós colocamos a cabeça no topo da lista vinculada isoladamente pilha, excluindo o primeiro nó, porque a estrutura da cadeia de pilha não requer nó principal, não faz sentido.

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

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

Na pilha.

Empurrar a idéia: Desde o ponteiro de pilha em vez de um nó principal, em seguida, o ponteiro da pilha é certo para desempenhar um papel.

Abrir um novo nó, campos de dados colocar um novo elemento de dados, em seguida, ele aponta para o próximo elemento do ponteiro de pilha atual, e deixar que o ponteiro da pilha para apontar para o novo nó.

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;
}

operações pop

ideias pilha: p aponta para o topo com um espaço variável, stack pointer para baixo, queda livre p

//若栈不空,则删除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;
}

sequência da cadeia da pilha e a pilha é estalou na pilha e O (1) tempo de complexidade, comprimento e sequência da pilha fixa, existe um campo apontador a pilha de ligação, a presença de ambos o desperdício de espaço de memória. Se a pilha durante a sua utilização, a mudança imprevisível elemento, grande pequeno, de preferência com uma pilha de ligação, se a variação na gama controlável, recomendado pilha fim.

Publicado 38 artigos originais · ganhou elogios 6 · vista 1907

Acho que você gosta

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