栈是一种数据结构,在计算机科学中被广泛使用。今天刚刚上了数据结构课,晚上就顺便写了一个比较简单的栈。
栈的特性在百度百科还有维基百科都有提到。其它菊苣的博客里面也有详细阐述,就不再赘述了。
直接把我写的栈贴出来。希望大家能够一起进步!
#include <iostream>
using namespace std;
typedef int Element;
typedef struct Stack {
Element data;
Stack *next;
}node;
node *initStack() {
node *top = new node;
if (top == NULL) {
cout << "分配内存失败!请检查程序!" << endl;
exit(-1);
}
top -> data = -1;
top -> next = NULL;
cout << "创建栈成功!" << endl;
return top;
}
bool isEmpty(node *top) {
if (top -> next == NULL) {
return true;
} else {
return false;
}
}
void pushStack(node *top, Element e) {
node *p = new node;
if (p == NULL) {
cout << "分配内存失败!请检查程序!" << endl;
exit(-1);
}
p -> data = e;
p -> next = top -> next;
top -> next = p;
}
void popStack(node *top) {
if (isEmpty(top)) {
cout << "该栈为空!" << endl;
return;
}
node *p = top -> next;
top -> next = p -> next;
delete p;
}
void clearStack(node *top) {
if (isEmpty(top)) {
cout << "该栈为空!" << endl;
return;
}
node *p;
while (top -> next) {
p = top -> next;
delete top;
top = p;
}
delete top;
cout << "该栈已经被清空!" << endl;
}
Element topStack(node *top) {
return top -> next -> data;
}
int main()
{
int n;
node *stack1 = initStack();
cout << "请输入您想要插入栈的数据的个数: [10] ";
cin >> n;
for (int i = 1; i <= n; ++i) {
Element data;
cout << "请输入您想插入栈中的数据: ";
cin >> data;
pushStack(stack1, data);
}
cout << "*************************************************************" << endl;
cout << "您输入的数据是: " << endl;
for (int i = 1; i <= n; ++i) {
cout << "第 " << i << " 个数是 " << topStack(stack1) << endl;
popStack(stack1);
}
clearStack(stack1);
return 0;
}
运行结果: