问题描述
嘿开发者,你能帮我解决这个练习吗,我做了 1 到 5,但我在最后的 5 和 6 中堆叠,谢谢
在 C++ 中管理双链对象列表:
-
创建动态点列表。
-
对任何类型的对象列表重复相同的工作。 这就是我所做的:
#include
using namespace std; class Noeud { public: int cle; int donnee; Noeud * suivant; Noeud * precedent; Noeud() { cle = 0; donnee = 0; suivant = NULL; precedent = NULL; } Noeud(int k,int d) { cle = k; donnee = d; } }; class ListDoublementChainee { public: Noeud * tete; ListDoublementChainee() { tete = NULL; } ListDoublementChainee(Noeud * n) { tete = n; } // 1.Verifiez si le Noeud existe à l'aide de la valeur de la cle Noeud * NoeudExiste(int k) { Noeud * temp = NULL; Noeud * ptr = tete; while (ptr != NULL) { if (ptr-> cle == k) { temp = ptr; } ptr = ptr-> suivant; } return temp; } // fonction permettant d’ajouter un point void ajouterNoeud(Noeud * n) { if (NoeudExiste(n-> cle) != NULL) { cout << "Le Noeud existe deja avec la valeur cle : " << n-> cle << ". Ajouter un autre Noeud avec une valeur de cle differente" << endl; } else { if (tete == NULL) { tete = n; cout << "Noeud ajoute comme Noeud d'en-tete" << endl; } else { Noeud * ptr = tete; while (ptr-> suivant != NULL) { ptr = ptr-> suivant; } ptr-> suivant = n; n-> precedent = ptr; cout << "Noeud ajoute OK" << endl; } } } // fonction permettant d’ajouter un point au debut void prependNoeud(Noeud * n) { if (NoeudExiste(n-> cle) != NULL) { cout << "Le Noeud existe deja avec la valeur cle : " << n-> cle << ". Ajouter un autre Noeud avec une valeur de cle differente" << endl; } else { if (tete == NULL) { tete = n; cout << "Noeud ajoute comme Noeud d'en-tete" << endl; } else { tete-> precedent = n; n-> suivant = tete; tete = n; cout << "Noeud ajoute OK" << endl; } } } // fonction permettant d’ajouter un point après un point particulier dans la liste void ajouterNoeudApres(int k,Noeud * n) { Noeud * ptr = NoeudExiste(k); if (ptr == NULL) { cout << "Aucun Noeud n'existe avec la valeur cle : " << k << endl; } else { if (NoeudExiste(n-> cle) != NULL) { cout << "Noeud existe deja avec la valeur cle : " << n-> cle << ". Ajouter un autre Noeud avec une valeur de cle differente" << endl; } else { Noeud * suivantNoeud = ptr-> suivant; // Insertion à la fin if (suivantNoeud == NULL) { ptr-> suivant = n; n-> precedent = ptr; cout << "Noeud insere a la FIN" << endl; } //inserer entre else { n-> suivant = suivantNoeud; suivantNoeud-> precedent = n; n-> precedent = ptr; ptr-> suivant = n; cout << "Noeud insere entre les deux" << endl; } } } } // fonction permettant de supprimer un point le Noeud par cle unique à n’importe quel endroit de cette liste. void supprimerNoeudParCle(int k) { Noeud * ptr = NoeudExiste(k); if (ptr == NULL) { cout << "Aucun Noeud n'existe avec la valeur cle : " << k << endl; } else { if (tete-> cle == k) { tete = tete-> suivant; cout << "Noeud non encre avec la valeur cle : " << k << endl; } else { Noeud * suivantNoeud = ptr-> suivant; Noeud * prevNoeud = ptr-> precedent; // suppression à la fin if (suivantNoeud == NULL) { prevNoeud-> suivant = NULL; cout << "Noeud supprime à la FIN" << endl; } //Suppression entre else { prevNoeud-> suivant = suivantNoeud; suivantNoeud-> precedent = prevNoeud; cout << "Noeud supprime entre les deux" << endl; } } } } // une fonction permettant de modifier un point par cle à n’importe quel endroit de cette liste void modifierNoeudParCle(int k,int d) { Noeud * ptr = NoeudExiste(k); if (ptr != NULL) { ptr-> donnee = d; cout << "Noeud modifie avec succes" << endl; } else { cout << "Noeud n'existe pas avec la valeur cle : " << k << endl; } } // fonction permettant de visualiser un point : void AfficherListe() { if (tete == NULL) { cout << "Aucun Noeud dans la liste doublement chainee"; } else { cout<<"-----------------------------------------------"<<endl; cout << "Valeurs de liste doublement chainee : "<<endl; Noeud * temp = tete; while (temp != NULL) { cout << "(" << temp-> cle << "," << temp-> donnee << ") <---> "<<endl; temp = temp-> suivant; } cout<<"-----------------------------------------------"<<endl; } } }; int main() { ListDoublementChainee obj; int option; int cle1,k1,donnee1; do { cout << "\n Quelle operation voulez-vous effectuer ? Selectionnez Numero d'option. Entrez 0 pour sortir." << endl; cout << "1. ajouterNoeud()" << endl; cout << "2. prependNoeud()" << endl; cout << "3. ajouterNoeudApres()" << endl; cout << "4. supprimerNoeudParCle()" << endl; cout << "5. modifierNoeudParCle()" << endl; cout << "6. afficher()" << endl; cout << "7. Vider l'Ecran de programme" << endl << endl; cin >> option; Noeud * n1 = new Noeud(); //Noeud n1; switch (option) { case 0: break; case 1: cout <<"Operation ajouter un Noeud \c Entrez le cle & donnee du Noeud a ajouter" << endl; cin >> cle1; cin >> donnee1; n1-> cle = cle1; n1-> donnee = donnee1; obj.ajouterNoeud(n1); //cout<<n1.cle<<" = "<<n1.donnee<<endl; break; case 2: cout << "Operation prefixier un Noeud \nEntrez la cle et la donnee du Noeud a ajouter" << endl; cin >> cle1; cin >> donnee1; n1-> cle = cle1; n1-> donnee = donnee1; obj.prependNoeud(n1); break; case 3: cout << "Operation ajouter un Noeud apres\n Entrez le cle du noeud existant apres lequel vous souhaitez ajouter ce nouveau noeud : " << endl; cin >> k1; cout << "Entrez cle et la donnee du Nouveau Noeud en premier : " << endl; cin >> cle1; cin >> donnee1; n1-> cle = cle1; n1-> donnee = donnee1; obj.ajouterNoeudApres(k1,n1); break; case 4: cout << "Operation Supprimer Noeud par cle - \nEntrez le cle du Noeud a supprimer : " << endl; cin >> k1; obj.supprimerNoeudParCle(k1); break; case 5: cout << "Operation de modification de Noeud par cle - \nEntrez cle et la nouveau donnee a modifier" << endl; cin >> cle1; cin >> donnee1; obj.modifierNoeudParCle(cle1,donnee1); break; case 6: obj.AfficherListe(); break; case 7: system("cls"); break; default: cout << "Entrez le numero d'option approprie " << endl; } } while (option != 0); return 0; }
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)