τα στοιχεία επικοινωνίας μου
Ταχυδρομείο[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
θέλουμε να μιλήσουμεΠίνακας ακολουθιών, πρέπει να μιλήσουμε πρώτα για γραμμικούς πίνακες, γιατί οι διαδοχικοί πίνακες είναι ένας τύπος γραμμικών πινάκων.
Όπως υποδηλώνει το όνομα, ένας γραμμικός πίνακας είναι ένας πίνακας που οργανώνει δεδομένα σαν γραμμές.
Μπορεί να γίνει κατανοητό με τη σκέψη της ουράς στην πραγματικότητα.
Χαρακτηριστικά γραμμικών πινάκων:
Ο πίνακας ακολουθίας είναι μια παράγραφοςΟι φυσικές διευθύνσεις είναι διαδοχικέςΟι μονάδες αποθήκευσης είναι σαν άνθρωποι που παρατάσσονται ο ένας δίπλα στον άλλο.
Μια γραμμική δομή που αποθηκεύει στοιχεία δεδομένων με τη σειρά, συνήθως χρησιμοποιώνταςπίνακαςαποθήκευση.
Ολοκληρώστε την προσθήκη, διαγραφή, έλεγχο και τροποποίηση δεδομένων στον πίνακα.
Υλοποιήστε μόνοι σας έναν πίνακα ακολουθιών (αποθήκευση δεδομένων τύπου int), χρησιμοποιήστε τον πίνακα ακολουθιών ως κλάση, υλοποιούμε ορισμένες διεπαφές, δηλαδή μερικέςμέθοδος μέλουςΝα πραγματοποιήσει την προσθήκη, διαγραφή, έλεγχο και τροποποίηση δεδομένων.
public class SeqList {
private int[] elem;
private int usedSize;
// 默认构造方法
SeqList(){ }
// 将顺序表的底层容量设置为initcapacity
SeqList(int initcapacity){ }
// 新增元素,默认在数组最后新增
public void add(int data) { }
// 在 pos 位置新增元素
public void add(int pos, int data) { }
// 判定是否包含某个元素
public boolean contains(int toFind) { return true; }
// 查找某个元素对应的位置
public int indexOf(int toFind) { return -1; }
// 获取 pos 位置的元素
public int get(int pos) { return -1; }
// 给 pos 位置的元素设为 value
public void set(int pos, int value) { }
//删除第一次出现的关键字key
public void remove(int toRemove) { }
// 获取顺序表长度
public int size() { return 0; }
// 清空顺序表
public void clear() { }
}
Από προεπιλογή, ανοίγουμε αρχικά 10 κενά δεδομένων.
private static final int DEFAULT_SIZE = 10;
public SeqList() {
this.elem= new int[DEFAULT_SIZE];
}
Περάστε το μήκος του πίνακα και χρησιμοποιήστε το μήκος του πίνακα για να ανοίξετε χώρο.
private static final int DEFAULT_SIZE = 10;
public SeqList(int initcapacity) {
this.elem= new int[initcapacity];
}
Νέα στοιχεία προστίθενται στο τέλος του πίνακα από προεπιλογή.
Σημεία που πρέπει να ληφθούν υπόψη:
public void add(int data) {
if(isFull()){
elem = Arrays.copyOf(elem,elem.length * 2);
}
elem[usedSize++] = data;
}
/**
* 判断当前的顺序表是不是满的!
*
* @return true:满 false代表空
*/
private boolean isFull() {
return usedSize == elem.length;
}
Εισαγωγή στοιχείου στο δείκτη pos.
Προφυλάξεις:
private boolean checkPosInAdd(int pos) throws PosIllegalException{
if(pos < 0 || pos > usedSize){
throw new PosIllegalException("位置不合法");
}
return true;
}
// 在 pos 位置新增元素
public void add(int pos, int data) {
try{
if(checkPosInAdd(pos)){
if(isFull()){
elem = Arrays.copyOf(elem,elem.length * 2);
}
for (int i = usedSize; i > pos ; i--) {
elem[i] = elem[i-1];
}
elem[pos] = data;
usedSize++;
}
}catch(PosIllegalException e){
e.printStackTrace();
}
}
Ελέγξτε εάν τα δεδομένα που δίνονται περιέχονται στον πίνακα ακολουθίας.
Απλώς περάστε το απευθείας, επιστρέψτε το true αν το βρείτε και επιστρέψτε το false αν δεν το βρείτε.
public boolean contains(int toFind) {
for (int i = 0; i < usedSize; i++) {
if(elem[i] == toFind){
return true;
}
}
return false;
}
Κοιτάξτε το ευρετήριο των δεδομένων σε αυτόν τον πίνακα ακολουθίας.
Απλώς πραγματοποιήστε βρόχο απευθείας και βρείτε τον δείκτη επιστροφής χωρίς να επιστρέψετε -1.
public int indexOf(int toFind) {
for (int i = 0; i < usedSize; i++) {
if(elem[i] == toFind){
return i;
}
}
return -1;
}
Έξοδος του στοιχείου στη θέση θέσης.
Προφυλάξεις:
public int get(int pos) {
try{
if(checkPosInAdd(pos)){
return elem[pos];
}
}catch(PosIllegalException e){
e.printStackTrace();
}
return 0;
}
Τροποποιήστε το στοιχείο θέσης θέσης.
Προφυλάξεις:
public void set(int pos, int value) {
try{
if(checkPosInAdd(pos)){
elem[pos] = value;
}
}catch(PosIllegalException e){
e.printStackTrace();
}
}
Διαγράψτε την πρώτη εμφάνιση του κλειδιού.
Προφυλάξεις:
public void remove(int key) {
for (int i = 0; i < usedSize; i++) {
if(elem[i] == key){
for (int j = i; j < usedSize - 1; j++) {
elem[j] = elem[j + 1];
}
usedSize--;
}
}
}
Η απόκτηση του μήκους του πίνακα ακολουθίας εδώ αναφέρεται στον αριθμό των χρήσιμων δεδομένων, δηλαδή στο usedSize.
public int size() {
return usedSize;
}
Ορίστε τα περιεχόμενα του πίνακα ακολουθιών σε άδεια.
Προφυλάξεις:
public void clear() {
for (int i = 0; i < usedSize; i++) {
elem[i] = 0;
}
usedSize = 0;
}
Η κλάση ArrayList παρέχεται σε Java για να αναπαραστήσει μια διαδοχική λίστα.
Περιγραφή διεπαφής:
Η Java παρέχει 3 μεθόδους κατασκευής όπως φαίνεται στον πίνακα:
μέθοδος | Εισαγωγή στη χρήση της μεθόδου |
---|---|
ArrayList() | Κατασκευή χωρίς επιχειρήματα |
ArrayList(Συλλογή<? extends E> ντο) | Δημιουργήστε ArrayList χρησιμοποιώντας άλλες Συλλογές |
ArrayList (int αρχική χωρητικότητα) | Καθορίστε την αρχική χωρητικότητα του πίνακα ακολουθιών |
Οι κοινές μέθοδοι που παρέχονται είναι παρόμοιες με αυτές που εφαρμόσαμε παραπάνω.
Τα πλεονεκτήματα των πινάκων ακολουθίας είναι τα εξής:
Οι σύνδεσμοι για τις ασκήσεις είναι οι παρακάτω:
τρίγωνο Yang Hui