栈(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; } }
相关文章推荐
- (数据结构与算法分析 四)------数组循环队列的实现( Java语言描述)
- Atitit. 脚本语言的断点单步调试的设计与实现 attialx 总结 php 参照java
- 【April Fools Day Contest 2016G】【2种语言实现】You're a Professional
- 凯撒密码的Java语言实现
- 队列的图文解析 和 对应3种语言的实现(C/C++/Java)
- java实现甘特图的2种方法:SwiftGantt和Jfree (转)
- Java语言中链表和双向链表的实现
- 巧用C#做中间语言 实现Java调用.net DLL的方法
- Java与C语言数组实现机理的一点对比
- Java语言实现简单FTP软件 FTP软件效果图预览之下载功能(2)
- 用纯JAVA语言编程读取MAC地址的实现
- Josephus Problem的详细算法及其Python, Java语言的实现
- [Java基础要义] Java语言中Object对象的hashCode()取值的底层算法是怎样实现的?
- java 语言实现的随机数生成算法
- 利用栈实现算术表达式求值(Java语言描述)
- Java语言实现简单FTP软件------>FTP软件效果图预览之下载功能(二)
- JNI实现Java调用C/C++语言
- 队列的图文解析 和 对应3种语言的实现(C/C++/Java)
- 用Java语言中的socket编程实现jsp页面与网关的链接并且不间断发送控制数据
- 回型矩阵 简述与java语言实现