左心房为你撑大大i 提交于 2020-02-17 14:20:27

栈的定义:

所有的插入和删除操作都限制在线性表的同一端进行,是一种后进先出的线性表。
表尾端称栈顶,表头端称栈底。
在这里插入图片描述

栈的基本运算

initstack():初始化栈
push():元素入栈
pop():栈顶元素出栈
gettop();取栈顶元素
stackempty():判断是否为空

栈的分类

由于栈是一种线性表,则可将栈分为顺序栈和链式栈

①顺序栈可借助数组进行建立,在建立初边分配好了空间,所以在每次入栈的时候,都必
须根据栈顶和栈底的差来判断是否栈满。
在这里插入图片描述
②链式栈是一种单向链表,表头即是栈顶指针,每次添加元素时,便是在栈顶指针和第一个
数据之间进行添加。由于链式存储动态分配内存的原因,理论上栈长可以非常大,因此可
不用判断栈满,若有这一需求,可在节点数据域添加长度变量进行判断。
在这里插入图片描述

栈的简单使用(数制转换)

此处以链式栈为例:
①定义节点

class NumStackNode{
	private String num;
	private NumStackNode nextNode;

	//相应get、set方法
 }

②定义栈结构及相关函数

class LinkStack{
	 private NumStackNode headNode;
 
	 //初始化
	 public void initStack() {
	 	 this.headNode = new NumStackNode();
		 this.headNode.setNextNode(null);
	 }
 
	 //入栈
	 public void push(String num) {
		  NumStackNode addNode = new NumStackNode();
		  addNode.setNum(num);
		  //调整结构
		  addNode.setNextNode(this.headNode.getNextNode());
		  this.headNode.setNextNode(addNode);
	 }
	//出栈
	 public String pop() {
		  //取出数据
		  String num = this.headNode.getNextNode().getNum();
		  //调整结构
		  this.headNode.setNextNode(headNode.getNextNode().getNextNode()); 
		  return num;
	 }
 
	 //判断是否栈空
	 public boolean stackEmpty() {
		  if(this.headNode.getNextNode() == null) {
		   return true;
 	 }else {
		   return false;
	  }
	 }
}

③转换函数

/**
  * 根据输入的十进制数和要转换的进制,进行进制转换
  * @param number      十进制数
  * @param scacle       进制
  * @return         进制转换后的出的数
  */
 public static String realizeShift(int number,int scacle) {
 	 LinkStack lStack = new LinkStack();
	  lStack.initStack();  //初始化
 	 //运算、压栈
  	while(number != 0) {
		   lStack.push(typeShift(number%scacle));
		   number = number/scacle;
	  }
	  //出栈
	  StringBuilder result = new StringBuilder();
	  result.append("(");
	  while(!lStack.stackEmpty()) {
		   result.append(lStack.pop());
	  }  
	  result.append(")"+scacle);
	  return  result.toString();
 }
 
 /**
  * 根据输入的数值进行类型转换,并将大于10的数转为A、B...F
  * @param num         输入数值
  * @return    转换后的数值
  */
 public static String typeShift(int num) {}

④测试结果
在这里插入图片描述
在这里插入图片描述

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!