2012-11-22 105 views
2

任何人都可以請教我如何將其轉換爲Java。將C結構轉換爲Java

typedef struct{ 
    int age; 
    int dateOfBirth; 
}StudentInfo; 

typedef StudentInfo *StudentPtr; 

typedef struct studentNode{ 
    StudentPtr studentPtr; 
    struct studentNode *next; 
}StudentNode; 

typedef struct { 
    StudentNode *head; 
    StudentNode *tail; 
}Queue; 

以下是我試過的。

class StudentInfo{ 
int age; 
int dateOfBirth; 
} 

class StudentNode{ 
StudentInfo studentPtr; 
StudentNode next; 
} 

class Queue{ 
StudentNode head; 
StudentNode tail 
} 

有沒有另一種方法呢?不爲此創建2個額外的類?

回答

3

相反StudentNode和隊列 ,你可以使用一個

ArrayList<StudentInfo> studentList; 

柏迪讀第一的介紹到Java集合

+0

ArrayList緩慢刪除第一個元素。這是 - 本身 - 不是一個好隊列 –

+0

誰將刪除第一個學生;-)比較表明,多達10.000個元素ArrayList比所有discpiplines中的LinkedList都快,甚至在刪除時(似乎memcopy比指針交換更快) – AlexWien

+0

是的,據我所知在幾乎所有情況下ArrayList> LinkedList。我只是使用LinkedList,因爲這是OP在他想要轉換的代碼中所具有的。 – Jeff

3

您可以通過參加StudentNode和StudentInfo開課,讓您有:

class StudentNode { 
    int age 
    int dateOfBirth 
    StudentNode next 
} 

當然,這意味着,知道學生的信息也知道列表中的對象,這可能不是很德西rable。 或者,你可以只使用LinkedList類:

LinkedList<StudentInfo> queue = new LinkedList<>(); 

這擺脫了其中的兩個...

+0

感謝您的幫助。如何在java中設置quueue.head? – user1843686

+0

LinkedList本身並不是一個隊列類。如果你想用它作爲隊列,那麼你只需要'queue.add(item)',然後'queue.removeFirst()'我想。或者'.push','.add','.removeFirst','.removeLast'和'.pop'的其他組合,我真的不需要在沒有測試的情況下推理它。查看javadocs:http://docs.oracle.com/javase/6/docs/api/java/util/LinkedList.html **編輯:**確定,實際上它是一個隊列。 'queue.offer(item)'和'queue.remove()':http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Queue.html – Jeff

2

我的理解是,你所要做的是創建StudentNodes,其中的一個隊列每個StudentNode都具有保存數據的屬性(StudentInfo)和對隊列中下一個項目的引用。

Here's a good link開始討論Java中的Queue接口。

AlexWien和Jeff正在談論LinkedLists與ArrayLists,以及there's a nice stackoverflow explanation through this link供您參考。

我的建議是從兩個類開始:StudentQueue(實現Queue接口)和StudentNode(如你在你的例子中所做的那樣)。通過這種方式,您可以利用C語言中已知的代碼和概念,並將它們應用於Java,同時瞭解Java的一個集合。它會消除你的兩個額外類中的一個,這是一個更簡單的方法,而不是直接跳入列表。