數據結構學習筆記

數據結構學習筆記之③——棧

棧的順序存儲結構

//棧的順序存儲
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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章