Java版本和C++版本的简单Stack程序

现在对C++学习了一段时间,把C++的特性和Java做比较有很强烈的快感:P
自己写了两个版本的Stack:

Java版本:
源代码Stack.java
package  org;
public   class  Stack  {
    
public static class Link {
        
        
protected Object data;

        
protected Link next;

        
public Link(Object data, Link next) {
            
this.data = data;
            
this.next = next;
        }

    }


    
private Link head = null;

    
public void push(Object data) {
        head 
= new Link(data, head);
    }

    
    
public Object peek() {
        
return head.data;
    }


    
public Object pop() {
        
if (head == null)
            
return null;
        Object o 
= head.data;
        head 
= head.next;
        
return o;
    }

    
}
 测试代码StackTest.java
package  org;
import  junit.framework.TestCase;

public   class  StackTest  extends  TestCase  {
    
    
public void test1() {
        Stack s 
= new Stack();
        
        assertEquals(
null, s.pop());
        
        s.push(
"a");
        s.push(
"b");
        
        assertEquals(
"b", s.peek());
        assertEquals(
"b", s.pop());
        assertEquals(
"a", s.pop());
        
        assertEquals(
null, s.pop());
    }

    
    
public void test2() {
        Stack s 
= new Stack();
        
        assertEquals(
null, s.pop());
        
        s.push(
new Integer(1));
        s.push(
new Integer(2));
        
        assertEquals(
2, ((Integer)s.peek()).intValue());
        assertEquals(
2, ((Integer)s.pop()).intValue());
        assertEquals(
1, ((Integer)s.pop()).intValue());
        
        assertEquals(
null, s.pop());
    }

    
}


C++版本:
源代码:
Stack.cpp
#include  < fstream >
#include 
< iostream >
#include 
< string >
using   namespace  std;

class  Stack  {
    
struct Link {
        Link
* next;
        
void* data;
        Link(
void* dat, Link* nxt) : data(dat) ,next(nxt) {}
    }
*head;

public :
    Stack() : head(
0{}

    
void push(void* data) {
        head 
= new Link(data, head);
    }


    
void* pop() {
        
if (head == 0)
            
return 0;
        
void* object = head->data;
        Link
* oldHead = head;
        head 
= oldHead->next;
        delete oldHead;
        
return object;
    }


    
void* peek() {
        
return head ? head->data : 0;
    }

}
;

int  main()  {
    ifstream 
in("Stack.cpp");
    Stack text;
    
string line;
    
while(getline(in, line))
        text.push(
new string(line));
    
string* s;
    
while((s = (string*)text.pop()) != 0{
        cout 
<< *<< endl;
        delete s;
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值