Maison Problème commun Une chaîne est-elle une liste linéaire avec des objets de données et des opérations spéciales ?

Une chaîne est-elle une liste linéaire avec des objets de données et des opérations spéciales ?

Feb 03, 2021 am 11:14 AM
数据结构

Oui, la chaîne est une structure de liste linéaire avec des objets de données et des opérations spéciales. La chaîne mentionnée dans la structure de données est une chaîne ; les caractères de la chaîne ont une relation logique "un à un", donc à proprement parler, la structure de stockage de chaîne est une structure de stockage linéaire.

Une chaîne est-elle une liste linéaire avec des objets de données et des opérations spéciales ?

L'environnement d'exploitation de ce tutoriel : système Windows 7, ordinateur Dell G3.

La chaîne mentionnée dans la structure de données, c'est-à-dire une chaîne, est un tout composé de n caractères ( n >= 0 ). Ces n caractères peuvent être composés de lettres, de chiffres ou d'autres caractères.

Dans la structure de données, les chaînes doivent être stockées dans une structure de stockage distincte, appelée structure de stockage de chaînes.

À proprement parler, la structure de stockage de chaîne est également une structure de stockage linéaire, car les caractères de la chaîne ont également une relation logique « un à un ». Cependant, contrairement à la structure de stockage linéaire que nous avons apprise précédemment, la structure de chaîne n'est utilisée que pour stocker des données de type caractère.

Chaînes spéciales

  • Chaîne vide : une chaîne contenant zéro caractère. Par exemple : S = "" (rien entre guillemets), généralement exprimé directement par Ø.

  • Chaîne d'espace : une chaîne contenant uniquement des espaces. Notez qu'elle est différente de la chaîne vide. Il y a du contenu dans la chaîne d'espace, mais elle contient des espaces et la chaîne d'espace peut contenir plusieurs espaces. Par exemple, a = " " (contient 3 espaces).

  • Sous-chaîne et chaîne principale : une chaîne composée de tous les caractères consécutifs de la chaîne est appelée une sous-chaîne de la chaîne, et la chaîne contenant la sous-chaîne est appelée la chaîne principale.

Par exemple : a = "BEI", b = "BEIJING", c = "BJINGEI". Pour les chaînes a et b, puisque b contient la chaîne continue a,

, on peut dire que a est une sous-chaîne de b, et b est la chaîne principale de a et pour c et a, bien que c ; contient également tous les caractères de a, mais pas les "BEI" consécutifs, donc la chaîne c n'a aucune relation avec a.

La position de la sous-chaîne dans la chaîne principale : pour la chaîne a = "BEI", le premier caractère 'B' est à la position 1 dans la chaîne b, donc la sous-chaîne a est dans la chaîne principale b = La position dans "BEIJING" est 1.

La position de la sous-chaîne dans la chaîne principale est différente de la position de stockage des caractères dans le tableau. La position de la sous-chaîne dans la chaîne principale commence à 1.

Critères d'égalité de deux chaînes : Si les valeurs de chaîne de deux chaînes sont exactement les mêmes, alors les deux chaînes sont égales.

Il existe trois structures de stockage pour les chaînes :

Il existe trois structures pour stocker les chaînes :

1 stockage séquentiel de longueur fixe ;

2 stockage d'allocation de tas

3 stockage en chaîne de blocs.

Stockage séquentiel de longueur fixe

