尼采般地抒情

公告栏

此网站主题为本人手写主题, 主题待开源···

站点信息

文章总数目: 298
已运行时间: 991
目录
  1. 顺序栈
  2. 链栈

尼采般地抒情

尼采般地抒情

公告栏

此网站主题为本人手写主题, 主题待开源···

站点信息

文章总数目: 298
已运行时间: 991


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

顺序栈

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

评论区

Twikoo giscus