Προς το περιεχόμενο

C++ λίστες και αλγόριθμος min


spyros83

Προτεινόμενες αναρτήσεις

Δημοσ.

θέλω να δημιουργήσω μια λίστα 7 στοιχείων να βρω το ΕΛΑΧΙΣΤΟ στοιχείο τής λίστας με τον αλγόριθμο min να διαγράψω το στοιχείο από την λίστα και να το τυπώσω στην οθόνη!

 

κώδικας:

void main()

{

int i;

int A[7];

int telos; //Δήλωση λίστας

 

telos=7;

for(i=0; i<=telos; i++)

{ //Αρχικοποίηση της λίστα

cin>>A;

} //Διαγραφή 7 στοιχείο

 

 

 

A[6]=A[7];

telos--; //η λίστα περιέχει ένα στοιχείο λιγότερο

 

 

cout<< ”H lista meta th diagrafh einai: “ ; //Τυπώνουμε τη νέα λίστα

for(i=0; i<=telos; i++)

{

cout<<A;

}

}

 

 

δεν γνωρίζω πως να διαγράψω το ελάχιστο στοιχείο του πίνακα με τον αλγόριθμο min.......

αυτό που έγραψα λογικά διαγράφει το 7 στοιχείο τις λίστας...??θα πρέπει να μετακίνησω στα αριστερά όλα τα στοιχεία που βρίσκονται μετα από το ελάχιστο,

έχω στο μυαλό μου αυτό αλλα δέν ξέρω αν είναι σωστό και πώς να το συντάξω στον αρχικό κώδικα....

 

κώδικας:

int i, min;

min = table[0];

for (i=0; i<7; i++)

if (table<min)

min = table;

cout<<min;

}

 

---------- Προσθήκη στις 20:51 ---------- Προηγούμενο μήνυμα στις 16:22 ----------

 

κανείς μια βοήθεια ...? :(

Δημοσ.

Αν την λίστα την υλοποιήσεις με πίνακα, τότε για να διαγράψεις το n στοιχείο θα πρέπει κάθε στοιχείο μετα το n να το πας μια θέση πίσω.

Δημοσ.

Εδώ

>
A[6]=A[7];

διαγράφεις το 8ο στοιχείο της λίστας (το οποίο δεν υπάρχει)

 

παρακάτω δουλεύεις πιό σωστά το loop

>
for (i=0; i<7; i++)

 

εσυ κανεις ενα loop για διαβασμα, μετα κάνε ενα να βρεις το min (οπως περιπου εχεις) και μετα αφαιρεσε το όπως ειπε ο bnvdarklord

Δημοσ.

void main()

{

int i;min;

int A[7];

int telos; //Δήλωση λίστας

min = table[0];

 

for (i=0; i<7; i++)

if (table<min)

min = table;

 

}

 

telos=7;

for(i=0; i<=telos; i++)

{

cin>>A;

} //Διαγραφή 7 στοιχείο

 

 

 

A[5]=A[6];

telos--;

 

 

cout<< ”H lista meta th diagrafh einai: “ ; //Τυπώνουμε τη νέα λίστα

for(i=0; i<=telos; i++)

{

cout<<A;

}

}

 

---------- Προσθήκη στις 21:41 ---------- Προηγούμενο μήνυμα στις 21:40 ----------

 

παιδιά έκανα μια προσπάθεια άλλα ως συνήθως θα καταλήξω σε αποτυχία δυστυχώς δεν μπορώ να το κάνω.........

Δημοσ.

Καταρχάς διόρθωσε καποια συντακτικά λαθάκια που εχεις πχ int i;min; σε int i, min; και μία ξεκρέμαστη αγκύλη που έχεις... Για να διαγράψεις το min στοιχείο θα πρέπει να κρατήσεις σε μία μεταβλητή την θεση του (εστω position).

Μετα με ενα for από το position μεχρι το telos μετακινέις καθε στοχείο μία θεση πίσω : A = A[i+1]

