SWUST OJ1044&1046顺序栈&链栈基本操作实现

1044题目描述
编程实现顺序栈的初始化、入栈、出栈、取栈顶元素和计算栈中元素个数等基本操作。
输入
第一行为入栈元素的个数; 第二行依次为入栈的元素; 出栈操作的次数n.
输出
输出n次出栈后的栈顶元素值。如果是空栈,输出-1.
样例输入
4
1 2 3 4
2
样例输出
2

#include
#include
#define Max 1000
typedef struct
{
     
    int stack[Max];
    int top;

}Seqstack;
void Initstack(Seqstack *&S)
{
     
    S=(Seqstack *)malloc(sizeof(Seqstack));
    S->top=0;
}
int Emptystack(Seqstack *&S)
{
     
    if(S->top<=0)
        return 0;
    else
        return 1;
}
int Pushstack(Seqstack *&S,int x)
{
     
    if(S->top>=Max)
        return 0;
    else
    {
     
        S->stack[S->top]=x;
        S->top++;
        return 1;
    }
}
int Popstack(Seqstack *&S,int *d)
{
     
    if(S->top<=0)
        return 0;
    else
    {
     
        S->top--;
        *d=S->stack[S->top];
        return 1;
    }
}
int Topstack(Seqstack *S,int *d)
{
     
    if(S->top<=0)
        return 0;
    else
    {
     
        *d=S->stack[S->top-1];
        return 1;
    }
}
int main()
{
     
    Seqstack *S;
    Initstack(S);
    int m,a[Max],n,d,x;//m:入栈元素个数
    scanf("%d",&m);
    for(int i=0;i<m;i++)
    {
     
        scanf("%d",&a[i]);
        Pushstack(S,a[i]);
    }
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
     
        Popstack(S,&d);
    }
    if(Emptystack(S))
    {
     
        Topstack(S,&x);
        printf("%d",x);
    }
    else
        printf("-1");
}

1046
题目描述
编程实现链栈的初始化、入栈、出栈和计算栈中元素个数等基本操作。(测试数据为整数。)
输入
第一行为入栈元素的个数;
第二行为入栈元素;
出栈操作的次数n.
输出
n次出栈后的栈顶元素。如果是空栈,输出-1.
样例输入
4
1 2 3 4
2
样例输出
2

#include
#include
#define Max 1000
typedef struct lnode
{
     
    int data;
    struct lnode *next;

}Lstack;
void Initstack(Lstack *&S)
{
     
    S=(Lstack *)malloc(sizeof(Lstack));
    S->next=NULL;
}
int Emptystack(Lstack *S)
{
     
    if(S->next==NULL)
        return 0;
    else
        return 1;
}
void Pushstack(Lstack *&S,int x)
{
     
    Lstack *p;
    p=(Lstack *)malloc(sizeof(Lstack));
    p->data=x;
    p->next=S->next;//新节点链入为栈顶
    S->next=p;//新节点成为新的栈顶
}
int Popstack(Lstack *&S,int *d)
{
     
    Lstack *p=S->next;
    if(p==NULL)
        return 0;
    else
    {
     
        S->next=p->next;//删除原栈顶结点
        *d=p->data;//原栈顶结点元素赋予d
        free(p);//释放原栈顶结点内存空间
        return 1;
    }
}
int Topstack(Lstack *S,int *d)
{
     
    Lstack *p=S->next;
    if(p==NULL)
        return 0;
    else
    {
     
        *d=p->data;
        return 1;
    }
}
int main()
{
     
    Lstack *S;
    int m,a[Max],n,d,x;
    scanf("%d",&m);
    Initstack(S);
    for(int i=0;i<m;i++)
    {
     
        scanf("%d",&a[i]);
        Pushstack(S,a[i]);
    }
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
     
        Popstack(S,&d);
    }
    if(Emptystack(S))
    {
     
        Topstack(S,&x);
        printf("%d",x);
    }
    else
        printf("-1");
}

你可能感兴趣的:(SWUST OJ1044&1046顺序栈&链栈基本操作实现)