龙空技术网

模拟栈push、top、pop

91老码 29

前言:

此时兄弟们对“数据结构pop操作有哪些”可能比较关怀,姐妹们都需要学习一些“数据结构pop操作有哪些”的相关内容。那么小编在网络上网罗了一些关于“数据结构pop操作有哪些””的相关知识,希望姐妹们能喜欢,我们一起来学习一下吧!

实现一个栈。

操作:

push x:将 加x x 入栈,保证 x x 为 int 型整数。pop:输出栈顶,并让栈顶出栈

top:输出栈顶,栈顶不出栈 输入描述:

第一行为一个正整数 n n ,代表操作次数。(1≤n≤100000)(1≤n≤100000)接下来的 n n ,每行为一个字符串,代表一个操作。保证操作是题目描述中三种中的一种。

输出描述:

如果操作为push,则不输出任何东西。如果为另外两种,若栈为空,则输出 "error“否则按对应操作输出。

栈的特点:

先入后出

可以使用的数据结构:

数组队列list集合链表stack

使用数组实现:

public class Main {

public static void main(String[] args) {

Scanner in = new Scanner(System.in);

int i = in.nextInt();

MyStack myStack = new MyStack(i);

// 注意 hasNext 和 hasNextLine 的区别

while (in.hasNextLine()) { // 注意 while 处理多个 case

String next = in.nextLine();

if (next.startsWith("push")) {

myStack.push(Integer.parseInt(next.substring(next.indexOf(" ") + 1)));

} else if (next.startsWith("top")) {

System.out.println(myStack.top());

} else if (next.startsWith("pop")) {

System.out.println(myStack.pop());

}

}

}

}

class MyStack {

int[] data;

// 当前栈顶指针

int top = 0;

int dataSize;

int size = 0 ;//栈中元素个数

public MyStack(int size) {

dataSize = size;

data = new int[size];

}

public void push(int num) {

if(this.size == this.dataSize) {//元素的个数已经达到栈的最大容量,不允许存储,报错

System.out.println("error") ;

} else {

data[top++] = num ;//在栈顶指针的位置增加新元素,栈顶指针更新+1

this.size++ ;//栈中元素个数更新+1

}

}

public String pop() {

if (top == 0) {

return "error";

}

return String.valueOf(data[--top]);

}

public String top() {

if (top == 0) {

return "error";

}

return String.valueOf(data[top-1]);

}

}

使用队列实现:

public static void main(String[] args) {

Deque<Integer> queue = new LinkedList<Integer>();//双向链表

Scanner sc = new Scanner(System.in);

int n = sc.nextInt();

String str;

while (n-- > 0) {

str = sc.next();

if ("push".equals(str)) {

int t = sc.nextInt();

queue.push(t);

} else if ("pop".equals(str)) {

if (queue.isEmpty()) {

System.out.println("error");

} else {

System.out.println(queue.peek());

queue.pop();

}

} else if ("top".equals(str)) {

if (queue.isEmpty()) {

System.out.println("error");

} else

System.out.println(queue.peek());

}

}

}

使用list集合实现

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息

public class Main {

public static void main(String[] args) {

Scanner in = new Scanner(System.in);

// 注意 hasNext 和 hasNextLine 的区别

int n = Integer.parseInt(in.nextLine());

List<Integer> list = new ArrayList<>();

while(n-- > 0){

String line = in.nextLine();

String[] splits = line.split(" ");

if("push".equals(splits[0])){

list.add(Integer.parseInt(splits[1]));

} else if(list.isEmpty()){

System.out.println("error");

} else {

System.out.println(list.get(list.size() - 1));

if("pop".equals(splits[0])){

list.remove(list.size() - 1);

}

}

}

}

}

标签: #数据结构pop操作有哪些 #数据结构pop操作有哪些方法