Utilisez un tableau de longueur fixe (c'est-à-dire un tableau statique) pour stocker des chaînes.

Par exemple : char a[7] = "abcdfg";

Lorsque vous stockez des chaînes de cette manière, vous devez estimer la longueur de la chaîne et demander suffisamment d'espace de stockage à l'avance. Si la chaîne cible dépasse la longueur demandée par le tableau, la partie excédentaire sera automatiquement supprimée (appelée « troncature »).

Par exemple : char a[3] = "abcdfg";//En fait, seul "abc" est stocké dans le tableau, et les suivants sont tronqués. Stockage alloué au tas

utilise un tableau dynamique pour stocker les chaînes

En langage C, il existe une zone de stockage libre appelée "heap", utilisant la fonction malloc et la gestion des fonctions gratuites , la fonction malloc est responsable de la demande d'espace et la fonction free est responsable de la libération de l'espace.

Par exemple :

char * a = (char*)malloc(5*sizeof(char));//创建 a 数组,动态申请5个 char 类型数据的存储空间
Copier après la connexion

L'avantage d'utiliser le stockage par allocation de tas est que lorsque vous constatez que l'espace appliqué n'est pas suffisant, vous pouvez demander à nouveau un espace de stockage plus grand via la fonction realloc() fonction.

例如:a = (char*)realloc(a, 10*sizeof(char));//前一个参数指申请空间的对象;第二个参数,重新申请空间的大小
Copier après la connexion

L'espace de stockage demandé pour l'utilisation de la fonction malloc ne sera pas libéré automatiquement et le programmeur doit appeler la fonction free() pour le libérer manuellement. S'il n'est pas libéré manuellement, il sera recyclé par le système d'exploitation une fois l'exécution du programme complètement terminée.

例如:free(a);//释放动态数组a申请的空间
Copier après la connexion

Pour donner un exemple complet, les chaînes de connexion "abc" et "defg" deviennent "abcdefg"

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    char * a1=NULL;
    char * a2=NULL;
    
    a1=(char*)malloc(3*sizeof(char));
    strcpy(a1, "abc");//将字符串“abc”复制给a1
    
    a2=(char*)malloc(3*sizeof(char));
    strcpy(a2, "defg");
    
    int lengthA1=strlen(a1);
    int lengthA2=strlen(a2);
    if (lengthA1<lengthA1+lengthA2) {
        a1=(char*)realloc(a1, (lengthA1+lengthA2)*sizeof(char));
    }
    int i;
    for (i=lengthA1; i<lengthA1+lengthA2; i++) {
        a1[i]=a2[i-lengthA1];
    }
    printf("%s",a1);
    
    free(a1);
    free(a2);
    return 0;
}
Copier après la connexion

Une chaîne est-elle une liste linéaire avec des objets de données et des opérations spéciales ?

Remarque : Dans le programme, Lorsque nous avons attribué des valeurs à a1 et a2, nous avons utilisé la fonction strcpy copy. Il ne peut pas être utilisé directement ici : a1 = "abc".

Si vous faites cela, le programme compilera avec une erreur, vous indiquant que l'espace sans malloc ne peut pas être libéré.

La raison est la suivante : La fonction strcpy copie la chaîne dans l'espace de stockage demandé, tandis que l'affectation directe signifie que la chaîne est stockée dans un autre espace mémoire (lui-même une constante, placée dans la zone constante),

Le pointage des pointeurs a1 et a2 a été modifié. En d'autres termes, bien que l'espace de stockage demandé dynamiquement auparavant ait été demandé, il a été perdu avant d'être utilisé.

Stockage Blockchain

Le stockage Blockchain emprunte en fait la structure de stockage d'une liste chaînée pour stocker des chaînes. Dans des circonstances normales, il suffit d'utiliser une seule liste chaînée et il n'est pas nécessaire d'ajouter un nœud principal.

Lors de la création d'une liste chaînée, chaque nœud peut stocker un ou plusieurs caractères.

Une chaîne est-elle une liste linéaire avec des objets de données et des opérations spéciales ?

链表中最后一个结点的数据域不一定全被串值占满,通常会补上 “#” 或者其他特殊的字符和字符串中的字符区分开。

每个结点设置字符数量的多少和存储的串的长度、可以占用的存储空间以及程序实现的功能相关。

如果串包含数据量很大,但是可用的存储空间有限,那么就需要提高空间利用率,相应地减少结点数量(因为多一个节点,就多申请一个指针域的空间)。

而如果程序中需要大量地插入或者删除数据,如果每个节点包含的字符过多,操作字符就会变得很麻烦,为实现功能增加了障碍。

总结

