数据结构学习笔记

数据结构学习笔记之③——栈

栈的顺序存储结构

//栈的顺序存储
typedef struct
{
    int data[MAXSIZE];
    int top;
}SqStack;

//入栈
int Push(SqStack *S,int e)
{
    if(S->top==MAXSIZE-1)
        return 0;
    S->top++;
    S->data[S->top]=e;
    return 1;
}

//出栈
int Pop(SqStack *S,int *e)
{
    if(S->top==-1)
        return 0;
    *e=S->data[S->top];
    S->top--;
    return 1;
}

栈的链式存储

//栈的链式存储
typedef struct StackNode
{
    int data;
    struct StackNode * next;
}StackNode,*LinkStackPtr;

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

//入栈
int Push(LinkStack *S,int e)
{
    LinkStackPtr s=(LinkStackPtr)malloc(sizeof(StackNode));
    s->data=e;
    s->next=S->top;
    S->top=s;
    S->count++;
    return 1;
}

//出栈
int Pop(LinkStack *S,int *e)
{
    LinkStackPtr p;
    *e=S->top->data;
    p=S->top;
    S->top=S->top->next;
    free(p);
    S->count--;
    return 1;
}

两栈共享空间结构

适合两栈空间需求有相反关系的结构
这里写图片描述

//两栈共享空间结构
typedef struct
{
    int data[MAXSIZE];
    int top1;//栈1栈顶指针
    int top2;//栈2栈顶指针
}SqDoubleStack;

int Push(SqDoubleStack *S,int e,int stackNumber)
{
    if(S->top1+1==S->top2)
        return 0;
    if(stackNumber==1)
        S->data[++S->top1]=e;
    else if(stackNumber==2)
        S->data[--S->top2]=e;
    return 1;
}

int Pop(SqDoubleStack *S,int *e,int stackNumber)
{
    if(stackNumber==1)
    {
        if(S->top1==-1)
            return 0;
        *e=S->data[S->top1--];
    }
    else if(stackNumber==2)
    {
        if(S->top2==MAXSIZE)
            return 0;
        *e=S->data[S->top2++];
    }
    return 1;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章