Skip to main content

Mots

Cet article démarre, démarrant une nouvelle série, une structure de données, une structure de données dans l'algorithme ou une suggestion, alors l'apprentissage de la structure de données est toujours nécessaire. Cet article introduit principalement la première structure de la structure de données. - la carte linéaire, principalement divisée en sections suivantes:

1. Concept

2. Structure de stockage

Séquence de séquence
Chaîne de stockage

3. Comparaison de Avantages et inconvénients de la structure de stockage

4. Table d'activité

Tableau d'activité A LIEN
Liste de liaison Deux fois

Remarque: Cette série de langues utilisera C Doit comprendre cette série, vous devez comprendre certaines plates-formes de langage C, étudier Python, ne vous inquiétez pas, saisissez d'abord le principe, viendra à une série de déploiement de Python.




Les cartes linéaires sont une chaîne limitée de 0 ou plus de composants de données identiques, nombre de pHuất Tithu dans cette séquence s'appelle la longueur des tables linéaires et des formes linéaires avec les caractéristiques suivantes:
Premièrement, une chaîne
suivie de la limite
peut être commandée ou ne peut pas trembler. Vous pouvez comprendre des échantillons linéaires dans un groupe d'élèves, ce qui permet à ces étudiants de disposer de manière aléatoire la hauteur de petite à grande, et peut être disposée de manière aléatoire dans une carte linéaire
. Aucun élément antérieur et les éléments fines parmi les compteurs linéaires ne sont pas l'élément suivant que l'élément d'entraînement avant, à l'exception de l'élément de départ et de l'élément d'extrémité, chaque élément seulement un élément d'entraînement vers l'avant et l'élément suivant.



Structure de stockage

La structure de stockage de la carte linéaire comporte deux types de structure de stockage séquentielle et de structure de stockage de chaînes. En ce qui concerne la feuille de séquence, appelé plus tard une liste liée.



Structure de stockage séquentielle

La feuille de séquence met toutLes deux éléments contenus dans des tables linéaires dans un certain ordre logique, stockant un espace de stockage continu à partir de l'emplacement désigné, se concentrant sur l'espace de stockage continu.



La différence de longueur entre la longueur de la matrice et la carte linéaire: la matrice de longueur est la longueur du stockage de l'espace de stockage et ce montant est stocké. En général, la longueur de la carte linéaire est le nombre de composants de données dans le panneau linéaire et cette quantité est modifiée lorsque le panneau linéaire est inséré et supprimé.

Le manuel de la structure:


Il existe également un mode d'écriture relativement simple, comme suit:

