加好友 发短信
等级:小飞侠
帖子:1750
精华:30
积分:16454
金钱:27454
金币:0
魅力:9296
威望:0
登陆:335
注册:2007/4/5 13:51:22
近访:2010/8/25 14:55:41
在线:
|
[公告]Java版本和C++版本简单Stack程序 Post By:2007/6/1 13:00:22 [只看该作者]
贴子已被锁定 现在对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; } } |
|
|