
正文
Java链栈代码 java链表实现栈
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
跪求用JAVA语言实现一个栈和一个队列,数据元素为double型。。。具体在问题补充里
public interface MyStackT {
/**
* 判断栈是否为空
*/
boolean isEmpty();
/**
* 清空栈
*/
void clear();
/**
* 栈的长度
*/
int length();
/**
* 数据入栈
*/
boolean push(T data);
/**
* 数据出栈
*/
T pop();
}
public class MyArrayStackT implements MyStackT {
private Object[] objs = new Object[16];
private int size = 0;
@Override
public boolean isEmpty() {
return size == 0;
}
@Override
public void clear() {
// 将数组中的数据置为null, 方便GC进行回收
for (int i = 0; i size; i++) {
objs[size] = null;
}
size = 0;
}
@Override
public int length() {
return size;
}
@Override
public boolean push(T data) {
// 判断是否需要进行数组扩容
if (size = objs.length) {
resize();
}
objs[size++] = data;
return true;
}
/**
* 数组扩容
*/
private void resize() {
Object[] temp = new Object[objs.length * 3 / 2 + 1];
for (int i = 0; i size; i++) {
temp[i] = objs[i];
objs[i] = null;
}
objs = temp;
}
@SuppressWarnings("unchecked")
@Override
public T pop() {
if (size == 0) {
return null;
}
return (T) objs[--size];
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("MyArrayStack: [");
for (int i = 0; i size; i++) {
sb.append(objs[i].toString());
if (i != size - 1) {
sb.append(", ");
}
}
sb.append("]");
return sb.toString();
}
}
//栈的链表实现
public class MyLinkedStackT implements MyStackT {
/**
* 栈顶指针
*/
private Node top;
/**
* 栈的长度
*/
private int size;
public MyLinkedStack() {
top = null;
size = 0;
}
@Override
public boolean isEmpty() {
return size == 0;
}
@Override
public void clear() {
top = null;
size = 0;
}
@Override
public int length() {
return size;
}
@Override
public boolean push(T data) {
Node node = new Node();
node.data = data;
node.pre = top;
// 改变栈顶指针
top = node;
size++;
return true;
}
@Override
public T pop() {
if (top != null) {
Node node = top;
// 改变栈顶指针
top = top.pre;
size--;
return node.data;
}
return null;
}
/**
* 将数据封装成结点
*/
private final class Node {
private Node pre;
private T data;
}
}
相关问答
Q1: 编程实现链栈的入栈和出栈操作。 在线等着你哦!
#includestdio.h
#includestdlib.h
typedef struct Snode
{
int data;/*数据域*/
struct Snode *next;/*指针域*/
}SNODE,* LinkStack;/*其中SNODE为链栈中Java链栈代码的结点类型名, LinkStack为指向结点的指针类型名*/
//////////////////
LinkStack Push(LinkStack top,int e)
/*将数据元素e压入到链栈top中Java链栈代码,使其成为新的栈项元素*/
{
LinkStack p;
p=(LinkStack)malloc(sizeof(SNODE)); /*生成一个新的结点*/
if (!p) /*如果分配空间失败Java链栈代码,则函数返回"OVERFLOW"*/
printf("Stack is Overflow\n");
p-data=e; /*新结点的数据域赋值*/
p-next=top; /*修改链使新结点插入到链表的头部,并成为新的栈顶元素*/
top=p;
return top;
}
/////////////
LinkStack Pop(LinkStack top, int * e)
/*将链栈top中的栈顶元素从栈中删除,并用e返回其值*/
{
LinkStack q;
if (!top) /*如果栈空,则函数返回ERROR*/
printf("Stack is ERROR\n");
*e=top-data; /*将被删的栈顶元素的值保存在e中*/
q=top; /*用q记下待删的栈顶元素*/
top=q-next;
/*修改链使待删结点从链中"卸下" ,此时被删结点的后继成为新的栈顶元素结点*/
free(q); /*释放被删结点的存储空间*/
return top;
}
/////////
LinkStack Stack_display(LinkStack top)
{
int e;
while(top)
{
e=top-data;
printf("%4d",e);
top=top-next;
}
return top;
}
/////////////////////
void main()
{
LinkStack top = 0;
int i=0,n,e;
printf("please input the length:");/*输入几个数*/
scanf("%d",n);
printf("please input the Value:\n");/*输入*/
while(in)
{
scanf("%d",e);
top=Push(top,e);
i++;
}
printf("the stack is:\n");
Stack_display(top);
printf("please input the insert node:");
scanf("%d",e);
top=Push(top,e);
printf("the stack after push is:\n");
Stack_display(top);
top=Pop(top,e);
printf("the pop value is:%d\n",e);
printf("the stack after pop is:\n");
Stack_display(top);
}
调好了麻烦采纳一下
Q2: java用链表实现栈
public Object setEle(Object element)
{
Object oldElement = this.element;
this.element = element;
return oldElement;
}
是啥意思,给值还return??把这函数删了
public Linked()
{
nextNode = null;
element = null;
}
改成
public Linked(Object element)
{
this.element = element;
nextNode = null;
}
Q3: 用java语言编写算法 输出链栈中的所有元素
#includestdio.h
#includestdlib.h
struct node{
int data;
struct node* pre;
};
void print(struct node *p) //打印链栈
{while(p)
{printf("%d ",p-data);
p=p-pre;
}
}
int main()
{int i;
struct node *p,*q;
for(i=1;i11;i++) //1~10依次入栈
{p=(struct node*)malloc(sizeof(struct node));
if(i==1)p-pre=NULL;
else p-pre=q;
p-data=i;
q=p;
}
print(p);
return 0;
}
Q4: 链栈的入栈出栈代码
这是我写的栈,你看看
#includestdio.h
#includeiostream
typedef struct node{
int date;
node * next;
}SeqStack ;
SeqStack * init_SeqStack(SeqStack * top){
top=NULL;
return top;
}
int is_Empty(SeqStack * top){
if(top==NULL)return 1;
else return 0;
}
SeqStack * push_Stack(SeqStack * top){
SeqStack * New;
New=(SeqStack *)malloc(sizeof(SeqStack));
printf("请输入要入栈的元素\n");
scanf("%d",New-date);
New-next=top;
top=New;
return top;
}
SeqStack * pop_Stack(SeqStack * top,int m){
SeqStack * p=NULL;
if(!is_Empty(top)){
m=top-date;
p=top;
top=top-next;
free(p);
return top;
}
}
SeqStack * top_Stack(SeqStack * top,int m){
if(!is_Empty(top)){
m= top-date;
return top;
}
}
int main(){
int m=0;
SeqStack * s=NULL;
init_SeqStack(s);
s=push_Stack(s);
s=push_Stack(s);
s=push_Stack(s);
s=push_Stack(s);
s=top_Stack(s,m);
printf("%d\n",m);
s=top_Stack(s,m);
printf("%d\n",m);
s=pop_Stack(s,m);
printf("%d\n",m);
s=top_Stack(s,m);
printf("%d\n",m);
if(is_Empty(s)) printf("栈现在是空了");
system("pause");
return 0;
}
关于Java链栈代码和java链表实现栈的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







