Tableau linéaire de la structure des données (dessin à la main)

- Non. 2021-10-13 21:28:50
tableau lin aire la structure


Table des matières

Un.,C'est écrit devant

2.,Définition du tableau linéaire

Trois,Types de données abstraites pour les tableaux linéaires

Quatre,Structure de stockage séquentielle des tableaux linéaires

4.1,Définition du stockage séquentiel

 4.2, Stockage séquentiel

4.3, Différence entre la longueur des données et la longueur linéaire

4.4, Méthode de calcul de l'adresse

Cinq, Insertion et suppression de structures de stockage séquentielles

5.1, Obtenir l'action de l'élément

5.2,Opération d'insertion

5.3,Supprimer l'action

5.4, Avantages et inconvénients de la structure de stockage séquentiel des tableaux linéaires

 Six, Structure de stockage en chaîne de la table linéaire

6.1, Définition linéaire de la structure de stockage en chaîne

 6.2, Similitudes et différences entre le noeud de tête et le pointeur de tête

6.3, Description du Code d'une structure de stockage linéaire

Sept,Tous les codes


Un.,C'est écrit devant

C'est l'après - midi de l'école. , On va voir ça. ,Les enfants de la maternelle font la queue pour sortir de l'école., Les parents dehors sont en désordre. , Les enfants font la queue. ,C'est l'équivalent de notre tableau linéaire dans la structure des données.

 2.,Définition du tableau linéaire

Tableau linéaire, On le sent par son nom. , Est une table avec des propriétés linéaires . Sur la place , Il y a beaucoup de gens partout. , Certains sont des enfants. , Mais il y a beaucoup d'adultes. , Il y a même beaucoup d'animaux de compagnie. ,.L'enseignement de ces enfants est pour toute la foule sur la place, Ne peut pas être considéré comme une structure de tableau linéaire . Mais comme je viens de le dire, , Les enfants d'une classe , L'un après l'autre, en ligne. , Il y a un début. , Il y a une fermeture. ,Chacun d'eux savait qui était devant lui, Qui est le dernier? ,C'est comme avoir un fil qui les relie en série. On pourrait appeler ça un tableau linéaire. .

Tableau linéaire( List ): Séquence finie de zéro ou plusieurs éléments de données . Voici quelques points clés à souligner .
D'abord, c'est une séquence. .C'est - à - dire, Il y a un ordre entre les éléments , S'il y a plus d'un élément , Le premier élément n'a pas de précurseur ,Le dernier élément n'a pas de successeur,Chaque autre élément a et n'a qu'un seul précurseur et successeur.Si un enfant va chercher des vêtements derrière deux enfants, On ne peut pas faire la queue. ;Encore une fois, Si les vêtements derrière un enfant , Tiré par deux enfants ou plus , C'est une bagarre. , Au lieu d'une file d'attente ordonnée .Et puis, L'accent du tableau linéaire est limité , Le nombre de classes pour enfants est limité , Le nombre d'éléments est bien sûr limité. .En fait,Les objets traités dans un ordinateur sont limités, Ce genre de séquence infinie , N'existe que dans les concepts mathématiques .
Si vous définissez en langage mathématique . Peut être: :

Si la linéarité est enregistrée comme ( a1,....a(i-1),a(i),a(i+1),....,a(n)), Dans le tableau  a (i-1)Avanta(i) , a(i)Avant                    a(i+1) Pesage a(i-1) - Oui. a(i) Éléments précurseurs directs de , a(i+1) - Oui. a(i) Éléments consécutifs immédiats de .Quandi=1,2,…, n-1Heure, a(i) Il n'y a qu'un seul successeur direct ,Quandi =2,3,…, n Heure, a(i) Il n'y a qu'un seul précurseur direct .Comme le montre la figure ci - dessous.

Trois,Types de données abstraites pour les tableaux linéaires