Stockage séquentiel des tables linéaires et des inconvénients typedef struct{ int data[maxsize]; //建立存放int类型数据的一个数组 int lengeth; //存放顺序表的长度}

Structure de stockage de chaîne


String Structure de stockage consiste à améliorer les inconvénients du magasin de structure dans l'ordre, l'inconvénient maximum de la structure de stockage séquentielle insère et la suppression d'un certain élément prend du temps à bouge toiDe nombreux facteurs. Pourquoi avez-vous un tel mouvement et supprimez un facteur, vous devez déplacer beaucoup d'éléments car l'emplacement de stockage des deux éléments est également adjacent et que leur position en mémoire est également au milieu, sans vide au milieu, il est Impossible d'insérer directement, inséré, vous devez déplacer d'autres éléments pour déplacer d'autres facteurs. Si vous supprimez un élément, vous découlerez de l'espace et vous devez également déplacer d'autres facteurs pour former. En résumé, le principal problème causé par la mémoire séquentielle est due aux positions de stockage des éléments adjacents adjacents et des emplacements dans la mémoire également en mémoire. int A[maxsize];int n;

La raison pour laquelle maintenant les problèmes d'hébergement que nous savons déjà qu'il n'est nécessaire de le résoudre, de sorte que la position entre l'élément n'est pas adjacente, l'emplacement de la mémoire n'est pas écrasé, nous avons mentionné Cette structure de stockage sous la structure de stockage de chaîne et la structure de stockage de chaînes de tables linéaires sont caractérisées par un ensemble d'éléments de données tuberculesUn groupe d'unités de stockage, groupes d'unités d'hébergement. Il peut être continu ou discontinu, ce qui signifie que ces facteurs de données peuvent exister n'importe quel endroit que la mémoire n'est pas occupée. Un autre point est que dans la structure de stockage séquentielle, chaque capacité de données doit uniquement stocker des informations de l'élément de données, mais dans la structure de chaîne, en plus de stocker des informations sur les éléments de données, il faut enregistrer stocker la position de stockage de ses éléments continus. Nous nous référons au domaine des informations d'élément de données stockées sous forme de champ de données, reportez-vous au nom de domaine de la position suivante et les informations stockées dans le domaine du curseur sont appelées le pointeur ou la chaîne, les noms de données, et les noms de curseur constituent des éléments de données. comme un bouton.

1. Tableau de lien unique
N Liaison connectée à la liste de liaisons, il s'agit de la structure de stockage de chaîne de la carte linéaire car chaque lien est lié qu'un seul domaine de nœud est inclus dans le bouton, donc il s'appelle mUne seule table de liaison et une liste de fil unique sont connectées par l'élément de données de chaque bouton de point à la table linéaire en fonction de sa couche logique.


Certaines chaînes sont des articulations de la tête et certains n'incluent pas la communication de la tête, le bouton-tête du bouton de tête ne peut stocker aucune information et stocker des longueurs de carte linéaire. Autres informations supplémentaires, le domaine du curseur du noeud de sous-pointeur au premier nœud. Lorsque la ligne a un connecteur de tête, il est équivalent à l'existence semblable au sommet du navire, en utilisant uniquement le train de surface. Commencez, ne prenez pas les invités. (La liste liée comprend généralement le bouton de la tête)
Dans la seule table de liaison du bouton Titre, le point de tête du pointeur supérieur pointe vers le premier trading, le champ de données du connecteur de tête n'est pas couvert, y compris . Toute information commence à stocker des informations de données à partir de l'enveloppe du bouton supérieur. Le curseur de tête est toujours nul (le pointeur appelle aux informations à l'élément suivant. Quand il est null, il ne pointe pas d'élément), Head- & GT; Ensuite avec NULL, la liste liée est vide.



Tête du pointeur de tête dans une seule liaison dans le titre direct directement sur le point, lorsque la tête null (tête - & gt; = null), la liste liée est null.


L'accès à la liste de liaison totale doit démarrer à partir du curseur de tête et chaque bouton est l'emplacement du dernier bouton, le dernier bouton. Le pointeur du point (terminal de boutons) est vide, généralement représenté par NULL ou ^.




2. Lien statique

La table de liaison unique avant est un pointeur, mais certaines langues de programmation y a-t-il un pointeur, comment? Les personnes intelligentes ont toujours, certaines personnes viennent utiliser des tableaux à la place des pointeurs pour décrire des tables de fil unique, permettent à chaque tableau consiste en deux champs de données, chacun correspondant aux deux champs de données, un deux champs de données, servent à stocker des éléments de données, un article utiliséUtilisez-le pour stocker pour stocker le prochain curseur. Nous appelons cette zone de cette matrice appelée une liste de liaisons statiques.


3. Type de chaîne circulatoire

Modifiez la tête du pointeur du bouton de la borne dans le tableau un thread avec un pointeur vierge pour pointer vers le point de tête, à l'ensemble du single. La liste de liaisons forme une bague, cette table de liaison de queue unique est appelée série de cycle, appelée liste de chaînes rondes.


4. Liens bidimensionnels
Sur la base d'une liste d'une fibre, nommant le domaine du pointeur pointant vers le point avant de le décharger dans chaque nœud. Un tel bouton peut indiquer devant celui-ci et nous pouvons indiquer la prochaine fois et nous appelons cette chaîne pour une liste de liaisons à double sens. typedef struct LNode{ int data; //data中存放结点数据域 struct LNode *next; //指向后继结点的指针}LNode; //定义单链表结点类型

Définition de la double liaison

Le bouton est l'espace de stockage attribué par l'utilisateur en mémoire, à l'aide d'une adresse. Indique qu'il n'y a pas de nom clair, nous allons donc identifier un pointeur en kSalut Affectation de l'espace de la chaîne et l'adresse de cet espace est signalé sur le bouton. Le nom de ce curseur est comme si le nom du bouton, par exemple:

STRUCTION DE STOCKAGE ET STOCKAGE DE SÉQUENCE

Étant donné que l'adresse stockée de la table de séquence est continue, que vous n'avez besoin que de Connaissez l'emplacement d'un élément qui peut obtenir n'importe quel élément de la table de commande en compensant la position de départ et nous mentionnons cette fonctionnalité sous forme de propriétés d'accès aléatoire.


L'élément de données de la table de séquence est stocké dans un segment d'espace continu et une allocation de cet espace de stockage (c'est-à-dire que l'emplacement) doit être effectué auparavant, une fois alloué non modifié pendant le fonctionnement.

La feuille de séquence doit déplacer un grand nombre d'éléments lors de l'insertion d'un élément supprimé.


Parce que la structure d'archive de la liste liée est les informations de localisation contenant l'élément de données suivant, la section suivante contient le fichier suivant, qui est, chaque élément d'élémentU est un contact unique, où vous voulez savoir où se trouve le dernier élément, vous devez aller à la queue depuis le début, la liste liée ne supporte donc pas l'accès aléatoire.
typedef struct DLLNode{ int data; //data中存放结点数据域(默认是int类型,也可以是其他) struct DLNode *prior; //指向前驱结点的指针 struct DLNode *next; //指向后继结点的指针}DLNode; //定义双链表结点类型
Chaque nœud de la liste liée doit être divisé en une partie de l'espace pour enregistrer un pointeur sur le bouton Suivant, de sorte que la vitesse d'utilisation de l'espace de stockage de Tandem dans la chaîne est plus élevée. que la feuille de séquence. C'est bas.
LNode *A = (LNode*)malloc(sizeof(LNode)); //用户分配(sizeof)了一片LNode空间,这时定义指针A来指向这个结点,同时我们也把A当作这个结点的名字。 La liste liée prend en charge l'allocation dynamique de stockage dynamique.

Lorsque la liste de lin est insérée et supprimée, il n'est pas nécessaire de déplacer un grand nombre d'éléments et uniquement des pointeurs pour modifier la position d'insertion que possible.


Panneau de commande

Vraiment divisé en plusieurs: Recherche, insertion, Supprimer

de la table de séquence:

1. Trouvez l'algorithme selon la valeur d'élément


2. Insérez l'algorithme d'élément de données

Insérer un nouvel élément dans la position du Table de séquence L, si la tête vRush inexact, puis retourner 0 et insérer cassé; Si l'entrée est correcte, l'élément P de la séquence et les éléments sont déplacés à droite et le nouvel élément est inséré dans la position null et la longueur de la feuille de séquence est augmentée. 3. Fonctionnement réussi d'insertion et retour 1.

3. Supprimer l'algorithme d'élément de données
Supprimez l'élément E de la table de séquence si l'entrée est incorrecte, elle paiera environ 0 et défaite une défaillance; Si l'entrée de P est correcte, les éléments de la position P dans la table de séquence sont transmis en avant et les éléments du P sont couverts.


Fonctionnement de la table bloquée


Activités unifiées
A et B sont les deux lignes de liste de liaison unique, dans laquelle l'élément est d'augmenter, de concevoir un algorithme, avec A et B dans une chaîne de c, c chaîne, pas diminue dans les éléments de commande, y compris A, B.


Analyse: On sait que des éléments de A et B sont en hausse et de rendre les éléments de C Fusionner encore dans des chosesSelf, ils peuvent être choisis parmi A, B. L'élément le plus petit est inséré dans la queue de C. Ainsi, lorsque tous les éléments de A, B sont insérés dans C, C doit augmenter dans l'ordre.

2. Insérez la queue

de la table d'une fibre

il est connu de stocker dans une matrice A, avec une explication de la queue (c'est-à-dire de la queue) Définir une chaîne de chaîne C

3. Le procédé d'inhumuration d'une table de fibres

int findElem (Sqlist L,int e){ int i; for (i=0,i<L.length,++i) //遍历L长度中的每个位置 if(e == L.data[i]) //获取每个位置对应的值和e值进行判断,这里的等于可以是大于、小于 return i; //如果找到与e值相等的值,则返回该值对应的位置 return -1; //如果找不到,则返回-1}
La méthode d'inactusement et la queue de queue est une manière correspondante, la première interpolation est Du début de la liste liée pour démarrer des inserts, gardez le dernier bouton inchangé; La queue est insérée à partir de la fin de la liste liée et le bouton de tête ne change pas.
int insertElem(Sqlist &L,int p,int e) //L是顺序表的长度,要发生变化,所以用引用型{ int i if (p<0 || p>L.length || L.length==maxsize) //如果插入e的位置p小于0,或者是大于L的长度,或者是L的长度已经等于了顺序表最大存储空间 return 0; for (i=L.length-1;i>=p;--i) //从L中的最后一个元素开始遍历L中位置大于p的每个位置 L.data[i+1]=L.data[i]; //依次将第i个位置的值赋值给i+1 L.data[p]=e; //将p位置插入e ++(L.length); //L的长度加1 return 1; //插入成功,返回1}

1. Définissez la liste de liaison deux fois en insérant la queue

int deleteElem (Sqlist &L,int p,int &e) //需要改变的变量用引用型{ int i; if(p<0 || p>L.length-1) //对位置p进行判断,如果位置不对,则返回0,表示删除失败 return 0; e=L.data[p]; //将要删除的值赋值给e for(i=p;i<L.length-1;++i) //从位置p开始,将其后边的元素逐个向前覆盖 L.data[i]=L.data[i+1]; --(L.length) //将表的长度减1 return 1; //删除成功,返回1}



2. Algorithme à trouver Boutons La valeur de la recherche des touches basées sur X de la liste est double liée, le cas échéant, renvoyer les pointeurs NULL, si cela ne renvoie pas les valeurs NULL. [première23] 3. Insérer un algorithme de bouton Insérez une touche S après la touche mentionnée dans la liste répertoriée, la pensée de base est le point de p, il s'agit de la paroi avant du point S , l'avant de S est P et le point commun est le S, le code est le suivant: 4. Suppression de l'algorithme pour supprimer la livraison à l'inverse. du bouton P de la liste est double lié, la pensée de base fournit le bouton suivant de P à q, puis appelez P pointer sur le verso de Q, avant que les plans de boutons de bouton Q sont p, après cette version Q, le code est comme suit:

Sujets

Catégories