顺序栈练习

顺序栈练习

相关内容:
1.判断顺序栈栈满的两种方式
2.一张图理解栈顶指针加加减减的问题
3.栈的顺序存储结构(顺序栈)

//顺序栈的初始化、判空、入栈、出栈、读取栈顶元素
//顺序栈的结构:数组、栈顶指针(本质是下标)
#include<stdio.h>
#define MAXSIZE 10
typedef int Status;
#define TRUE 1
#define FALSE 0
typedef struct
{
    
    
    int data[MAXSIZE];
    int top;//栈顶指针
}SqStack;
//顺序栈的初始化:初始化栈顶指针
Status InitSqStack(SqStack *S){
    
    
    S->top=-1;
    return TRUE;
}
//顺序栈的判空(使用前,不是使用时):栈顶指针为-1
Status isEmpty(SqStack *S){
    
    
    if (S->top==-1)
        return TRUE;
    else
        return FALSE;
}
//顺序栈的入栈:判满,栈顶指针+1,添加元素
Status Push(SqStack *S,int e){
    
    
    if (S->top==MAXSIZE-1)//判满
        return FALSE;
    S->data[++S->top]=e;//先++后使用top
    return TRUE;
}
//顺序栈的出栈:判空,栈顶元素出栈,栈顶指针-1
Status Pop(SqStack *S,int *e){
    
    
    if (S->top==-1)//判空
        return FALSE;   
    else{
    
    
        *e=S->data[S->top--];
        return TRUE;
    }
}
//顺序栈的读取栈顶元素:判空,返回元素
Status GetElem(SqStack *S,int *e){
    
    
    if (S->top==-1)//判空
        return FALSE;   
    else{
    
    
        *e=S->data[S->top];
        return TRUE;
    }
}
int main(){
    
    
    int n,e;
    SqStack S;
    InitSqStack(&S);
    printf("初始化完成!\n");
    if (!isEmpty(&S))//使用前判空
        printf("栈空!\n");
    printf("输入需要进栈的元素个数:");
    scanf("%d",&n);
    for (size_t i = 0; i < n; i++)
    {
    
    
        printf("输入第%d个进栈元素:",i+1);
        scanf("%d",&e);
        Push(&S,e);
    }
    GetElem(&S,&e);
    printf("栈顶元素为:%d\n",e);
    printf("所有元素出栈\n");
    for (size_t i = 0; i < n; i++)
    {
    
    
        printf("输出第%d个出栈元素:",i+1);
        Pop(&S,&e);
        printf("%d\n",e);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_48524215/article/details/134220161