在平时编写程序,经常会用到例如:char *a = ”abcd”;这种方式表示字符串,和上面三种存储方式最主要的区别是:这种方式用于表示常量字符串,只能使用,不能对字符串内容做修改(否则程序运行出错);而以上三种方式都可以对字符串进行删改的操作。

例如:

#include <stdio.h>
int main() {
    char* a="abcd";
    a[1]=&#39;b&#39;;
    return 0;
}
Copier après la connexion

程序编译可以通过,运行失败,改成下面堆分配存储的方式就对了:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
    char * a=(char*)malloc(4*sizeof(char));
    strcpy(a, "abcd");
    a[1]=&#39;e&#39;;
    printf("%s",a);
    return 0;
}
Copier après la connexion

Une chaîne est-elle une liste linéaire avec des objets de données et des opérations spéciales ?

三种存储表示方式中,最常用的是堆分配存储,因为它在定长存储的基础上通过使用动态数组,避免了在操作串时可能因为申请存储空间的不足而丢失字符数据;和块链存储方式相比,结构相对简单,更容易操作。

更多计算机编程相关知识,请访问:编程视频!!

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comparez des structures de données complexes à l'aide de la comparaison de fonctions Java Comparez des structures de données complexes à l'aide de la comparaison de fonctions Java Apr 19, 2024 pm 10:24 PM

Lors de l'utilisation de structures de données complexes en Java, Comparator est utilisé pour fournir un mécanisme de comparaison flexible. Les étapes spécifiques comprennent : la définition d’une classe de comparaison et la réécriture de la méthode de comparaison pour définir la logique de comparaison. Créez une instance de comparaison. Utilisez la méthode Collections.sort, en transmettant les instances de collection et de comparateur.

Compréhension approfondie des types de référence en langage Go Compréhension approfondie des types de référence en langage Go Feb 21, 2024 pm 11:36 PM

Les types de référence sont un type de données spécial dans le langage Go. Leurs valeurs ne stockent pas directement les données elles-mêmes, mais l'adresse des données stockées. Dans le langage Go, les types de référence incluent des tranches, des cartes, des canaux et des pointeurs. Une compréhension approfondie des types de référence est cruciale pour comprendre les méthodes de gestion de la mémoire et de transfert de données du langage Go. Cet article combinera des exemples de code spécifiques pour présenter les caractéristiques et l'utilisation des types de référence dans le langage Go. 1. Tranches Les tranches sont l'un des types de référence les plus couramment utilisés dans le langage Go.

Structures de données et algorithmes Java : explication détaillée Structures de données et algorithmes Java : explication détaillée May 08, 2024 pm 10:12 PM

Les structures de données et les algorithmes sont à la base du développement Java. Cet article explore en profondeur les structures de données clés (telles que les tableaux, les listes chaînées, les arbres, etc.) et les algorithmes (tels que le tri, la recherche, les algorithmes graphiques, etc.) en Java. Ces structures sont illustrées par des exemples pratiques, notamment l'utilisation de tableaux pour stocker les scores, de listes chaînées pour gérer les listes de courses, de piles pour implémenter la récursion, de files d'attente pour synchroniser les threads, ainsi que d'arbres et de tables de hachage pour une recherche et une authentification rapides. Comprendre ces concepts vous permet d'écrire du code Java efficace et maintenable.

Structure de données PHP : l'équilibre des arborescences AVL, maintenant une structure de données efficace et ordonnée Structure de données PHP : l'équilibre des arborescences AVL, maintenant une structure de données efficace et ordonnée Jun 03, 2024 am 09:58 AM

L'arbre AVL est un arbre de recherche binaire équilibré qui garantit des opérations de données rapides et efficaces. Pour atteindre l'équilibre, il effectue des opérations de virage à gauche et à droite, en ajustant les sous-arbres qui violent l'équilibre. Les arbres AVL utilisent l'équilibrage de hauteur pour garantir que la hauteur de l'arbre est toujours petite par rapport au nombre de nœuds, réalisant ainsi des opérations de recherche de complexité temporelle logarithmique (O (logn)) et maintenant l'efficacité de la structure de données même sur de grands ensembles de données.

