データ構造の基礎_スタックとキュー
スタックとキューの話をするために、配列と比較して、データを迅速に挿入する利点がありますが、データを検索するときは、行列が来ないほど速いです.下のコードは配列でスタックを実現し、チェーンでキューを実現し、チェーンでスタックを実現します.
配列でスタックを実現
でも、収穫があります.仕事を探す新人に参考になるポイントをまとめます.
一、あなた自身が確かに牛(素晴らしいスタートプロジェクトをしました.ACM一等賞などはもう有名です.)でない限り、積極的に電話してあなたの会社を探しに来ます.
二、卒業したばかりで、何もできないなら、小さい会社に行ってもいいです.ある程度のレベル(10万行ぐらいのコードを書きました)があれば、大企業に行きましょう.大企業は規範的なものがたくさんあります.
三、会社からあなたに給料を上げるとは思わないでください.もし給料が気になるなら、努力して自分を高めましょう.あなたのレベルがもっと高い報酬を受けるべきだと思う時、普通の会社はあなたにプラスします.あなたは転職できます.主導権を持っています.
O啦~~
転載は出典を保留してください.http://blog.csdn.net/u011638883/article/details/14107863
ありがとうございます.
配列でスタックを実現
package StackAndQueue;
/**
*
* @author wly
* @author 2013-10-23
*/
public class ArrayStack {
Object[] array;
int init_capcity = 12;
int INCREATE_STEP = 12; //
int top = -1;
public ArrayStack() {
array = new Object[init_capcity];
}
public void push(Object obj) {
if(top >= array.length) { // ,
Object[] array2 = new Object[array.length + INCREATE_STEP];
for(int i=0;i<array.length;i++) {
array2[i] = array[i];
}
array = array2;
}
// ,
top ++;
array[top] = obj;
}
/**
*
* @return
*/
public Object pop() {
if(top >= 0) { //
Object topElement = array[top];
top --;
return topElement;
} else {
return null;
}
}
/**
* ,
* @return
*/
public Object peek() {
Object topElement = array[top];
return topElement;
}
}
チェーンでスタックを実現するpackage StackAndQueue;
/**
* , ,
* @author wly
* @date 2013-10-23
*/
public class ChainStack {
Chain chain;
public void push(Node node) {
if(chain == null) {
chain = new Chain();
}
chain.add(node);
}
public Node pop() {
return chain.remove();
}
public Node peek() {
return chain.tail;
}
}
/**
*
* @author wly
*
*/
class Chain {
Node tail;
public void add(Node node) {
if(tail == null) {
tail = node;
} else {
tail.setNext(node);
tail = node;
}
}
/**
* ,
* @return true ,false
*/
public Node remove() {
Node result = tail;
if(tail.prev != null) {
tail = tail.prev;
tail.next = null;
} else { //
tail = null;
}
return result;
}
}
/**
*
* @author wly
*
*/
class Node {
public Node next; //
public Node prev; //
public Object data;
public Node(Object data) {
this.data = data;
}
public void setNext(Node node) {
node.prev = this;
this.next = node;
}
}
チェーンで列を実現します.package StackAndQueue;
/**
*
* @author wly
*
*/
public class ChainQueue {
private QueueNode head; //
private QueueNode tail; //
private int size = 0;
public ChainQueue() {
}
/**
*
*/
public void insert(QueueNode node) {
//####### ######
// head.prev null, remove peek head.prev
// if(head == null) {
// head = node;
// tail = head;
// } else {
// node.next = tail;
// tail = node;
// }
// if(isEmpty()){
// tail = node;
// head = tail;
//
// if(tail == head) {
// System.out.println("--same--");
// }
// } else {
// tail.prev = node;
// tail = node;
// }
// , tail.prev = node
if(head == null) {
head = node;
tail = head;
} else {
node.next = tail;
tail.prev = node; // , head.prev
tail = node;
}
size ++;
}
/**
*
*/
public QueueNode remove() {
if(!isEmpty()) {
QueueNode temp = head;
head = head.prev;
size --;
return temp;
} else {
System.out.println(" , !");
return null;
}
}
/**
*
* @return
*/
public boolean isEmpty() {
if(size > 0) {
return false;
} else {
return true;
}
}
/**
* ,
*/
public QueueNode peek() {
if(!isEmpty()) {
return head;
} else {
System.out.println();System.out.println(" , !");
return null;
}
}
/**
*
* @return
*/
public int size() {
return size;
}
}
/**
*
* @author wly
*
*/
class QueueNode {
QueueNode prev;
QueueNode next;
int data;
public QueueNode(int data) {
this.data = data;
}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
}
テストしますpackage StackAndQueue;
public class Test {
public static void main(String[] args) {
//----- -------
System.out.println("----- ");
ArrayStack arrayStack = new ArrayStack();
arrayStack.push(" ");
arrayStack.push(" ");
System.out.println(arrayStack.pop().toString()); //
System.out.println(arrayStack.peek().toString()); //
System.out.println(arrayStack.pop().toString()); //
System.out.println("--------------
");
//----- --------
System.out.println("----- ");
ChainStack chainStack = new ChainStack();
Node n1 = new Node(" ");
Node n2 = new Node(" ");
chainStack.push(n1);
chainStack.push(n2);
System.out.println(chainStack.pop().data.toString());
System.out.println(chainStack.peek().data.toString());
System.out.println(chainStack.pop().data.toString());
System.out.println("--------------
");
//----- --------
System.out.println("----- ");
QueueNode qnode1 = new QueueNode(123);
QueueNode qnode2 = new QueueNode(666);
ChainQueue chainQueue = new ChainQueue();
chainQueue.insert(qnode1);
chainQueue.insert(qnode2);
System.out.println(chainQueue.remove().getData());
System.out.println(chainQueue.peek().getData());
System.out.println(chainQueue.remove().getData());
System.out.println("--------------
");
// , ~~~
// , ( ), ArrayList , ~~~
// , 。
// : n, 1 2 3 4 ... n , ,
// , ?
ChainQueue chainQueue2 = new ChainQueue();
for(int i=1;i<=5;i++) {
QueueNode qn = new QueueNode(i);
chainQueue2.insert(qn);
}
while(chainQueue2.size() > 1) {
chainQueue2.remove();
if(chainQueue2.size() > 1) {
chainQueue2.insert(chainQueue2.remove());
} else {
//
System.out.println(" ------:");
System.out.print(chainQueue2.peek().getData());
}
}
}
}
最後に、その面接を紹介します.私はやはり重視しています.面接前にいろいろ準備しました.現場に来てよかったです.英語の文書を読む習慣があるので、面接官は英語で質問したことは大体分かりましたが、自分で英語で話した時にはうまくいかなかったです.後の問題は前の文のコードの中のそれが列で実現するテーマです.データ構造という本はまったく見たことがないからです.その後、アラーリストで20分ぐらいかかりました.面接官が試験したのはデータ構造かもしれません.自分で列を書いていないので、プログラムの調整とコードの仕様について聞きました.一つ一つ答えましたが、いい感じです.それからまたプロジェクトマネージャーが来ました.これはアウトソーシング会社ですか?そして彼は私にAndroidをやったことがあるのかと聞きました.オフショアだから今後何をするべきかを強調しました.何を学ぶべきかを迷っています.基礎がよくないと思いますが、要求された給料は低くないですよね.でも、力を尽くしたと思います.(その日の5時に退勤したら、寧波から杭州まで列車に乗ります.それから乗り換えて、夜9時半に着くホテルで、シャワーを浴びてからまた英語ができます.えっと.)でも、収穫があります.仕事を探す新人に参考になるポイントをまとめます.
一、あなた自身が確かに牛(素晴らしいスタートプロジェクトをしました.ACM一等賞などはもう有名です.)でない限り、積極的に電話してあなたの会社を探しに来ます.
二、卒業したばかりで、何もできないなら、小さい会社に行ってもいいです.ある程度のレベル(10万行ぐらいのコードを書きました)があれば、大企業に行きましょう.大企業は規範的なものがたくさんあります.
三、会社からあなたに給料を上げるとは思わないでください.もし給料が気になるなら、努力して自分を高めましょう.あなたのレベルがもっと高い報酬を受けるべきだと思う時、普通の会社はあなたにプラスします.あなたは転職できます.主導権を持っています.
O啦~~
転載は出典を保留してください.http://blog.csdn.net/u011638883/article/details/14107863
ありがとうございます.