JAva実装スタックとキューおよびスタックとキューの違い
スタックとキューは何ですか?コンセプトです!論理構造です!本当に存在しない!キャリアが固定されていません!スタックとキューのフィーチャー?スタック:先進後出、キュー:先進先出int、double......データ型array、list、mapにはそれぞれ固定されたフォーマットとスタイルがあり、スタックとキューは線形テーブルであり、配列であってもよい......「先進後出」構造に合致すればスタックと理解でき、「先進先出」構造に合致すればキューと理解できる
Javaで書かれたスタックとキューのコードの例を示します.
1、データノードを定義し、クラス名はNodeClassで、データ型不定は汎用Tで代替し、内部はデータを格納する私有変数Dataを定義し、そのデータ型不定も汎用Tで代替する.次のノードを指すポインタnext.
4、テストクラス、スタックのテストクラスを創立して、それに対して入スタックと出スタックの操作を行う
**
a.判断スタックが空であるか否かは、局構造を定義する際にヘッダポインタに初期値-1を与えることで判断キューが空であるか否かを判断し、ヘッダポインタとテールポインタが等しいか否かで判断することができる
Javaで書かれたスタックとキューのコードの例を示します.
1、データノードを定義し、クラス名はNodeClassで、データ型不定は汎用Tで代替し、内部はデータを格納する私有変数Dataを定義し、そのデータ型不定も汎用Tで代替する.次のノードを指すポインタnext.
package Stack;
public class NodeClass {
private T data;
private NodeClass next;
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public NodeClass getNext() {
return next;
}
public void setNext(NodeClass next) {
this.next = next;
}
@Override
public String toString() {
return "NodeClass{" +
"data=" + data +
", next=" + next +
'}';
}
}
2、ノードのデータフィールドに記入する学生クラスを定義し、学生クラスには学生の学号、名前、その他の情報(異なる学生を区別するために比較的勝手に使用できる情報)が含まれている.package Stack;
public class Student {
private int stuNum;
private String name;
private String otherInfo;
public int getStuNum() {
return stuNum;
}
public void setStuNum(int stuNum) {
this.stuNum = stuNum;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getOtherInfo() {
return otherInfo;
}
public void setOtherInfo(String otherInfo) {
this.otherInfo = otherInfo;
}
@Override
public String toString() {
return "Student{" +
"stuNum=" + stuNum +
", name='" + name + '\'' +
", otherInfo='" + otherInfo + '\'' +
'}';
}
}
3->1、スタック構造クラスを定義し、スタックトップポインタを定義し、スタックアウトスタックに入る方法package que;
import Stack.NodeClass;
public class StackClass {
private NodeClass que; // ,
public NodeClass getQue() {
return que;
}
public void setQue(NodeClass que) {
this.que = que;
}
// , NodeClass
public void add( NodeClass add ){
if( que == null ){// que , que
que = add;
}else{
add.setNext(que);//
que = add;// que
}
}
public NodeClass pop(){
NodeClass result = que;//
if( que != null ){
que = que.getNext();// que
}
return result;// ,
}
public void look(){
System.out.println(que.toString());
}
}
3->2、キューの構造クラスを定義し、ヘッダポインタとテールポインタがあり、テールポインタからキューに入る方法と先頭ポインタからキューを出る方法を定義するpackage que;
import Stack.NodeClass;
public class QueClass {
private NodeClass que; //
private NodeClass end; //
public NodeClass getQue() {
return que;
}
public void setQue(NodeClass que) {
this.que = que;
}
public NodeClass getEnd() {
return end;
}
public void setEnd(NodeClass end) {
this.end = end;
}
// ,
public void add( NodeClass add ){
if( que == null ){// , que , , ,
que = add;
end = que;
}else{// , next add,
end.setNext(add);
end = end.getNext();// end ,
}
}
// ,
public NodeClass pop(){
NodeClass result = que;// NodeClass
if( que != null ){// , que , que , que
que = que.getNext();
}
return result;//
}
public void look(){
System.out.println(que.toString());
}
}
**4、テストクラス、スタックのテストクラスを創立して、それに対して入スタックと出スタックの操作を行う
**
package Stack;
import que.StackClass;
public class TestClass {
public static void main(String[] a){
String[] studentNames = new String[]{
" 1"," 2"," 3"," 4"," 5"," 6"," 7"," 8",
" 9"," 10"
};
StackClass que = new StackClass();//
// ,
for( int i = 0; i < studentNames.length; i++ ){
NodeClass flag = new NodeClass();// 。
Student stu = new Student();// ,
stu.setName( studentNames[i] );
stu.setStuNum(i);
stu.setOtherInfo(" " + ( i + 1 ) + " ");
flag.setData(stu);//
que.add(flag);//qeu ,
if( i == 3 || i == 6 || i == 9 ){// “ ” , 3,6,9
NodeClass as = que.pop();
if( as == null ){// , “ ”
System.out.println(" ");
break;
}else{
System.out.println(as.getData().getName());
}
}
}
for(;;){// ,
NodeClass as = que.pop();
if( as == null ){
System.out.println(" ");
break;
}else{
System.out.println(as.getData().getName());
}
}
}
}
5、テストクラス実装キューpackage Stack;
import que.QueClass;
/**
* Created by Administrator on 2019/9/21.
*/
public class TestClass2 {
public static void main(String[] args) {
//
QueClass que=new QueClass();
// QueClass end=new QueClass();//
String[] name=new String[]{
"qinshuaihang","zhongjainjun","liyuhang","daishubo ","zhaohengfei","yangjianxing","jinxu","liweichen"
};
//
for (int i=0;i flag=new NodeClass<>();
Student stu=new Student();
stu.setName(name[i]);
stu.setStuNum(i+1);
stu.setOtherInfo(" "+(i+1)+" ");
//
flag.setData(stu);
que.add(flag);//
}
//
while (true){
if (que.getQue()==null){
break;
}else{
NodeClass result = que.pop();
// System.out.println(result.getData().getName());
System.out.println(" "+ result.getData().toString());
}
}
}
}
6、補充a.判断スタックが空であるか否かは、局構造を定義する際にヘッダポインタに初期値-1を与えることで判断キューが空であるか否かを判断し、ヘッダポインタとテールポインタが等しいか否かで判断することができる