栈的基本操作的实现(初始化、赋值、取值、插入、删除等)
源程序及注释
#pragma once
#include<iostream>
using namespace std;
#define OK 1
#define ERROR 0
typedef int Status;
typedef int SElemType;
//链栈的存储结构
typedef struct StackNode {
SElemType data;
struct StackNode *next;
}StackNode,*LinkStack;
//初始化操作
Status InitStack(LinkStack &S)
{//构造一个空栈,栈顶指针置空
S = NULL;
return OK;
}
//入栈
Status Push(LinkStack &S, SElemType e)
{
LinkStack p;
p = new StackNode; //构造一个新的节点
p->data = e; //将新节点数据域置为e
p->next = S; //将新节点插入栈顶
S = p; //修改栈顶指针为p
return OK;
}
//赋值
Status fuzhi(LinkStack &S)
{
cout << "请输入要入栈元素的个数:";
int m;
cin >> m;
SElemType e;
cout << "请输入要入栈的元素:" << endl;
for (int i = 0; i < m; i++)
{
cin >> e;
Push(S, e);
}
return OK;
}
//遍历输出
Status StackTraverse(LinkStack S)
{
if (S)
{
cout << S->data << " ";
StackTraverse(S->next);
}
return OK;
}
//出栈
Status Pop(LinkStack &S, SElemType &e) {
//删除S的栈顶元素,用e返回其值
if (S == NULL)
return ERROR; //判断栈是否为空
LinkStack p;
p = S; //用p临时保存栈顶元素空间,以便释放
e = S->data; //将栈顶元素复制给e
S = S->next; //修改栈顶指针
delete p; //释放栈顶元素的空间
return OK;
}
//取栈顶元素
Status GetTop(LinkStack S) {
//返回S的栈顶元素,不修改栈顶指针
if (S == NULL)
return ERROR;
return S->data;
}
void main()
{
LinkStack S;
//初始化操作
InitStack(S);
//赋值操作
fuzhi(S);
cout << "栈中的元素为:" << endl;
StackTraverse(S);
cout << endl;
//出栈
SElemType a;
Pop(S, a);
cout << "出栈的元素为:" << a<<endl;
//取栈顶元素
SElemType b;
b = GetTop(S);
cout << "栈顶元素为:" << b << endl;
system("pause");
}
运行结果