Δημοσ.
Καταρχάς διόρθωσε καποια συντακτικά λαθάκια που εχεις πχ int i;min; σε int i, min; και μία ξεκρέμαστη αγκύλη που έχεις... Για να διαγράψεις το min στοιχείο θα πρέπει να κρατήσεις σε μία μεταβλητή την θεση του (εστω position).

Μετα με ενα for από το position μεχρι το telos μετακινέις καθε στοχείο μία θεση πίσω : A = A[i+1]

 

void main()

{

int i,min;

int A[7];

int telos; //Δήλωση λίστας

min = table[0];

 

for (i=0; i<7; i++)

if (table<min)

min = table;

 

}

 

telos=7;

for(i=0; i<=telos; i++)

{

cin>>A;

} //Διαγραφή 7 στοιχείο

 

 

 

A[5]=A[6];

telos--;

 

 

cout<< ”H lista meta th diagrafh einai: “ ; //Τυπώνουμε τη νέα λίστα

for(i=0; i<=telos; i++)

{

cout<<A;

}

 

 

φίλε μου διόρθωσα τα λάθοι όπως μου είπες και σε ευχαριστώ γιατην παρατηρητικότητα σου το θέμα είναι αυτό που λές δέν ξέρω να το κάνω ουτε να το προσθέσω στον κωδικά μου...θα ήθελες να μου δώσεις λίγο τα φώτα σου σε κώδικα?και κυρίως που μπαίνει στον κώδικά μου...??

Δημοσ.
Καταρχάς διόρθωσε καποια συντακτικά λαθάκια που εχεις πχ int i;min; σε int i, min; και μία ξεκρέμαστη αγκύλη που έχεις... Για να διαγράψεις το min στοιχείο θα πρέπει να κρατήσεις σε μία μεταβλητή την θεση του (εστω position).

Μετα με ενα for από το position μεχρι το telos μετακινέις καθε στοχείο μία θεση πίσω : A = A[i+1]

 

void main()

{

int i,min;

int A[7];

int telos; //Δήλωση λίστας

min = table[0];

 

for (i=0; i<7; i++)

if (table<min)

min = table;

 

}

 

telos=7;

for(i=0; i<=telos; i++)

{

cin>>A;

} //Διαγραφή 7 στοιχείο

 

 

 

A[5]=A[6];

telos--;

 

 

cout<< ”H lista meta th diagrafh einai: “ ; //Τυπώνουμε τη νέα λίστα

for(i=0; i<=telos; i++)

{

cout<<A;

}

 

 

φίλε μου διόρθωσα τα λάθοι όπως μου είπες και σε ευχαριστώ γιατην παρατηρητικότητα σου το θέμα είναι αυτό που λές δέν ξέρω να το κάνω ουτε να το προσθέσω στον κωδικά μου...θα ήθελες να μου δώσεις λίγο τα φώτα σου σε κώδικα?και κυρίως που μπαίνει στον κώδικά μου...??

Δημοσ.

>
{
int A[7]={1,2,3,4,5,6,7}
int i,min;
min=A[0];
for (i=0;i<7;i++)
if (A[i]<min)
min=A[i]
cout<<min;
}

 

φίλε ποστάρω ένα γρήγορο κώδικα που έκανα

απλά δεν γνωρίζω πώς να διαγράψω το min στοιχείο......

ας απαντήσει κάποιος ποιο έμπειρος αν είναι σωστή η σκέψη μου.......

Δημοσ.

>
{
int A[7]={1,2,3,4,5,6,7}
int i,min;
min=A[0];
for (i=0;i<7;i++)
if (A[i]<min)
min=A[i]
cout<<min;
}

 

φίλε ποστάρω ένα γρήγορο κώδικα που έκανα

απλά δεν γνωρίζω πώς να διαγράψω το min στοιχείο......

ας απαντήσει κάποιος ποιο έμπειρος αν είναι σωστή η σκέψη μου.......

Δημοσ.

