五种编程语言解释数据结构与算法—顺序栈
时间:2020-03-06
本文章向大家介绍五种编程语言解释数据结构与算法—顺序栈,主要包括五种编程语言解释数据结构与算法—顺序栈使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
目录
五种编程语言解释数据结构与算法—顺序栈
1、栈的介绍
1.1、栈的基本概念
==栈只允许一端进行插入或者删除操作的线性表==
特点:后进先出
1.2、栈的基本操作
2、栈的顺序存储结构
2.1、栈的逻辑示意图
2.2、判断栈空、栈满和求栈长
2.3、特殊的顺序栈—共享栈
3、使用C语言来实现顺序栈
3.1、SeqStack.h文件中的内容
#ifndef XGP_STUDY_DEMO47_SEQSTACK_H
#define XGP_STUDY_DEMO47_SEQSTACK_H
//数组去模拟栈的顺序存储
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 1024
typedef struct SEQSTACK {
void* data[MAX_SIZE];
int size;
}SeqStack;
//1,初始化栈
SeqStack* Init_SeqStack();
//2,入栈
void Push_SeqStack(SeqStack* stack,void* data);
//3,返回栈顶元素
void* Top_SeqStack(SeqStack* stack);
//4,出栈
void* Pop_SeqStack(SeqStack* stack);
//5,判断是否为空
int IsEmpty(SeqStack* stack);
//6,返回栈中元素的个数
int Size_SeqStack(SeqStack* stack);
//7,销毁
void FreeSpace_SeqStack(SeqStack* stack);
//8,清空栈
void Clear_SeqStack(SeqStack* stack);
#endif //XGP_STUDY_DEMO47_SEQSTACK_H
3.2、SeqStack.c文件中的内容
#include "SeqStack.h"
//1,初始化栈
SeqStack* Init_SeqStack() {
SeqStack* stack = (SeqStack*)malloc(sizeof(SeqStack));
for(int i = 0;i < MAX_SIZE;i++) {
stack->data[i] = NULL;
}
stack->size = 0;
return stack;
}
//2,入栈
void Push_SeqStack(SeqStack* stack,void* data) {
if(stack == NULL) return;
if(data == NULL) return;
if(stack->size == MAX_SIZE) return;
stack->data[stack->size] = data;
stack->size++;
}
//3,返回栈顶元素
void* Top_SeqStack(SeqStack* stack) {
if(stack == NULL) return NULL;
if(stack->size == 0) return NULL;
return stack->data[stack->size - 1];
}
//4,出栈
void* Pop_SeqStack(SeqStack* stack) {
if(stack == NULL) return NULL;
if(stack->size == 0) return NULL;
void* save = stack->data[stack->size - 1];
stack->data[stack->size - 1] = NULL;
stack->size--;
return save;
}
//5,判断是否为空
int IsEmpty(SeqStack* stack) {
if(stack == NULL) return -1;
if(stack->size == 0) return 1;
return 0;
}
//6,返回栈中元素的个数
int Size_SeqStack(SeqStack* stack) {
if(stack == NULL) return -1;
return stack->size;
}
//7,销毁
void FreeSpace_SeqStack(SeqStack* stack) {
if(stack == NULL) return;
free(stack);
}
//8,清空栈
void Clear_SeqStack(SeqStack* stack) {
if(stack == NULL) return;
for(int i = 0;i < stack->size;i++) {
stack->data[i] = NULL;
}
stack->size = 0;
}
3.3、main.c文件中的内容
#include "SeqStack.h"
typedef struct PERSON {
char name[64];
int age;
}Person;
int main() {
//创建栈
SeqStack* stack = Init_SeqStack();
//创建数据
Person p1 = {"aaa",18};
Person p2 = {"bbb",19};
Person p3 = {"ccc",20};
Person p4 = {"ddd",21};
Person p5 = {"eee",22};
//入栈
Push_SeqStack(stack,&p1);
Push_SeqStack(stack,&p2);
Push_SeqStack(stack,&p3);
Push_SeqStack(stack,&p4);
Push_SeqStack(stack,&p5);
//输出
while (Size_SeqStack(stack) > 0) {
//出栈
Person* person = (Person *) Pop_SeqStack(stack);
printf("Name:%s Age:%d\n",person->name,person->age);
}
printf("%d\n",IsEmpty(stack));
FreeSpace_SeqStack(stack);
return 0;
}
3.4、输出结果
Name:eee Age:22
Name:ddd Age:21
Name:ccc Age:20
Name:bbb Age:19
Name:aaa Age:18
1
Process finished with exit code 0
4、使用C++语言来实现顺序栈
4.1、SeqStack.h文件中的内容
#ifndef XGP_STUDY_DEMO47_SEQSTACK_H
#define XGP_STUDY_DEMO47_SEQSTACK_H
//数组去模拟栈的顺序存储
#include <iostream>
using namespace std;
#define MAX_SIZE 1024
template <class T>
class SeqStack {
public:
T* data[MAX_SIZE];
int size;
//1,初始化栈
SeqStack* Init_SeqStack();
//2,入栈
void Push_SeqStack(T* data);
//3,返回栈顶元素
T* Top_SeqStack();
//4,出栈
T* Pop_SeqStack();
//5,判断是否为空
bool IsEmpty();
//6,返回栈中元素的个数
int Size_SeqStack();
//7,销毁
void FreeSpace_SeqStack();
//8,清空栈
void Clear_SeqStack();
};
#endif //XGP_STUDY_DEMO47_SEQSTACK_H
4.2、SeqStack.cpp文件中的内容
#include "SeqStack.h"
template<class T>
SeqStack<T> *SeqStack<T>::Init_SeqStack() {
for(int i = 0;i < MAX_SIZE;i++) {
this->data[i] = NULL;
}
this->size = 0;
return this;
}
template<class T>
void SeqStack<T>::Push_SeqStack(T *data) {
if(this == NULL) return;
if(data == NULL) return;
if(this->size == MAX_SIZE) return;
this->data[this->size] = data;
this->size++;
}
template<class T>
T *SeqStack<T>::Top_SeqStack() {
if(this == NULL) return NULL;
if(this->size == 0) return NULL;
return this->data[this->size - 1];
}
template<class T>
T *SeqStack<T>::Pop_SeqStack() {
if(this == NULL) return NULL;
if(this->size == 0) return NULL;
T* save = this->data[this->size - 1];
this->data[this->size - 1] = NULL;
this->size--;
return save;
}
template<class T>
bool SeqStack<T>::IsEmpty() {
if(this == NULL) return false;
if(this->size == 0) return true;
return false;
}
template<class T>
int SeqStack<T>::Size_SeqStack() {
if(this == NULL) return -1;
return this->size;
}
template<class T>
void SeqStack<T>::FreeSpace_SeqStack() {
if(this == NULL) return;
delete this;
}
template<class T>
void SeqStack<T>::Clear_SeqStack() {
if(this == NULL) return;
for(int i = 0;i < this->size;i++) {
this->data[i] = NULL;
}
this->size = 0;
}
4.3、main.cpp文件中的内容
#include "SeqStack.cpp"
class Person {
public:
string name;
int age;
Person(const string &name, int age) : name(name), age(age) {}
};
int main() {
//创建栈
SeqStack<Person>* stack = new SeqStack<Person>();
//创建数据
Person p1("aaa",18);
Person p2("bbb",19);
Person p3("ccc",20);
Person p4("ddd",21);
Person p5("eee",22);
//入栈
stack->Push_SeqStack(&p1);
stack->Push_SeqStack(&p2);
stack->Push_SeqStack(&p3);
stack->Push_SeqStack(&p4);
stack->Push_SeqStack(&p5);
//输出
while (stack->Size_SeqStack() > 0) {
//出栈
Person* person = (Person *) stack->Pop_SeqStack();
cout<<"Name:"<<person->name<<"\t"<<"Age:"<<person->age<<endl;
}
cout<<stack->IsEmpty()<<endl;
stack->FreeSpace_SeqStack();
return 0;
}
4.4、输出结果
Name:eee Age:22
Name:ddd Age:21
Name:ccc Age:20
Name:bbb Age:19
Name:aaa Age:18
1
Process finished with exit code 0
5、使用java语言来实现顺序栈
5.1、SeqStack.java文件中的内容
package com.xgp.队列的顺序存储;
public interface SeqStack<T> {
//1,初始化栈
void Init_SeqStack();
//2,入栈
void Push_SeqStack(T data);
//3,返回栈顶元素
T Top_SeqStack();
//4,出栈
T Pop_SeqStack();
//5,判断是否为空
boolean IsEmpty();
//6,返回栈中元素的个数
int Size_SeqStack();
//7,销毁
void FreeSpace_SeqStack();
//8,清空栈
void Clear_SeqStack();
}
5.2、SeqStackImpl.java文件中的内容
package com.xgp.队列的顺序存储;
public class SeqStackImpl<T> implements SeqStack<T> {
public final static int MAX_SIZE = 1024;
public Object data[] = new Object[MAX_SIZE];
public int size;
@Override
public void Init_SeqStack() {
for(int i = 0;i < MAX_SIZE;i++) {
this.data[i] = null;
}
this.size = 0;
}
@Override
public void Push_SeqStack(T data) {
if(data == null) return;
if(this.size == MAX_SIZE) return;
this.data[this.size] = data;
this.size++;
}
@Override
public T Top_SeqStack() {
if(this.size == 0) return null;
return (T) this.data[this.size - 1];
}
@Override
public T Pop_SeqStack() {
if(this.size == 0) return null;
T save = (T) this.data[this.size - 1];
this.data[this.size - 1] = null;
this.size--;
return save;
}
@Override
public boolean IsEmpty() {
if(this.size == 0) return true;
return false;
}
@Override
public int Size_SeqStack() {
return this.size;
}
@Override
public void FreeSpace_SeqStack() {
Clear_SeqStack();
System.gc();
}
@Override
public void Clear_SeqStack() {
for(int i = 0;i < this.size;i++) {
this.data[i] = null;
}
this.size = 0;
}
}
5.3、Main.java文件中的内容
package com.xgp.队列的顺序存储;
public class Main {
public static void main(String[] args) {
SeqStack<Person> stack = new SeqStackImpl<>();
stack.Init_SeqStack();
Person p1 = new Person("aaa",18);
Person p2 = new Person("bbb",19);
Person p3 = new Person("ccc",20);
Person p4 = new Person("ddd",21);
Person p5 = new Person("eee",22);
stack.Push_SeqStack(p1);
stack.Push_SeqStack(p2);
stack.Push_SeqStack(p3);
stack.Push_SeqStack(p4);
stack.Push_SeqStack(p5);
while (!stack.IsEmpty())
System.out.println(stack.Pop_SeqStack());
System.out.println(stack.IsEmpty());
stack.FreeSpace_SeqStack();
}
}
class Person {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
5.4、输出结果
Person{name='eee', age=22}
Person{name='ddd', age=21}
Person{name='ccc', age=20}
Person{name='bbb', age=19}
Person{name='aaa', age=18}
true
进程完成,退出码 0
6、使用JavaScript语言来实现顺序栈
6.1、SeqStack.js文件中的内容
class SeqStack {
Init_SeqStack() {
this.MAX_SIZE = 1024;
this.data = [];
for(var i = 0;i < this.MAX_SIZE;i++) {
this.data[i] = null;
}
this.size = 0;
}
Push_SeqStack(data) {
if(this == null) return;
if(data == null) return;
if(this.size == this.MAX_SIZE) return;
this.data[this.size] = data;
this.size++;
}
Top_SeqStack() {
if(this == null) return null;
if(this.size == 0) return null;
return this.data[this.size - 1];
}
Pop_SeqStack() {
if(this == null) return -1;
if(this.size == 0) return null;
var save = this.data[this.size - 1];
this.data[this.size - 1] = null;
this.size--;
return save;
}
IsEmpty() {
if(this == null) return true;
if(this.size == 0) return true;
return false;
}
Size_SeqStack() {
if(this == null) -1;
return this.size;
}
FreeSpace_SeqStack() {
if(this == null) return;
this.Clear_SeqStack();
}
Clear_SeqStack() {
if(this == null) return;
for(var i = 0;i < this.size;i++) {
this.data[i] = null;
}
this.size = 0;
}
}
6.2、SeqStack.html文件中的内容
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="SeqStack.js"></script>
</head>
<body>
<script>
class Person {
constructor(name,age) {
this.name = name;
this.age = age;
}
print() {
console.log("Name:" + this.name + "\t" + "Age:" + this.age);
}
}
var stack = new SeqStack();
stack.Init_SeqStack();
var p1 = new Person("aaa",18);
var p2 = new Person("bbb",19);
var p3 = new Person("ccc",20);
var p4 = new Person("ddd",21);
var p5 = new Person("eee",22);
stack.Push_SeqStack(p1);
stack.Push_SeqStack(p2);
stack.Push_SeqStack(p3);
stack.Push_SeqStack(p4);
stack.Push_SeqStack(p5);
while (!stack.IsEmpty())
stack.Pop_SeqStack().print();
console.log(stack.IsEmpty());
stack.FreeSpace_SeqStack();
</script>
</body>
</html>
6.3、输出结果
Name:eee Age:22 SeqStack.html:18:25
Name:ddd Age:21 SeqStack.html:18:25
Name:ccc Age:20 SeqStack.html:18:25
Name:bbb Age:19 SeqStack.html:18:25
Name:aaa Age:18 SeqStack.html:18:25
true SeqStack.html:40:17
7、使用Python语言来实现顺序栈
7.1、SeqStack.py文件中的内容
class SeqStack:
def Init_SeqStack(self):
self.MAX_SIZE = 1024
self.data = [None]*self.MAX_SIZE
self.size = 0
def Push_SeqStack(self,data):
if(self is None):
return
if(data is None):
return
if(self.size == self.MAX_SIZE):
return
self.data[self.size] = data
self.size += 1
def Top_SeqStack(self):
if(self is None):
return None
if(self.size == 0):
return None
return self.data[self.size - 1]
def Pop_SeqStack(self):
if(self is None):
return -1
if(self.size == 0):
return None
save = self.data[self.size -1]
self.data[self.size - 1] = None
self.size -= 1
return save
def IsEmpty(self):
if(self == None):
return True
if(self.size == 0):
return True
return False
def Size_SeqStack(self):
if(self is None):
return -1
return self.size
def FreeSpace_SeqStack(self):
if(self is None):
return
self.Clear_SeqStack()
def Clear_SeqStack(self):
if(self is None):
return
for i in range(0,self.size):
self.data[i] = None
self.size = 0
7.2、main.py文件中的内容
from SeqStack import *
class Person:
def __init__(self,name,age) -> None:
self.name = name
self.age = age
def __str__(self) -> str:
return "Name:" + self.name + "\t" + "Age:" + str(self.age)
stack = SeqStack()
stack.Init_SeqStack()
p1 = Person("aaa", 18)
p2 = Person("bbb", 19)
p3 = Person("ccc", 20)
p4 = Person("ddd", 21)
p5 = Person("eee", 22)
stack.Push_SeqStack(p1)
stack.Push_SeqStack(p2)
stack.Push_SeqStack(p3)
stack.Push_SeqStack(p4)
stack.Push_SeqStack(p5)
while(stack.IsEmpty() == False):
print(stack.Pop_SeqStack())
print(stack.IsEmpty())
stack.FreeSpace_SeqStack()
7.3、输出结果
Name:eee Age:22
Name:ddd Age:21
Name:ccc Age:20
Name:bbb Age:19
Name:aaa Age:18
True
原文地址:https://www.cnblogs.com/xgp123/p/12426032.html
- Google核心技术之——PageRank算法scala实现
- 代码审查拯救世界?
- Kafka实战:从RDBMS到Hadoop,七步实现实时传输
- Apache NiFi 1.0.0测试版:邮件路由应用新型ListenSMTP
- 为什么我坚持使用 JavaScript 函数声明
- NewSQL数据库大对象块存储原理与应用
- 使用xUnit为.net core程序进行单元测试(下2)
- MongoDB + Spark: 完整的大数据解决方案
- 如何实现自然语言处理的集束搜索解码器
- PostgreSQL 使用advisory lock或skip locked消除行锁冲突, 提高几十倍并发更新效率
- 流动的数据——使用 RxJS 构造复杂单页应用的数据逻辑
- 内存泄漏的检测、解决、防止
- 大数据Hadoop快速入门教程
- 用Rust解决C语言的隐患
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 初识ABP vNext(1):开篇计划&基础知识
- 基于 HTML5 Canvas 的病毒模拟视觉试验台
- #云开发高阶实战任务总结# 投票系统的解析与设计
- K8S 环境下的使用 ConfigMap 进行远程配置
- 腾讯云语音识别python-sdk使用笔记
- TKE部署ES如何配置参数vm.max_map_count
- Jquery validate remote 验证数据唯一
- MySQL 案例:乱码,字符集与错入错出的 MySQL
- Jenkins常用插件Copy Artifact的使用
- 聊聊dubbo-go的roundRobinLoadBalance
- 腾讯云录音文件识别请求和结果查询
- 【Kubernetes】kubectl top 如何使用
- js数组方法,常用数组Api的基本使用
- java jsp实现网络考试系统(mysql)
- 实操:数据万象语音转文字