- 链式栈的实现
栈的初始化
压栈
首元素出栈
栈的遍历
销毁栈
栈空判断 - 顺序栈的实现
压栈
首元素出栈
栈的遍历
栈判空
栈是一种重要的线性结构,栈也属于线性表,其插入和删除都在同一端即栈顶进行,同时栈具有先进后出,后进先出的特点。
链式栈:
#include<iostream>
using namespace std;
class Node {
public:
int data;
Node *next;
};
class Stacklist {
public:
//栈初始化
void initStack(Stacklist &S) {
Node *pstart = new Node;
pstart->next = NULL;
S.base = pstart;
S.top = pstart;
}
//压栈
void pushstack(Stacklist &S) {
Node *snew = new Node;
if (snew == NULL) {
cout << "申请内存失败"<<endl;
exit(-1);
}
else {
cout << "请输入需要压入栈节点的数值=";
cin >> snew->data;
snew->next = S.top;
S.top = snew;
}
}
//首元素出栈
void popstack(Stacklist &S) {
Node *s, *del;
if (S.base == S.top) {
cout << "空栈" << endl;
}
else {
del = S.top;
s = S.top->next;
delete del;
del = NULL;
S.top = s;
}
}
//栈的遍历
void traverse(Stacklist &S) {
Node *p;
p = S.top;
while (p != S.base) {
cout << p->data<<" ";
p = p->next;
}
cout << endl;
}
//销毁栈
void destroy(Stacklist &S) {
if (S.base == S.top) {
cout << "空栈!" << endl;
}
else {
Node *p = new Node;
while (S.base != S.top) {
p = S.top;
S.top = p->next;
delete p;
p = NULL;
}
}
}
//判断栈空
void Isempty(Stacklist &S) {
if (S.base == S.top) {
cout << "此栈为空栈!" << endl;
}
else {
cout << "此栈为非空栈!" << endl;
}
}
private:
Node *top, *base;
};
void main() {
Stacklist *sta = new Stacklist;
int n;
sta->initStack(*sta);
cout << "请输入需要压入栈的节点个数 = ";
cin >> n;
for (int i = 0; i < n; i++) {
sta->pushstack(*sta);
}
cout << "出栈顺序:";
sta->traverse(*sta);
sta->popstack(*sta);
cout << "首元素出栈后栈内元素:";
sta->traverse(*sta);
sta->Isempty(*sta);
sta->destroy(*sta);
cout <<"栈销毁后为";
sta->Isempty(*sta);
}
代码实现结果:
顺序栈:
#include<iostream>
#include<assert.h>
using namespace std;
class Stack {
public:
Stack(int lengthget) {
data = new int[lengthget];
length = lengthget;
top = 0;
base = 0;
}
~Stack() {
delete[]data;
}
//压栈
void push(int element) {
if (top < length) {
data[top] = element;
top++;
}
else {
cout << "压栈出现错误";
}
}
//首元素出栈
void pop() {
assert(top < length);
top = top - 1;
}
//栈的遍历
void traverse() {
assert(top < length);
cout << "出栈顺序:";
for (int i = top-1; i >= base; i--) {
cout << data[i] << " ";
}
cout << endl;
}
//判空
void Isempty() {
if (top == 0) {
cout << "空栈!" << endl;
}
else
cout << "非空栈!" << endl;
}
private:
int *data;
int top;
int base;
int length;
};
int main() {
Stack st(100);
int value,n;
cout << "请输入栈内元素个数 =";
cin >> n;
for (int i = 0; i < n; i++) {
cout << "请输入栈内第"<<i+1<<"个元素的值=";
cin >> value;
st.push(value);
}
st.traverse();
st.pop();
cout << "删除第一个元素后";
st.traverse();
st.Isempty();
return 0;
}
代码实现结果: