栈-顺序存储结构

栈(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);
}

猜你喜欢

转载自blog.csdn.net/weixin_43340991/article/details/84289357