Nous avons déjà donné la définition du tableau linéaire ,Maintenant, analysons, Que devrait faire un tableau linéaire? ?
Ou retourner à Gang. オ Exemples d'enfants à la maternelle , Le professeur veut que les enfants entrent et sortent en ordre. , Alors pense à leur faire une file d'attente. , Et c'est un ordre d'utilisation à long terme ,Ce processus d'examen et d'ordonnancement est en fait un processus de création et d'initialisation de tables linéaires. Pas d'expérience au début. , Après avoir aligné les enfants , Certains sont grands et d'autres sont petits. , L'équipe est moche. ,Il s'agit d'une table linéaire réinitialisée à une table vide.
En ligne. ,Nous pouvons toujours appeler le nom de l'enfant à un endroit de l'équipe et ses détails. Comme demander aux parents , Le cinquième enfant de l'équipe , Pourquoi est - ce si vilain? , Comment s'appelle - t - il? , Le professeur peut le dire rapidement au parent .Il s'agit également d'une opération de table linéaire importante pour obtenir des éléments de données dans l'ordre des bits.
Quoi d'autre? ? Parfois, on se demande , Un enfant. , Comme si McDull était un enfant de la classe. , Le professeur me dira: ,Non, pas du tout., McDull est à Springfield Flower Kindergarten. , Pas dans notre jardin d'enfants. .Ce type de recherche de l'existence d'un élément est très courant. Puis les parents ont demandé au professeur , Combien d'enfants y a - t - il dans la classe? ,Ce problème d'obtention de la longueur de la table linéaire est également courant.Apparemment., Pour une maternelle , Rejoignez un nouvel enfant dans la file d'attente , Ou un enfant malade , Un emplacement doit être supprimé , C'est normal. . Pour un tableau linéaire ,L'insertion et la suppression de données sont des opérations nécessaires.

ADT Tableau sexuel ( List )

Data 
La collection d'objets de données pour les tables linéaires est (a1,a2,a3,....a(n)), Chaque élément est de type  DataType .Parmi eux, Sauf le premier élément  a1,Extérieur,Chaque élément a et n'a qu'un seul élément précurseur direct, Sauf le dernier élément  a(n) ,Extérieur,Chaque élément a et n'a qu'un seul élément successeur direct.La relation entre les éléments de données est individuelle.
 Operation 
                InitList (* L ):Initialisation de l'opération, Créer une table linéaire vide  L .
                ListEmpty ( L ): Si le tableau linéaire est vide ,Retour true ,Sinon, retournez à false .

                ClearList (* L ): Effacer la table linéaire .
                GetElem ( L , i ,*e ): Dans le tableau linéaire 1 Éléments de position retournés à  e .
                 LocateElem ( L , e ): Dans le tableau linéaire ム Appel central et mode donné  e Éléments égaux,Si la recherche réussit, Renvoie le numéro de séquence de l'élément dans le tableau indiquant le succès ;Sinon,Retour0Indique un échec.
                ListInsert (*L , i , e ): Dans le tableau linéaire 1 Insérer un nouvel élément  e .
                ListDelete (* L , i ,* e ): Naviguez dans le tableau linéaire 1 Éléments de localisation ,Utilisation concomitante e Renvoie sa valeur. 

                ListLength (1): Retour au tableau linéaire  L Nombre d'éléments pour.

endADT

Pour différentes applications , Le fonctionnement de base des tableaux linéaires est différent ,Les opérations décrites ci - dessus sont des opérations plus complexes concernant les tableaux linéaires impliqués dans les questions les plus fondamentales,Une combinaison de ces opérations de base est tout à fait possible.
Par exemple,, Pour mettre en œuvre deux ensembles de tables linéaires  A Et B  Opérations d'union pour . C'est - à - dire que la collection  A = AUB Est de rassembler l'existence  B  Mais il n'y a pas de collection  A  Éléments de données insérés dans la collection  A Juste au milieu.
Analysez cette opération. , Il s'avère qu'on a juste besoin de boucler l'ensemble.  B Chaque élément de, Déterminer l'ensemble d'existence  A Moyenne,S'il n'existe pas, Insérer dans la collection  A Juste au milieu. L'idée est qu'il est facile de penser
Supposons que La Ensemble de représentations A , Lb Ensemble de représentations B , Le Code implémenté est le suivant: :

