Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1139934
  • 博文数量: 1310
  • 博客积分: 3980
  • 博客等级: 中校
  • 技术积分: 8005
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-09 22:05
文章分类

全部博文(1310)

文章存档

2011年(1)

2008年(1309)

我的朋友

分类:

2008-05-24 08:29:45

现在对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 << *s << endl; 
delete s; 

}
阅读(602) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~