数据结构——顺序栈的基本操作(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;
}

猜你喜欢

转载自blog.csdn.net/weixin_63614711/article/details/127981123