Για να δημιουργήσεις μια λίστα καταρχήν πρέπει να έχεις ορίσει τη δομή δεδομένων λίστα. Η λίστα δεν είναι ένας πίνακας όπως το δηλώνεις (αν και μπορεί να υλοποιηθεί και με πίνακα) αλλά μια δομή δεδομένων με κάποιες πράξεις επί της δομής όπως π.χ. insert για εισαγωγή στοιχείων, erase για εξαγωγή στοιχείων κτλ. Αν θες να χρησιμοποιήσεις μια λίστα πρέπει πρώτα να φτιάξεις τις αντίστοιχες συναρτήσεις.

 

Οπότε, βήματα που πρέπει να ακολουθήσεις :

α) Επιλογή της κατάλληλης δομής λίστας (απλά συνδεδεμένη, διπλά συνδεδεμένη κτλ)

β) Επιλογή τρόπου υλοποίησης αυτής (στατικά με χρήση πίνακα συγκεκριμένου μεγέθους, με δυναμική εκχώρηση μνήμης κατά την εκτέλεση, με σκέτο πίνακα, με δομή struct, με κλάση κτλ).

γ) Υλοποίηση της λίστας και των απαραίτητων μεθόδων

δ) Δήλωση λίστας στην main() και εφαρμογή του αλγορίθμου min με τη χρήση των παραπάνω συναρτήσεων.

 

Ανάλογα βέβαια με την εκφώνηση της άσκησης μπορεί να μη σου ζητάτε η υλοποίηση της λίστας αλλά η χρησιμοποίηση κάποιας ήδη υπάρχουσας π.χ. της STL List ( http://www.yolinux.com/TUTORIALS/LinuxTutorialC++STL.html#LIST ).

 

Αυτά και ελπίζω να βοήθησα ...

Δημοσ.
>
{
int A[7]={1,2,3,4,5,6,7}
int i,min;
min=A[0];
for (i=0;i<7;i++)
if (A[i]<min)
min=A[i]
cout<<min;
}

 

φίλε ποστάρω ένα γρήγορο κώδικα που έκανα

απλά δεν γνωρίζω πώς να διαγράψω το min στοιχείο......

ας απαντήσει κάποιος ποιο έμπειρος αν είναι σωστή η σκέψη μου.......

 

 

Εγώ πίστευω πως ο κώδικας μου βρίσκει το ελάχιστο στοιχείο.

απλά γιανα το διαγράψεις πρέπει όλα τα στοιχεία που βρίσκονται μετά το ελάχιστο να πάνε μια θέση αριστερά.

Δηλαδή το δύο να πάει στη θέση του ένα

το τρία στη θέση του δύο

κ.ο.κ.

Έτσι ο καινούριος πίνακας θα ξεκινάει από το 2 και θα έχει μια κενή θέση στο τέλος.

 

θεωρητικά πιστεύω πως έτσι θα δουλέψει απλά δεν ξέρω να σου το γράψω σε κώδικα....επαναλαμβάνω ας μας πει κάποιος ποιο έμπειρος πως θα γίνει αυτό.....

Δημοσ.

Η λύση με χρήση της std::list. Προσωπική μου άποψη πάντως είναι ότι πρέπει να ορίσεις εσύ τη δικιά σου δομή δεδομένων λίστα, ειδικά αν το μάθημα στο οποίο σας βάλανε την άσκηση είναι "δομές δεδομένων" και όχι προγραμματισμού ...

 

>
#include <iostream>
#include <list>

using namespace std;

#define SIZE 7

int main()
{
int temp=0, min=0;
list<int> List ;

// List Initialization 
for(int i=0; i<SIZE; i++)
{
	cout<<"Give item number "<<i+1<<endl;
	cin>>temp;
	List.push_back(temp);
}

// Eyresi elaxistoy

list<int>::iterator it;
list<int>::iterator minPosition = List.begin();
it=List.begin();
min= *it;
for(it=List.begin(); it!=List.end(); ++it)
{
	if(*it<min)
	{
		min=*it;
		minPosition=it;
	}
}

List.erase(minPosition);
cout<<"To mikrotero stoixeio einai to: "<<min<<endl;

return 0;
}

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...