原创

栈的顺序存储结构-顺序栈的基本操作

温馨提示:
本文最后更新于 2021年02月23日,已超过 588 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

栈的的定义

只能在表的一端(栈顶)进行插入和删除操作的线性表。
file

栈的基本操作

顺序栈的表示

file

/*定义顺序栈*/
typedef struct {
    int *base;  //用于栈存储的基地址 
    int *top;  //指向该基地址的栈顶指针 
    int stackSize;  //栈的大小 
}SqStack;

顺序栈的初始化

/*初始化*/
int InitStack_S(SqStack &S){
    S.base = (int *)malloc(sizeof(int));  //给基地址分配一个内存空间 
    S.top = S.base;  //将栈顶指针指向这个基地址 
    S.stackSize = MAXSIZE;  //设置栈的大小 
    return 0;
}

进栈操作

/*进栈*/
int Push(SqStack &S,int e){
    if(S.top-S.base==S.stackSize) return -1;
    *S.top = e;  //将输入的值压入栈中 
    S.top++;  //指针上移一个单位 
    return 0;
}

出栈操作

/*出栈*/
int Pop(SqStack &S,int &e) {
    if(S.base==S.top) return -1;
    S.top--;  //指针下移一个 
    e = *S.top;  //将当前指针所指的值赋值给e 
    return 0;
}

获取顺序栈的长度

/*获取栈的长度*/
int GetLength_S(SqStack S){
    return S.top-S.base;  
}

判断栈空

/*判断栈空*/ 
int StackEmpty(SqStack S) {
    if(S.top==S.base) return 0;  //为空返回 0 
    return 1;  //不为空返回1 
}

清空顺序栈

/*清空栈*/ 
int ClearStack(SqStack S){
    if(S.base) //栈不为空 
    S.base = S.top;
    return 0;
}

销毁顺序栈

/*销毁栈*/ 
int DestroyStack(SqStack &S){
    if(S.base){
    free(S.base);
    S.stackSize = 0;
    S.top = S.base = NULL; 
    }
    return 0;
}

读取栈顶元素

/*读取栈顶元素*/
int GetTop(SqStack S) {
    return *(S.top-1); 
}

完整代码

#include <stdio.h> 
#include <stdlib.h>
#define MAXSIZE 100
/*定义顺序栈*/
typedef struct {
    int *base;  //用于栈存储的基地址 
    int *top;  //指向该基地址的栈顶指针 
    int stackSize;  //栈的大小 
}SqStack;

/*初始化*/
int InitStack_S(SqStack &S){
    S.base = (int *)malloc(sizeof(int));  //给基地址分配一个内存空间 
    S.top = S.base;  //将栈顶指针指向这个基地址 
    S.stackSize = MAXSIZE;  //设置栈的大小 
    return 0;
} 
/*进栈*/
int Push(SqStack &S,int e){
    if(S.top-S.base==S.stackSize) return -1;
    *S.top = e;  //将输入的值压入栈中 
    *S.top++;  //指针上移一个单位 
    return 0;
} 
/*出栈*/
int Pop(SqStack &S,int &e) {
    if(S.base==S.top) return -1;
    *S.top--;  //指针下移一个 
    e = *S.top;  //将当前指针所指的值赋值给e 
    return 0;
}
/*获取栈的长度*/
int GetLength_S(SqStack S){
    return S.top-S.base;  
}
/*判断栈空*/ 
int StackEmpty(SqStack S) {
    if(S.top==S.base) return 0;  //为空返回 0 
    return 1;  //不为空返回1 
} 
/*清空栈*/ 
int ClearStack(SqStack S){
    if(S.base) //栈不为空 
    S.base = S.top;
    return 0;
} 
/*销毁栈*/ 
int DestroyStack(SqStack &S){
    if(S.base){
    free(S.base);
    S.stackSize = 0;
    S.top = S.base = NULL; 
    }
    return 0;
}
/*读取栈顶元素*/
int GetTop(SqStack S) {
    return *(S.top-1); 
}
main(){
    SqStack S;
    int out;
    int initStatus = InitStack_S(S); 
    if(initStatus==0){
        printf("初始化成功!\n"); 
    }else{
        printf("初始化失败!\n"); 
    }
    printf("================\n");
    Push(S,2);  //元素2进栈 
    printf("元素2进栈\n");
    Push(S,3);  //元素3进栈
    printf("元素3进栈\n");
    Push(S,4);  //元素4进栈
    printf("元素4进栈\n");
    Push(S,5);  //元素5进栈
    printf("元素5进栈\n");
    printf("================\n");
    printf("栈顶元素为:%d\n",GetTop(S));
    printf("================\n");
    Pop(S,out);  //栈顶元素出栈
    printf("出栈元素为:%d\n",out); 
    printf("栈顶元素为:%d\n",GetTop(S));
    printf("================\n");
    Pop(S,out);  //栈顶元素出栈
    printf("出栈元素为:%d\n",out); 
    printf("栈顶元素为:%d\n",GetTop(S));


}

运行结果

file

正文到此结束
本文目录