//链栈
#include <iostream>
using namespace std;
#define ERROR 0
#define OK 1
typedef int ElemType;
typedef bool Status;
typedef struct StackNode
{
ElemType data;
StackNode* next;
} *LinkStack;
//打印链栈
void printStack(LinkStack &S)
{
LinkStack p = S;
while (p)
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
//初始化
void init(LinkStack &S)
{
S = nullptr; //将栈顶指针置为空
}
//入栈
void push(LinkStack &S, ElemType e)
{
LinkStack p =new StackNode;
p->data = e;
p->next = S;
S = p;
}
//出栈
Status pop(LinkStack &S, ElemType &e)
{
if (!S) return ERROR; //栈空
e = S->data;
LinkStack p = S;
S = S->next;
delete p;
}
//取栈顶
LinkStack getTop(LinkStack& S)
{
return S; //如果栈为空,返回空指针
}
//建立,取栈顶,入栈,出栈操作测试
void test()
{
LinkStack S;
init(S);
cout << "入栈测试:" << endl;
cout << "入1- 10, 从栈顶开始打印:";
for (int i = 0; i < 10; i ++ ) push(S, i + 1);
printStack(S);
cout << endl;
cout << "出栈和取栈顶操作测试:" << endl;
cout << "出栈一次:";
int e;
pop(S, e);
printStack(S);
cout << "原先的栈顶为:" << e << ",现在的栈顶为:" << getTop(S)->data << endl;
cout << "将剩余元素全部出栈后,再出栈一次,此时的栈顶为:";
for (int i = 0; i < 9; i ++ ) pop(S, e);
if (!getTop(S)) cout << "栈已经为空,无法取到栈顶!" << endl;
}
int main()
{
//建立,取栈顶,入栈,出栈操作测试
test();
return 0;
}
(C语言 C++) 数据结构:链栈的实现
于 2023-03-31 15:53:39 首次发布