Hi,
wie der Threadtitel schon sagt, soll ich alle Permutationen von n Zahlen ausgeben, die in einer linearen Liste stehen (template Klasse)
Nun is bei mir irgendwie der Wurm drin !
Den Weg kenne ich, aber irgendwie scheiterts an der Umsetzung !
Bekomme immer folgende Fehlermeldung :
Eine nicht behandelte Ausnahme des Typs "System.AccessViolationException" ist in Liste2222.exe aufgetreten.
Zusätzliche Informationen: Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist.
-------------------
Hantiere nicht gerne mit Zeigern, da wird wahrscheinlich auch der Fehler liegen !
Hier mein Code :
Danke für Eure Hilfe
wie der Threadtitel schon sagt, soll ich alle Permutationen von n Zahlen ausgeben, die in einer linearen Liste stehen (template Klasse)
Nun is bei mir irgendwie der Wurm drin !
Den Weg kenne ich, aber irgendwie scheiterts an der Umsetzung !
Bekomme immer folgende Fehlermeldung :
Eine nicht behandelte Ausnahme des Typs "System.AccessViolationException" ist in Liste2222.exe aufgetreten.
Zusätzliche Informationen: Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist.
-------------------
Hantiere nicht gerne mit Zeigern, da wird wahrscheinlich auch der Fehler liegen !
Hier mein Code :
Code:
// ListePermutationen.cpp: Hauptprojektdatei.
#include "stdafx.h"
# include <iostream>
# include <string >
using namespace std ;
template <class T>
class List ; // forward reference
template <class T>
class ListNode
{
friend class List <T>;
public :
ListNode (T& t , ListNode<T>* p) : data ( t ) , next (p) { }
protected :
T data ; // data field
ListNode<T>* next ; // points to next
} ;
template <class T>
class List
{
public :
List ( ) : first (NULL) { }
~List ( ) ;
void insert (T t ) ;
int remove (T& t ) ;
bool isEmpty ( ) { return ( first==NULL) ; }
void print ( ) ;
unsigned int size();
void permutiere(List<T> m){
List<T> temp = *this;
permute(m,temp);
}
void permute( List<T>,List<T>);
T last();
protected :
ListNode<T>* first ;
ListNode<T>* newNode(T& t ,ListNode<T>* p){
ListNode<T>*q = new ListNode<T>( t , p ) ;
return q ;
}
} ;
int main ( ){
unsigned int n;
List <int> Menge;
List<int> Menge1;
cout<<"Wie groß ist die Menge ? "<<endl;
cin>>n;
for(int i = n ; i >=1;i--) Menge.insert(i);
Menge.print();
cout<<endl<<endl;
Menge.permutiere(Menge1);
cin>>n;
return 0 ;
}
template <class T>
List<T>::~List(){
ListNode<T>* temp;
for(ListNode<T>* p = first;p;){
temp = p;
p = p->next;
delete temp;
}
}
template <class T>
void List<T>::insert(T t){
ListNode<T> * p = newNode(t,first);
first = p ;
}
template <class T>
void List<T>::print(){
for(ListNode<T>* p=first ; p; p = p->next)
cout<<p->data <<" ";
}
template <class T>
unsigned int List<T>::size(){
int n;
ListNode<T>* p=first;
while(p){
n++;
p=p->next;
}
return n;
}
template <class T>
int List<T>::remove(T& t){
if(isEmpty()) return 0;
t=first->data;
ListNode<T>*p = first;
first = first->next;
delete p;
return 1;
}
template <class T>
T List<T>::last(){
ListNode<T>* p=first;
while(p->next){
p=p->next;
}
return p->data;
}
template <class T>
void List<T>::permute(List<T> fest,List<T> string){
//cout<<"fest = ";
//fest.print();
if(string.size() <= 1){
string.print();
fest.print();
cout<<endl;
}
else {
for(ListNode<T> * p = string.first; p->data < string.last() ;p=p->next){
fest.insert(p->data);
string.remove(p->data);
permute(fest,string);
string.insert(p->data);
//cout<<"S string = ";
//string.print();
//cout<<endl;
}
}
}
Danke für Eure Hilfe
