尼采般地抒情

尼采般地抒情

尼采般地抒情

音乐盒

站点信息

文章总数目: 316
已运行时间: 1570


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

顺序栈

#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";
}

评论区