天勤考研数据结构———顺序栈、链栈操作

typedef struct{                //定义顺序栈
    int data[maxsize];
    int top;//定义栈顶指针
}SqStack;

void init(SqStack &st)//初始化顺序栈
{
    st.top=-1;
}
int isEmpty(SqStack st)//判断顺序栈是否为空
{
    if(st.top==-1)
        return 0;
    else
        return 1;
}
int push(SqStack &st,int x)//入栈
{
    if(st.top==maxsize-1)
        return 0;
    ++(st.top);
    st.data[st.top]=x;//data[++top]=x
        return 1;
}
int pop(SqStack &st,int &x)//出栈
{
    if(st.top==-1)
        return 0;
    x=st.data[st.top];
    --(st.top);//x=data[top--]
        return 0;
}

定义链栈

typedef struct LNode{//定义链栈
    int data;
    struct LNode *next;
}LNode;

 

带头结点的栈操作

void initStack(LNode *&lst)
{
    lst=(LNode *)malloc(sizeof(LNode));//制造一个头结点
    lst->next=NULL;
}
int isEmpty(LNode *lst)//判断是否为空
{
    if(lst->next==NULL)
    {
        return 1;
    }
    else
        return 0;
}
void push(LNode *&lst,int x)
{
    LNode *p;
    p=(LNode *)malloc(sizeof(LNode));
    p->next=NULL;
    //头插法
    p->data=x;
    p->next=lst->next;//这个很重要
    lst->next=p;
}
int pop(LNode *&lst,int &x)
{
    if(lst->next==NULL)
    {
        return 0;
    }
    lNode *p;
    p=lst->next;
    x=p->data;
    lst->next=p->next;
    free(p);
    return 1;
}

不带头结点的栈操作

void initStack(LNode *&lst)
{
    lst=(LNode *)malloc(sizeof(LNode));//制造一个头结点
    lst->next=NULL;
}
int isEmpty(LNode *lst)//判断是否为空
{
    if(lst==NULL)
    {
        return 1;
    }
    else
        return 0;
}
void push(LNode *&lst,int x)
{
    LNode *p;
    p=(LNode *)malloc(sizeof(LNode));
    p->next=NULL;
    //头插法
    p->data=x;
    p->next=lst;//这个很重要
    lst=p;
}
int pop(LNode *&lst,int &x)
{
    if(lst==NULL)
    {
        return 0;
    }
    lNode *p;
    p=lst;//让p指向第一个数据结点
    x=p->data;
    lst=p->next;
    free(p);
    return 1;
}

 

 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页