Analyse complète du cadre de collecte Java : disséquer la structure des données et révéler le secret d'un stockage efficace Analyse complète du cadre de collecte Java : disséquer la structure des données et révéler le secret d'un stockage efficace Feb 23, 2024 am 10:49 AM

Présentation de Java Collection Framework L'infrastructure de collection Java est une partie importante du langage de programmation Java. Elle fournit une série de bibliothèques de classes conteneur qui peuvent stocker et gérer des données. Ces bibliothèques de classes de conteneurs ont différentes structures de données pour répondre aux besoins de stockage et de traitement des données dans différents scénarios. L'avantage du framework de collection est qu'il fournit une interface unifiée, permettant aux développeurs d'exploiter différentes bibliothèques de classes de conteneurs de la même manière, réduisant ainsi la difficulté de développement. Structures de données de l'infrastructure de collection Java L'infrastructure de collection Java contient diverses structures de données, chacune ayant ses propres caractéristiques et scénarios applicables. Voici plusieurs structures de données courantes du cadre de collection Java : 1. Liste : Liste est une collection ordonnée qui permet de répéter des éléments. Li

Apprenez en profondeur les secrets des structures de données du langage Go Apprenez en profondeur les secrets des structures de données du langage Go Mar 29, 2024 pm 12:42 PM

Une étude approfondie des mystères de la structure des données du langage Go nécessite des exemples de code spécifiques. En tant que langage de programmation concis et efficace, le langage Go montre également son charme unique dans le traitement des structures de données. La structure des données est un concept de base en informatique, qui vise à organiser et gérer les données afin qu'elles puissent être consultées et manipulées plus efficacement. En apprenant en profondeur les mystères de la structure des données du langage Go, nous pouvons mieux comprendre comment les données sont stockées et exploitées, améliorant ainsi l'efficacité de la programmation et la qualité du code. 1. Array Array est l'une des structures de données les plus simples

Carte Java révélée : conseils et stratégies pour un accès rapide aux données Carte Java révélée : conseils et stratégies pour un accès rapide aux données Feb 19, 2024 pm 06:21 PM

JavaMap est une structure de données basée sur des paires clé-valeur qui permet aux développeurs de stocker et de récupérer rapidement des données. Les clés d'une Map peuvent être n'importe quel objet et les valeurs peuvent être n'importe quel type de données. Chaque clé de la Map ne peut être associée qu'à au plus une valeur. Si plusieurs valeurs sont définies pour la même clé, seule la dernière valeur définie sera conservée. Il existe deux implémentations principales de Map : HashMap : utilise une table de hachage pour stocker les paires clé-valeur. Les performances de HashMap dépendent de la manière dont la table de hachage est implémentée et, dans la plupart des cas, HashMap fonctionne mieux que TreeMap. TreeMap : utilise des arbres rouge-noir pour stocker les paires clé-valeur. Les performances de TreeMap sont similaires à celles de HashMap, mais dans certains cas, les performances de TreeMap peuvent être

Structures de données PHP SPL : injectez de la vitesse et de la flexibilité dans vos projets Structures de données PHP SPL : injectez de la vitesse et de la flexibilité dans vos projets Feb 19, 2024 pm 11:00 PM

Présentation de la bibliothèque de structures de données PHPSPL La bibliothèque de structures de données PHPSPL (Standard PHP Library) contient un ensemble de classes et d'interfaces pour stocker et manipuler diverses structures de données. Ces structures de données comprennent des tableaux, des listes chaînées, des piles, des files d'attente et des ensembles, chacun fournissant un ensemble spécifique de méthodes et de propriétés pour manipuler les données. Tableaux En PHP, un tableau est une collection ordonnée qui stocke une séquence d'éléments. La classe de tableau SPL fournit des fonctions améliorées pour les tableaux PHP natifs, notamment le tri, le filtrage et le mappage. Voici un exemple d'utilisation de la classe array SPL : useSplArrayObject;$array=newArrayObject(["foo","bar","baz"]);$array