/* Tout dans le tableau linéaire Lb Moyenne mais pas La Éléments de données insérés dans LaMoyenne*/
void unionL(SqList* La, SqList Lb)
{
int La_len, Lb_len, i;
ElemType e; /*Déclaration etLaEtLb Même élément de données e*/
La_len = ListLength(*La); /* Calculer la longueur du tableau linéaire */
Lb_len = ListLength(Lb);
for (i = 1; i <= Lb_len; i++)
{
GetElem(Lb, i, &e); /*Prends - le.LbMoyennei Éléments de données assignés à e*/
if (!LocateElem(*La, e)) /*La Non présent et e Même élément de données */
ListInsert(La, ++La_len, e); /*Insérer*/
}
}

Attention!:

Quand vous passez un argument à une fonction ,Ce paramètre sera - t - il modifié dans le nombre suivant pour déterminer quelle forme de paramètre utiliser.
Si nécessaire , Vous devez passer un pointeur vers ce paramètre .
Si elle n'est pas modifiée , Vous pouvez passer ce paramètre directement .

Quatre,Structure de stockage séquentielle des tableaux linéaires

4.1,Définition du stockage séquentiel

Structure de stockage séquentielle des tableaux linéaires,Désigne le stockage séquentiel des éléments de données d'une table linéaire dans une unit é de stockage avec une adresse séquentielle.

Le tableau linéaire est le suivant: :

 4.2, Stockage séquentiel

Structure de stockage séquentielle des tableaux linéaires,C'est clair., Est de trouver un morceau dans la mémoire , Par possession , J'ai pris un peu de mémoire. ,Les éléments de données du même type de données sont ensuite stockés successivement dans cette clairière, Même type de données . Créer un tableau linéaire ,Position de départ, Capacité de stockage maximale ,Ajouter des données, Supprimer les données, etc. est très important .

Regardez le Code de stockage séquentiel de la table linéaire :

#define MAXSIZE 20 /* Allocation initiale de stockage */
typedef int ElemType; /* ElemType Type selon la situation réelle , Supposons ici que int */
typedef struct
{
ElemType data[MAXSIZE]; /* Tableau, Stockage des éléments de données */
int length; /* Longueur actuelle du tableau linéaire */
}SqList;

Attention!:

Emplacement de départ de l'espace de stockage :Tableaudata,Son emplacement de stockage est le point de départ de l'espace de stockage.

Capacité maximale de stockage du tableau linéaire :Longueur du tableauMAXSIZE.

Longueur actuelle du tableau linéaire :length.

4.3, Différence entre la longueur des données et la longueur linéaire

Attention!, Voici deux concepts “Longueur du tableau”Et“ Longueur du tableau linéaire ” Nécessité de distinguer .
La longueur du tableau est la longueur de l'espace de stockage dans lequel la table linéaire est stockée. Cette quantité est généralement constante après l'allocation de stockage. Certains camarades de classe peuvent demander , La taille du tableau ne doit - elle pas changer? ? Un tableau unidimensionnel qui peut être attribué dynamiquement .C'est vrai., Langues générales de haut niveau telles que C ,VB ,C ++Peut être programmé pour distribuer dynamiquement des tableaux, Mais cela entraîne une perte de performance .
La longueur du tableau linéaire est le nombre d'éléments de données dans le tableau linéaire, Au fur et à mesure que les opérations d'insertion et de suppression de tableaux linéaires progressent , Cette quantité est variable .
À tout moment,La longueur du tableau linéaire doit être inférieure ou égale à la longueur du tableau.

4.4, Méthode de calcul de l'adresse

Parce que nous comptons tous à partir de 1Nombre initial, La définition d'un tableau linéaire n'est pas non plus exempte de vulgarité. , Au début aussi. 1,Mais C  Les tableaux de la langue sont tirés de 0 Début du premier indice , Et donc le tableau linéaire i Éléments à stocker dans le tableau i-1Emplacement,C'est - à - dire qu'il existe une relation correspondante entre le numéro de série de l'élément de données et l'indice du tableau dans lequel il est stocké.

 Stocker un tableau séquentiel avec un tableau signifie allouer un espace de tableau de longueur fixe,Parce qu'il est possible d'insérer et de retourner des lignes dans un tableau linéaire,L'espace de tableau attribué est donc supérieur ou égal à la longueur de la table linéaire courante.
