栈的基本操作

栈的顺序存储结构


缺点:要设置栈存储的最大值


顺序栈的实现


#include "iostream"

#define MaxSize 50

//栈的结构体
struct Stack{
    int data[MaxSize];
    int top;
}stack;

//初始化栈
void init(){
    stack.top = -1;
}

//判断是否栈空
bool isEmpty(){
    if (stack.top == -1){
        printf("栈空\n");
        return true;
    }
    return false;
};

//判断是否栈满
bool isFull(){
    if (stack.top == MaxSize - 1){
        printf("栈满\n");
        return true;
    }
    return false;
};

//入栈
int push(int num){
    if (!isFull()){
        stack.top = stack.top + 1;
        stack.data[stack.top] = num;
    }
    return -1;  //当栈满的时候返回-1
}

//出栈
int pop(){
    if (!isEmpty()){
        stack.top = stack.top - 1;
        return stack.data[stack.top + 1];
    }
    return -1;  //当栈空的时候返回-1
}

int main(){
    init();
    
    //入栈
    for (int i = 1; i <=5; i++){
        push(i);
    }
    
    //出栈,调用一次出栈一次
    pop();

    printf("%d\n", pop());

}

共享栈

优点:更有效的利用存储空间,两个栈的空间相互调节


栈的链式存储结构

栈链


优点:不存在栈满上溢的情况


#include "iostream"

struct Stack{
    Stack *next;
    int data;
}stack;

//判断栈是否为空
bool isEmpty(Stack *top){
    if (top == NULL){
        printf("栈空\n");
        return true;
    } else{
        return false;
    }
}

//入栈
Stack *push(Stack *top, int num){
    Stack *s = (Stack *) malloc(sizeof (Stack));
    s -> data = num;
    s -> next = top;
    top = s;
    return top;
}

//出栈
Stack *pop(Stack *top){
    if (!isEmpty(top)){
        printf("%d\n", top -> data);
        top = top -> next;
        return top;
    }
}


int main(){
    Stack *top = (Stack *) malloc (sizeof (Stack));
    top = NULL;

    //入栈
    for (int i = 1; i <=2; i++){
        top = push(top, i);
    }

    //出栈
    top = pop(top);
    top = pop(top);
    top = pop(top);

}
posted @ 2022-09-27 11:57  MiYol  阅读(35)  评论(0)    收藏  举报