尼采般地抒情

尼采般地抒情

尼采般地抒情 |

音乐盒

站点信息

文章总数目: 319
已运行时间: 1926


存储形式以及操作和顺序表和链表差不多,需要的操作也少,学栈和队列,感觉只是抽离出来这两种便于在应用层面使用

顺序栈

#include<bits/stdc++.h>
typedef int Status;
typedef int SElemType;
#define OVERFLOW -1
#define ERROR 0
#define OK 1
#define MAXSIZE 100

using namespace std;
/**
 * 顺序栈
 * 
 * 顺序栈的基本操作:初始化、入栈、出栈、取栈顶元素
 */

/* 顺序栈的存储形式 */
typedef struct {
    SElemType *base;
    SElemType *top;
    int stacksize;
} SqStack;

/* 初始化 */
Status InitSqStack(SqStack &stack) {
    // 为栈分配容量
    stack.base = new int[MAXSIZE];
    // 分配失败返回失败值
    if (!stack.base) {
        return OVERFLOW;
    }
    // 让栈顶地址初始为栈底地址
    stack.top = stack.base;
    // 初始化容量
    stack.stacksize = MAXSIZE;
    return OK;
}

/* 入栈 */
Status Push(SqStack &stack, SElemType e) {
    if (stack.top - stack.base == stack.stacksize) {
        return OVERFLOW;
    }
    *stack.top = e; // 先在top位置赋值
    stack.top++; // 将top地址++
    return OK;
}

/* 出栈 */
Status Pop(SqStack &stack) {
    // 空栈返回异常
    if (stack.top == stack.base) {
        return OVERFLOW;
    }
    stack.top--; // 栈顶地址减1
    return *stack.top; // 返回此时“栈顶”元素
}

/* 取栈顶元素 */
Status GetTop (SqStack &stack) {
    // 空栈返回异常
    if (stack.top == stack.base) {
        return OVERFLOW;
    }
    // stack.top--; // 栈顶地址减1,这是和出栈的区别
    return *(stack.top-1); // 返回此时“栈顶”元素
}

int main() {
    SqStack test;
    InitSqStack(test);
    Push(test, 10);
    Push(test, 15);
    Push(test, 20);
    cout << GetTop(test)<<" "<< GetTop(test)<<" "<< GetTop(test)<<" "<<"\n";
    cout << Pop(test)<<" "<< Pop(test)<<" "<< Pop(test)<<" "<<"\n";
}

链栈

#include<bits/stdc++.h>
typedef int Status;
typedef int SElemType;
#define OVERFLOW -1
#define ERROR 0
#define OK 1
#define MAXSIZE 100

using namespace std;
/**
 * 链栈
 * 
 * 链栈的基本操作:初始化、入栈、出栈、取栈顶元素
 */

/* 链栈的存储形式 */
typedef struct StackNode{
    SElemType data;
    struct StackNode *next;
} StackNode, *LinkStack;

/**
 * 初始化
 * 不设头结点
 */
Status InitLinkStack(LinkStack &stack) {
    stack = NULL; // 栈顶元素置空
    return OK;
}

/* 入栈 */
Status Push(LinkStack &stack, SElemType e) {
    // 不能用LinkStack这样声明结点变量,需要new一个内存空间
    LinkStack temp = new StackNode;
    temp->data = e;
    temp->next = stack;
    stack = temp;
    return OK;
}

/* 出栈 */
Status Pop (LinkStack &stack) {
    SElemType i = stack->data;
    stack = stack->next;
    return i;
}

/* 取栈顶元素 */
Status GetTop (LinkStack &stack) {
    return stack->data;
}


int main() {
    LinkStack test;
    InitLinkStack(test);
    Push(test, 10);
    Push(test, 15);
    Push(test, 20);
    cout << GetTop(test)<<" "<< GetTop(test)<<" "<< GetTop(test)<<" "<<"\n";
    cout << Pop(test)<<" "<< Pop(test)<<" "<< Pop(test)<<" "<<"\n";
}

评论区

Nickname
Email
Website
0/500
0 comments

什么都不舍弃,什么也改变不了