En fait..., Adresses en mémoire ,Comme un siège dans une bibliothèque ou un cinéma, Tous numérotés .Chaque cellule de mémoire a son propre numéro, Ce numéro s'appelle l'adresse . Quand nous avons pris place , Lorsque la première position du siège est déterminée , Les positions suivantes sont calculables .Réfléchis., Je suis cinquième en classe. , Derrière moi. 10 Quelle est la note des élèves? ?Bien sûr que6,7,…,15, Parce que chaque élément de données , Qu'il soit entier 、 Réel ou caractère ,Il a besoin d'un certain espace de stockage. Supposons que vous utilisiez une unit é de stockage , Dans le tableau linéaire, +1L'emplacement de stockage des éléments de données et l'emplacement de stockage du premier élément de données satisfont aux relations suivantes( LOC  Fonction représentant l'emplacement de stockage obtenu ).

LOC(a(i+1)) = LOC(a(i))+ c

LOC(a(i)) = LOC(a(i)) + (i - 1)* c

Voici ce que nous avons compris :

 Par cette formule,Vous pouvez calculer l'adresse n'importe où dans le tableau linéaire à tout moment, Que ce soit le premier ou le dernier , C'est le même moment. .Donc nous stockons ou Récupérons les données pour chaque emplacement de table linéaire, C'est le même temps pour un ordinateur. , C'est une constante. ,Donc, avec le concept de complexité temporelle que nous avons appris avec nos algorithmes, Son temps d'accès est O(1).Nous appelons généralement une structure de stockage avec cette fonctionnalité une structure d'accès aléatoire.

Cinq, Insertion et suppression de structures de stockage séquentielles

5.1, Obtenir l'action de l'élément

Pour une structure de stockage séquentielle de tables linéaires , Si nous voulons réaliser GetElemFonctionnement, En ce qui concerne la procédure ,Tant quei La valeur de est dans la plage d'indice du tableau , Est de mettre un tableau i-1 Retour de l'indice ,Les codes sont les suivants::

#define OK 1
#define ERROR 0
typedef int ElemType; /* ElemType Type selon la situation réelle , Supposons ici que int */
/* Conditions initiales: Tableau linéaire séquentiel LExiste déjà,1≤i≤ListLength(L) */
/* Résultats des opérations:AveceRetourLMoyennei Valeurs des éléments de données ,Attention!i C'est la position. ,No1 Le tableau des emplacements est de 0C'est parti. */
Status GetElem(SqList L,int i,ElemType *e)
{
if(L.length==0 || i<1 || i>L.length)
return ERROR;
*e=L.data[i-1];
return OK;
}

5.2,Opération d'insertion

  L'idée de l'algorithme d'insertion :

(1) Si la position d'insertion est déraisonnable ,Lancer une exception;

(2)Si la longueur du tableau linéaire est supérieure ou égale à la longueur du tableau, Lance une augmentation anormale ou dynamique de la capacité ;

(3)Passez du dernier élément à laiPosition, Déplacez - les d'une position à l'autre. ;

(4) Remplir l'emplacement de l'élément à insérer iDivision;

(5) Longueur plus 1.Les codes sont les suivants::

/* Conditions initiales: Tableau linéaire séquentiel LExiste déjà,1≤i≤ListLength(L), */
/* Résultats des opérations:InLMoyennei Insérer un nouvel élément de données avant les emplacements e,L Longueur plus 1 */
Status ListInsert(SqList *L,int i,ElemType e)
{
int k;
if (L->length==MAXSIZE) /* La table linéaire séquentielle est pleine */
return ERROR;
if (i<1 || i>L->length+1)/* QuandiPlus petit que la première position ou plus grand que la dernière position */
return ERROR;
if (i<=L->length) /* Si l'emplacement des données insérées n'est pas à la fin du tableau */
{
for(k=L->length-1;k>=i-1;k--) /* Déplacer l'élément de données après l'emplacement à insérer d'un bit vers l'arrière */
L->data[k+1]=L->data[k];
}
L->data[i-1]=e; /* Insérer un nouvel élément */
L->length++;
return OK;
}

5.3,Supprimer l'action

  L'idée de supprimer l'algorithme :

(1) Si l'emplacement de la suppression n'est pas raisonnable ,Lancer une exception:

(2) Supprimer l'élément Supprimer

(3)Traverser à partir de la position de l'élément supprimé jusqu'à la dernière position de l'élément, Déplacez - les tous vers l'avant.
Bataillon

(4) Diminution de la longueur du tableau 1.Le Code d'implémentation est le suivant:

/* Conditions initiales: Tableau linéaire séquentiel LExiste déjà,1≤i≤ListLength(L) */
/* Résultats des opérations:SupprimerLDeiÉléments de données,Utilisation concomitanteeRenvoie sa valeur,LLongueur moins1 */
Status ListDelete(SqList *L,int i,ElemType *e)
{
int k;
if (L->length==0) /* Le tableau linéaire est vide */
return ERROR;
if (i<1 || i>L->length) /* Supprimer l'emplacement incorrect */
return ERROR;
*e=L->data[i-1];
if (i<L->length) /* Si la suppression n'est pas la dernière position */
{
for(k=i;k<L->length;k++)/* Déplacer l'élément suivant de l'emplacement supprimé vers l'avant */
L->data[k-1]=L->data[k];
}
L->length--;
return OK;
}

5.4, Avantages et inconvénients de la structure de stockage séquentiel des tableaux linéaires

 Six, Structure de stockage en chaîne de la table linéaire

6.1, Définition linéaire de la structure de stockage en chaîne

Précédemment dans la structure séquentielle ,Chaque élément de données n'a besoin que de stocker l'information de l'élément de preuve. Dans la structure actuelle de la chaîne , En plus de stocker des informations sur les éléments de données , Et l'adresse de stockage de son élément arrière .

Au - delà de ses propres informations ,Il est également nécessaire de stocker un message indiquant sa dimension postérieure directe( C'est - à - dire l'emplacement de stockage immédiat ).Nous appelons le domaine dans lequel l'information sur l'élément de données est stockée le domaine de données,Le domaine qui stocke les emplacements subséquents directs est appelé le domaine pointeur. Les informations stockées dans le champ pointeur sont appelées pointeurs ou chaînes . Ces deux parties de l'information constituent l'élément de données  a (i) Image de stockage pour , Appelé noeud ( Node )

 n Noeuds( a (i) Image de stockage pour ) Lien vers une liste de liens ,C'est un tableau linéaire( a1, a2 ,.… an .)Structure de stockage en chaîne pour,Parce que chaque noeud de cette liste ne contient qu'un seul champ de pointeur, Ça s'appelle une liste à chaîne unique. ,Les tableaux à chaîne unique relient les éléments de données des tableaux linéaires dans leur ordre logique par l'intermédiaire des champs de pointeurs de chaque noeud.

Pour les tableaux linéaires , Il doit y avoir une tête et une queue. , Les listes de liens ne font pas exception .Nous appelons l'emplacement de stockage du premier noeud de la liste des pointeurs de tête,L'accès à l'ensemble de la liste doit alors commencer par un pointeur depuis le début. Après chaque noeud ,En fait, c'est l'endroit où le pointeur suivant précédent pointe.Imagine ça., Dernier noeud , Où son pointeur Pointe - t - il? ?
Le dernier., Ça veut dire qu'il n'y a pas de suivi direct. , C'est pourquoi nous avons prescrit , Le dernier pointeur de noeud de la liste linéaire est “Vide”(Généralement utilisé NULL Ou“”Représentation symbolique,Comme le montre la figure ci - dessous.

 Parfois,Pour faciliter le fonctionnement de la liste,Un noeud est fixé avant le premier noeud du tableau à chaîne unique, Appelé noeud de tête .Le champ de données du noeud d'en - tête peut ne pas stocker d'informations, Qui l'a appelé le premier? , J'ai ce privilège. .Des informations supplémentaires telles que la longueur des tables linéaires peuvent également être stockées,Le champ pointeur du noeud d'en - tête stocke le pointeur vers le premier noeud,Comme le montre la figure ci - dessous.

 6.2, Similitudes et différences entre le noeud de tête et le pointeur de tête

6.3, Description du Code d'une structure de stockage linéaire

Liste vide

 Pour représenter la relation entre les éléments de données et les éléments de données dans un tableau linéaire, Passons à ce qui suit: :

  Liste à chaîne unique et liste à chaîne vide avec noeud d'en - tête

  De cette définition structurelle , On le sait. ,Un noeud se compose d'un champ de données qui contient l'élément de données et d'un champ pointeur qui contient l'adresse du noeud suivant.Hypothèses p  Est un pointeur vers le premier élément du tableau linéaire , Le noeud  a  Nous pouvons  p -> data Pour représenter, p -> data  La valeur de est un élément de données ,Noeud a  Le champ pointeur de  p -> next Pour représenter, P -> next  La valeur de est un pointeur . p -> next  À qui? ? Bien sûr. 1Éléments, Pointer vers  a .Pointeur vers.C'est - à - dire,Si p -> data égal à a ,Alors p -> next -> data égal à a ,(Comme le montre la figure ci - dessous).

Sept,Tous les codes

#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#include "time.h"
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20 /* Allocation initiale de stockage */
typedef int* ElemType /* ElemType Type selon la situation réelle , Supposons ici que int */
typedef struct
{
ElemType data[MAXSIZE]; /* Tableau, Stockage des éléments de données */
int length; /* Longueur actuelle du tableau linéaire */
}SqList;
typedef int Status; /* Status Est le type de fonction , Sa valeur est le Code d'état du résultat de la fonction ,Par exemple:OKAttendez. */
Status visit(ElemType c)
{
printf("%d ",c);
return OK;
}
/* Tableau linéaire de l'ordre d'initialisation */
Status InitList(SqList *L)
{
L->length=0;
return OK;
}
/* Conditions initiales: Tableau linéaire séquentiel LExiste déjà.Résultats des opérations:SiL Table vide ,RenvoieTRUE,Sinon, retournez àFALSE */
Status ListEmpty(SqList L)
{
if(L.length==0)
return TRUE;
else
return FALSE;
}
/* Conditions initiales: Tableau linéaire séquentiel LExiste déjà.Résultats des opérations:Oui.L Réinitialiser à une table vide */
Status ClearList(SqList *L)
{
L->length=0;
return OK;
}
/* Conditions initiales: Tableau linéaire séquentiel LExiste déjà.Résultats des opérations:RetourL Nombre d'éléments de données dans */
int ListLength(SqList L)
{
return L.length;
}
/* Conditions initiales: Tableau linéaire séquentiel LExiste déjà,1≤i≤ListLength(L) */
/* Résultats des opérations:AveceRetourLMoyennei Valeurs des éléments de données ,Attention!i C'est la position. ,No1 Le tableau des emplacements est de 0C'est parti. */
Status GetElem(SqList L,int i,ElemType *e)
{
if(L.length==0 || i<1 || i>L.length)
return ERROR;
*e=L.data[i-1];
return OK;
}
/* Conditions initiales: Tableau linéaire séquentiel LExiste déjà */
/* Résultats des opérations:RetourLMoyenne1Ete Ordre des bits des éléments de données qui satisfont à la relation . */
/* Si un tel élément de données n'existe pas ,La valeur de retour est0 */
int LocateElem(SqList L,ElemType e)
{
int i;
if (L.length==0)
return 0;
for(i=0;i<L.length;i++)
{
if (L.data[i]==e)
break;
}
if(i>=L.length)
return 0;
return i+1;
}
/* Conditions initiales: Tableau linéaire séquentiel LExiste déjà,1≤i≤ListLength(L), */
/* Résultats des opérations:InLMoyennei Insérer un nouvel élément de données avant les emplacements e,L Longueur plus 1 */
Status ListInsert(SqList *L,int i,ElemType e)
{
int k;
if (L->length==MAXSIZE) /* La table linéaire séquentielle est pleine */
return ERROR;
if (i<1 || i>L->length+1)/* QuandiPlus petit que la première position ou plus grand que la dernière position */
return ERROR;
if (i<=L->length) /* Si l'emplacement des données insérées n'est pas à la fin du tableau */
{
for(k=L->length-1;k>=i-1;k--) /* Déplacer l'élément de données après l'emplacement à insérer d'un bit vers l'arrière */
L->data[k+1]=L->data[k];
}
L->data[i-1]=e; /* Insérer un nouvel élément */
L->length++;
return OK;
}
/* Conditions initiales: Tableau linéaire séquentiel LExiste déjà,1≤i≤ListLength(L) */
/* Résultats des opérations:SupprimerLDeiÉléments de données,Utilisation concomitanteeRenvoie sa valeur,LLongueur moins1 */
Status ListDelete(SqList *L,int i,ElemType *e)
{
int k;
if (L->length==0) /* Le tableau linéaire est vide */
return ERROR;
if (i<1 || i>L->length) /* Supprimer l'emplacement incorrect */
return ERROR;
*e=L->data[i-1];
if (i<L->length) /* Si la suppression n'est pas la dernière position */
{
for(k=i;k<L->length;k++)/* Déplacer l'élément suivant de l'emplacement supprimé vers l'avant */
L->data[k-1]=L->data[k];
}
L->length--;
return OK;
}
/* Conditions initiales: Tableau linéaire séquentiel LExiste déjà */
/* Résultats des opérations:À tour de rôle.L Sortie de chaque élément de données pour */
Status ListTraverse(SqList L)
{
int i;
for(i=0;i<L.length;i++)
visit(L.data[i]);
printf("\n");
return OK;
}
/* Tout dans le tableau linéaire Lb Moyenne mais pas La Éléments de données insérés dans LaMoyenne*/
void unionL(SqList *La,SqList Lb)
{
int La_len,Lb_len,i;
ElemType e; /*Déclaration etLaEtLb Même élément de données e*/
La_len=ListLength(*La); /* Calculer la longueur du tableau linéaire */
Lb_len=ListLength(Lb);
for (i=1;i<=Lb_len;i++)
{
GetElem(Lb,i,&e); /*Prends - le.LbMoyennei Éléments de données assignés à e*/
if (!LocateElem(*La,e)) /*La Non présent et e Même élément de données */
ListInsert(La,++La_len,e); /*Insérer*/
}
}
int main()
{
SqList L;
SqList Lb;
ElemType e;
Status i;
int j,k;
i=InitList(&L);
printf("InitialisationLAprès:L.length=%d\n",L.length);
for(j=1;j<=5;j++)
i=ListInsert(&L,1,j);
printf("InL Insérer l'en - tête dans l'ordre 1~5Après:L.data=");
ListTraverse(L);
printf("L.length=%d \n",L.length);
i=ListEmpty(L);
printf("L Vide ou non :i=%d(1:- Oui. 0:Non)\n",i);
i=ClearList(&L);
printf("Vide.LAprès:L.length=%d\n",L.length);
i=ListEmpty(L);
printf("L Vide ou non :i=%d(1:- Oui. 0:Non)\n",i);
for(j=1;j<=10;j++)
ListInsert(&L,j,j);
printf("InL Insérer à la fin du tableau 1~10Après:L.data=");
ListTraverse(L);
printf("L.length=%d \n",L.length);
ListInsert(&L,1,0);
printf("InL Insertion de l'en - tête pour 0Après:L.data=");
ListTraverse(L);
printf("L.length=%d \n", L.length);
GetElem(L,5,&e);
printf("No5La valeur des éléments est:%d\n",e);
for(j=3;j<=4;j++)
{
k=LocateElem(L,j);
if(k)
printf("No%dLa valeur des éléments est%d\n",k,j);
else
printf(" Aucune valeur %dÉléments de\n",j);
}
k=ListLength(L); /* k Longueur de la montre */
for(j=k+1;j>=k;j--)
{
i=ListDelete(&L,j,&e); /* Supprimer le paragraphejDonnées */
if(i==ERROR)
printf("Supprimer le paragraphe%d Échec des données \n",j);
else
printf("Supprimer le paragraphe%d La valeur de l'élément pour :%d\n",j,e);
}
printf("Sortie séquentielleLÉléments de:");
ListTraverse(L);
j=5;
ListDelete(&L,j,&e); /* Supprimer le paragraphe5Données */
printf("Supprimer le paragraphe%d La valeur de l'élément pour :%d\n",j,e);
printf("Sortie séquentielleLÉléments de:");
ListTraverse(L);
// Construire un 10NombreLb
i=InitList(&Lb);
for(j=6;j<=15;j++)
i=ListInsert(&Lb,1,j);
unionL(&L,Lb);
printf(" La sortie a été fusionnée dans l'ordre LbDeLÉléments de:");
ListTraverse(L);
return 0;
}

版权声明
本文为[- Non.]所创,转载请带上原文链接,感谢
https://qdmana.com/2021/10/20211013212513189p.html

  1. 为什么说 Node.js 是实时应用程序开发的绝佳选择
  2. PaddlePaddle:在 Serverless 架构上十几行代码实现 OCR 能力
  3. 使用elementui在完成项目中遇到的未知知识点2
  4. On the mechanism of webpack loader
  5. 云原生体系下 Serverless 弹性探索与实践
  6. vue开发技巧
  7. Une fleur merveilleuse de l'histoire de l'industrie des nouveaux véhicules énergétiques, Zhongtai Jiangnan T11, une voiture vintage que vous n'avez jamais vue
  8. 致敬!再见了!LayUI !
  9. Vue安装和卸载
  10. Implement a flipped character with the transform attribute of CSS
  11. 你的第一个 Docker + React + Express 全栈应用
  12. [apprentissage de l'algorithme] 1486. Fonctionnement exclusif du tableau (Java / C / C + + / python / go / Rust)
  13. Zhang Daxian sends a blessing video on xYG relay, showing positive energy in details
  14. 前端技巧-JS元编程ES6 symbol公开符号
  15. Article de 37 ans seul à l'hôpital!Il boitait, soupçonnait d'être blessé, souriait avec douleur
  16. 前端推荐!10分钟带你了解Konva运行原理
  17. npm ERR! iview-project@3.0.0 init: `webpack --progress --config webpack.dev.config.js
  18. 零基础学习Web前端需要注意什么呢?
  19. The Youth League promotes Yiyang Qianxi new film, and the relationship between the two generation and the generation is good. Li Fei is blessed.
  20. PaddlePaddle:在 Serverless 架构上十几行代码实现 OCR 能力
  21. JavaScript数组 几个常用方法
  22. Qu'est - ce qu'il faut remarquer à l'avant - plan Web de l'apprentissage de base zéro?
  23. 暢談this的四種綁定方式
  24. 2021最新Vue面试必胜宝典,大厂面试题解析!
  25. Quatre façons de lier ceci
  26. Préparation au développement de l'extension tagdown
  27. Intervieweur: Parlez - moi des flotteurs CSS
  28. Packaging the View Component Library with rollup
  29. Comment un composant enfant modifie les valeurs passées par le composant parent
  30. Résumé de l'API Express
  31. Optimisation de la structure du Code if else dans le projet
  32. Fonction magique pour résoudre le problème de la fonction maybe - - fonction either
  33. 新手学前端的方法是什么 自学前端该怎么规划
  34. 云原生体系下 Serverless 弹性探索与实践
  35. 如何全方位打造安全高效的HTTPS站点(一)
  36. "Liu Jing dit che 丨 point de vue" est - ce que Custom Road est un MpV digne de la terre?
  37. 从理念到LRU算法实现,起底未来React异步开发方式
  38. Compared with Volvo XC60, Lingke 09 goes out of the spa platform. What would you choose, regardless of the brand?
  39. PaddlePaddle:在 Serverless 架构上十几行代码实现 OCR 能力
  40. 云原生体系下 Serverless 弹性探索与实践
  41. 初学者怎么学Web前端?
  42. react
  43. PaddlePaddle:在 Serverless 架构上十几行代码实现 OCR 能力
  44. JavaScript数组 几个常用方法
  45. Angular 依赖注入 - 全面解析
  46. html_day02
  47. 那些年我们前端面试中经常被问到的题!
  48. The starting price of Ducati multistada V2 in North America is less than 100000 yuan
  49. Hls.js 使用文檔
  50. Hls.js travailler avec des documents
  51. Problèmes liés à la précision JS
  52. Copie une partie des propriétés d'un objet à un autre objet
  53. Multiplexage de modules en vuex
  54. Développement multilingue Android, questions d'entrevue pour le développement de logiciels Android
  55. Chen lushai and her best friend Wang Meng play video, fearless of the pressure of public opinion, and in a good mood to dance in a bare back
  56. # Sass速通(四):继承、混合与函数
  57. Vidéo de développement de combat Android, questions d'entrevue rxjava
  58. Bugatti Chiron maintenance cost exposure! One piece for one car, burn money endlessly
  59. android应用开发基础答案,深入理解Nginx
  60. 做了三年前端,你才知道10分钟就能实现一个PC版魔方游戏