栈(stack)-顺序存储结构
定义:限定仅在表尾进行插入和删除操作的线性表(后进先出原则)
包括:
插入和删除操作的一端称为栈顶
另一端称为栈底
栈的插入操作,叫做进栈。
栈的删除操作,叫做出栈。
顺序存储结构
栈存在一个元素时,top等于0,栈存在两个元素时,top等于1。
栈结构
const int MaxSize = 5;
//栈的顺序储存结构
typedef struct _Node{
int data[MaxSize];
int top = -1;//用于栈顶的指针 默认是-1,表示空栈
}Node;
空栈:
不含任何数据元素的的栈就做空栈
初始化栈
图示如下:
代码如下:
//初始化节点
void createStack(Node *node, int num)
{
if (num > MaxSize)//num大于数组最大可用个数
{
cout << "报错" << endl;
return;
}
else
{
for (int i = 1; i <= 3; i++)//创建3个节点
{
node->top++;//栈顶指针自加
node->data[node->top] = i;
}
}
}
进栈
图示如下:
代码如下:
//插入节点--进栈
void InsertStack(Node *node, int insertNum)
{
if (node->top == MaxSize)//栈满的情况
{
cout << "报错" << endl;
return;
}
else
{
node->top++;//栈顶指针移动
node->data[node->top] = insertNum;
}
}
出栈
图示如下:
代码如下:
//删除节点--出栈
void deleteStack(Node *node, int *deleteNum)
{
if (node->top == -1)//栈空的情况
{
cout << "报错" << endl;
return;
}
else
{
*deleteNum = node->data[node->top]; //获得删除的值
node->data[node->top] = 0; //节点值清零
node->top--;
}
}
打印栈
//打印栈
void printStack(Node *node)
{
for (int i = 0; i <= node->top; i++)
{
cout << node->data[i] << endl;
}
}
mian函数测试
int main()
{
Node *node = new Node();//创建新的节点指针
//初始化节点
createStack(node, 3);
//插入节点--进栈
InsertStack(node, 100);
int n;//存储要删除的节点
//删除节点--出栈
deleteStack(node, &n);
cout << n << endl;//打印删除的节点值
cout << endl;//换行
//打印栈
printStack(node);
}