现在对C++学习了一段时间把C++的特性和Java做比较有很强烈的快感:P
自己写了两个版本的Stack:
Java版本:
源代码Stackjava
package org;
public class Stack {
public static class Link {
protected Object data;
protected Link next;
public Link(Object data Link next) {
thisdata = data;
thisnext = next;
}
}
private Link head = null;
public void push(Object data) {
head = new Link(data head);
}
public Object peek() {
return headdata;
}
public Object pop() {
if (head == null)
return null;
Object o = headdata;
head = headnext;
return o;
}
} 测试代码StackTestjava
package org;
import junitframeworkTestCase;
public class StackTest extends TestCase {
public void test() {
Stack s = new Stack();
assertEquals(null spop());
spush(a);
spush(b);
assertEquals(b speek());
assertEquals(b spop());
assertEquals(a spop());
assertEquals(null spop());
}
public void test() {
Stack s = new Stack();
assertEquals(null spop());
spush(new Integer());
spush(new Integer());
assertEquals( ((Integer)speek())intValue());
assertEquals( ((Integer)spop())intValue());
assertEquals( ((Integer)spop())intValue());
assertEquals(null spop());
}
}
C++版本:
源代码:
Stackcpp
#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() {}
void push(void* data) {
head = new Link(data head);
}
void* pop() {
if (head == )
return ;
void* object = head>data;
Link* oldHead = head;
head = oldHead>next;
delete oldHead;
return object;
}
void* peek() {
return head ? head>data : ;
}
};
int main() {
ifstream in(Stackcpp);
Stack text;
string line;
while(getline(in line))
textpush(new string(line));
string* s;
while((s = (string*)textpop()) != ) {
cout << *s << endl;
delete s;
}
}