您的位置:首页 > 编程语言 > Java开发

栈(2种语言实现 c/java)

2013-07-25 22:42 155 查看
#include <stdio.h>
#include <iostream>
using namespace std;
#define STACKSIZE 100
#define STACKINCREMENT 10

typedef struct{
int *base;//栈底指针
int *top;//栈顶指针
int stacksize;//当前已分配的空间

}SqStack;
void initStack(SqStack &s){
//构造一个空栈
s.base=(int *)malloc(STACKSIZE*sizeof(int));
if(!s.base) exit(-2);
s.top=s.base;
s.stacksize=STACKSIZE;
}

void push(SqStack &s,int e){
//e为插入的值,放在栈顶
//必须先判断栈满否
if(s.top-s.base>=STACKSIZE){
s.base=(int *)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(int));
if(!s.base) exit(-2);
s.top=s.base+s.stacksize;
s.stacksize+=STACKINCREMENT;
}
*s.top++=e;

}

int getTop(SqStack &s){
if(s.top==s.base)
return 0;
int temp;
temp=*(s.top-1);
return temp;
}

void pop(SqStack &s){
//先判断栈空否
if(s.top==s.base){
exit(-2);
}
s.top--;
}
void print(SqStack &s){
int temp=s.top-s.base;
for(int i=0;i<temp;i++){
printf("%d ",*(s.base+i));
}
printf("\n");
}
int main(){
SqStack a;
int temp;
initStack(a);
for(int i=0;i<5;i++){//push 5个数字
cin>>temp;
push(a,temp);
}
print(a);
temp=getTop(a);
cout<<"栈顶为: "<<temp<<endl;
cout<<"删除栈顶:"<<endl;
pop(a);
temp=getTop(a);
cout<<"栈顶为: "<<temp<<endl;
print(a);

return 0;
}
public interface MyStack<T> {
boolean isEmpty();
void clear();
T pop();
boolean push(T data);
int length();
T peek();//查看栈顶元素,但不移除
int search(T t);//返回对象在栈中的位置
}
</pre><br>
<pre class="java" name="code">package list;

public  class Stack1<T> implements MyStack<T>{

//private []T t=new Object<T[]>[16];

private T[] t = (T[]) new Object[16];//栈空间默认为16
private int size=0;
public static void main(String[] args) {
Stack1<String> arrayStack = new Stack1<String>();
arrayStack.push("C语言");
arrayStack.push("C++");
arrayStack.push("JAVA");
arrayStack.push("数据结构");
arrayStack.pop();
arrayStack.peek();
arrayStack.pop();

}

@Override
public boolean isEmpty() {
// TODO Auto-generated method stub
return size==0;
}

@Override
public void clear() {
for(int i=0;i<t.length;i++)
t[i]=null;//将其置为null,方便gc回收
size=0;

}

@Override
public T pop() {
if(size==0)
return null;
else{
T tmp=t[size-1];
size--;
return tmp;
}

}

@Override
public boolean push(T data) {
if(size>=t.length){
resize();
}
t[size++]=data;
return true;
}

public void resize() {
T[] tmp=(T[]) new Object[t.length*2];
for(int i=0;i<t.length;i++){
tmp[i]=t[i];
t[i]=null;
}
t=tmp;
tmp=null;

}

@Override
public int length() {
return size;
}

@Override
public T peek() {
if(size==0){
return null;
}else{
return t[size-1];
}
}

@Override
public int search(T t) {
for(int i= 0;i<size;i++)
if(t.equals(this.t[i]))
return i+1;
return 0;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: