前言
栈是一种先进后出的数据结构,本文主要介绍顺序栈的基本操作。
一、栈的建立
本文的顺序栈的结构体中一共含有两个变量,一个是字符类型的指针用于存储字符(这个变量的类型可按照使用场景变换,本文主要用来存储字符所以使用字符类型),一个是整形数据做为指针指向栈顶。
#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;
}