数据结构——顺序栈的基本操作(C++)


前言

栈是一种先进后出的数据结构,本文主要介绍顺序栈的基本操作。


一、栈的建立

本文的顺序栈的结构体中一共含有两个变量,一个是字符类型的指针用于存储字符(这个变量的类型可按照使用场景变换,本文主要用来存储字符所以使用字符类型),一个是整形数据做为指针指向栈顶。

#define MAXSIZE 100
typedef struct Stack {
	char* data;
	int top;
}Stack;

二、栈的初始化

当栈中没有元素时,栈顶指针top初始化为-1

//初始化栈
void Init_Stack(Stack& s)
{
	s.top = -1;
	s.data = new char[MAXSIZE];
}

三、判断栈是否为空

//判断栈是否为空 返回1为空 返回0不为空
int is_Empty(Stack s)
{
	if (s.top == -1)
	{
		return 1;
	}
	return 0;
}

四、入栈操作

//元素入栈
void Push_Stack(Stack& s,char ch)
{
	if (s.top == MAXSIZE - 1)
	{
		cout << "满栈,无法输入" << endl;
		return;
	}
	s.top++;
	s.data[s.top] = ch;
	//cout << "入栈成功" << endl;
}

五、出栈操作

//元素出栈 并返回栈顶元素
void Pop_Stack(Stack& s, char& e)
{
	if (s.top == -1)
	{
		cout << "这是空栈" << endl;
		return;
	}
	e = s.data[s.top];
	s.top--;
}

六、遍历栈

//遍历栈
void Traverse_Stack(Stack s)
{
	int i = 0;
	while (i <= s.top)
	{
		cout << s.data[i] << ' ';
		i++;
	}
	cout << endl;
}

七、清空栈

//清空栈
void Clear_Stack(Stack& s)
{
	s.top = -1;
}
int Stack_length(Stack s)
{
	return s.top + 1;
}

八、所有源码

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;
#define MAXSIZE 100
typedef struct Stack {
	char* data;
	int top;
}Stack;
//初始化栈
void Init_Stack(Stack& s)
{
	s.top = -1;
	s.data = new char[MAXSIZE];
}
//判断栈是否为空 返回1为空 返回0不为空
int is_Empty(Stack s)
{
	if (s.top == -1)
	{
		return 1;
	}
	return 0;
}
//元素入栈
void Push_Stack(Stack& s,char ch)
{
	if (s.top == MAXSIZE - 1)
	{
		cout << "满栈,无法输入" << endl;
		return;
	}
	s.top++;
	s.data[s.top] = ch;
	//cout << "入栈成功" << endl;
}
//元素出栈 并返回栈顶元素
void Pop_Stack(Stack& s, char& e)
{
	if (s.top == -1)
	{
		cout << "这是空栈" << endl;
		return;
	}
	e = s.data[s.top];
	s.top--;
}
//遍历栈
void Traverse_Stack(Stack s)
{
	int i = 0;
	while (i <= s.top)
	{
		cout << s.data[i] << ' ';
		i++;
	}
	cout << endl;
}
//清空栈
void Clear_Stack(Stack& s)
{
	s.top = -1;
}
int Stack_length(Stack s)
{
	return s.top + 1;
}
int main()
{
	Stack s;
	Init_Stack(s);
	if (is_Empty(s))
	{
		cout << "栈为空" << endl;
	}
	Push_Stack(s, 'a');
	Push_Stack(s, 'b');
	Push_Stack(s, 'c');

	Traverse_Stack(s);

	cout<<"栈的长度为:"<<Stack_length(s)<<endl;
	char e = 0;
	Pop_Stack(s, e);
	cout << e << endl;
	Pop_Stack(s, e);
	cout << e << endl;
	Pop_Stack(s, e);
	cout << e << endl;

	Clear_Stack(s);
	if (is_Empty(s))
	{
		cout << "栈为空" << endl;
	}
	return 0;
}
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

若鱼不是鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值