Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
--- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
---- Softwaretechnik (http://www.informatikerboard.de/board/board.php?boardid=18)
----- einfach verkettete Listen in C -Programmhilfe (http://www.informatikerboard.de/board/thread.php?threadid=2802)


Geschrieben von Lars am 24.01.2016 um 17:53:

 

Ah ok, das klingt plausibel. Mal schauen, ob ich jetzt weiter komme.

Unser Tutor meinte auch, dass Skizzen dafür sehr hilfreich sind, man wird ja echt teilweise verrückt, wenn man das alles im Kopf durchgeht smile .



Geschrieben von Lars am 24.01.2016 um 20:34:

 

*seufz*
Ich bin ein hoffungsloser Fall traurig .
Das mit dem Einsetzen der einen Listenelemente in die andere Liste klingt ziemlich simpel und ist es wahrscheinlich auch, aber ich krieg's einfach nicht auf die Reihe.

Mir ist das recht unangenehm, aber wenn du gerade nichts zutun hast, kann du mir zeigen, wie genau ich das machen müsste?
Ich denke dann kann ich's wenigstens nachvollziehen...
Ich probier trotzdem nochmal rum, wobei ich nicht glaube, dass das heute nochmal was wird.



Geschrieben von eulerscheZahl am 24.01.2016 um 20:45:

 

Heute habe ich keine Lust mehr, das ist keine Sache von 5 Minuten. Ich kann mich morgen mal dransetzen.



Geschrieben von Lars am 24.01.2016 um 21:00:

 

Ok, danke, dann kann ich das hoffentlich wenigstens nachvollziehen.
Ich schau mal wie weit ich noch komme heute.



Geschrieben von eulerscheZahl am 25.01.2016 um 07:23:

 

Sortieren klappt, die Ausgabe darfst du selbst verschönen. Sonst verpasse ich noch den Bus.
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
#include <stdio.h>
#include <stdlib.h>
#include "readline.h"
#include <time.h>

typedef struct person{
	char nameperson[20];
	char Abteilung;
	int TelNr;
	struct person *next;
}Person;
struct person *anfang = NULL;
struct person *sanfang = NULL;

void neuePerson()
{	
	struct person* zeiger;
	if(anfang==NULL){  
		anfang=(Person*)malloc(sizeof(struct person));
		readLine(anfang->nameperson, 20);
		anfang->TelNr=rand()%100;
		anfang->Abteilung = rand() % 3 + 65; 
		anfang->next=NULL;
		}
	else{
		zeiger=anfang;
		while(zeiger->next != NULL) zeiger=zeiger->next;
		if(zeiger->next == NULL){
			zeiger->next=(Person*)malloc(sizeof(struct person));
			zeiger=zeiger->next;
			readLine(zeiger->nameperson, 20);
			zeiger->TelNr=rand()%100;
			zeiger->Abteilung = rand() % 3 + 65; 
			zeiger->next=NULL;
		}
	}
}

void listeAusgeben(Person* p)
{
	struct person* zeiger = p;
	int mitarbeiter = 0;
	printf("Personalpool Firma:\n");
	while(zeiger != NULL){
		printf("name: %s	abteilung: %c	telNr: %i\n",zeiger->nameperson, zeiger->Abteilung, zeiger->TelNr);
		zeiger=zeiger->next;
		mitarbeiter++;
	}
	printf("Personalpool ferig -- Anzahl Mitarbeiter: %d\n", mitarbeiter);	
}

int sortieren() {
	if (anfang == NULL) return 0; //nichts mehr zu machen
	//beim Probeablauf wird immer die letzte Person entfernt
	Person* letzte = anfang;
	Person* vorletzte = NULL;
	while (letzte->next != NULL) {
		vorletzte = letzte;
		letzte = letzte->next;
	}
	if (vorletzte != NULL) vorletzte->next = NULL; //entferne letzten Eintrag aus unsortierter Liste
	if (letzte == anfang) anfang = NULL;
	
	//Hier kommt das Einfügen in die sortierte Liste
	if (sanfang == NULL) sanfang = letzte; //Fall 1: leere Liste
	else {
		if (letzte->Abteilung < sanfang->Abteilung) { //Fall 2.1
			letzte->next = sanfang;
			sanfang = letzte;
		}
		else { //Fall 2.2
			Person* pos = sanfang;
			int eingefuegt = 0;
			while (pos->next != NULL) {
				if (letzte->Abteilung < pos->next->Abteilung) { //Fall 3.1
					letzte->next = pos->next;
					pos->next = letzte;
					eingefuegt = 1;
					break;
				}
				pos = pos->next;
			}
			if (!eingefuegt) { //Fall 4
				pos->next = letzte;
			}
		}
	}	
	return 1; //weiter sortieren
}

int main()
{
	srand (time(NULL)); //srand gehört dahin, nicht nach oben - dann kann man die Eingabe auch von Datei einlesen und rand() liefert nicht immer das selbe
	printf("Bitte im Folgenden 10 Mitarbeiternamen (jeweils mit Enter) eingeben...\n");
	for(int i=0; i<10; i++)neuePerson();
	listeAusgeben(anfang);
	while (sortieren()) {
		printf("==Pool==\n");
		listeAusgeben(anfang);
		printf("==sortiert==\n");
		listeAusgeben(sanfang);
		printf("\n");	
	}
}



Geschrieben von Lars am 25.01.2016 um 17:51:

 

Oh mann, ich hoffe du hast deinen Bus noch bekommen, dass du dir hier soviel Mühe machst ist ja echt unglaublich.
Ganz großes Danke meinerseits, ich hab's nach langwährendem Studieren nun verstanden. Wenn ich also irgendwann nochmal Listen sortieren muss werde ich's hinbekommen smile .
Ich werde mich bemühen die nächste Aufgabe mal alleine zu lösen, mir wird's unangenehm, wenn ich dich immer fragen muss ^^.



Geschrieben von eulerscheZahl am 25.01.2016 um 17:53:

 

Ich kam sogar noch rechtzeitig für einen Sitzplatz. Und der Prof kam dann auch noch zuspät, also alles im grünen Bereich großes Grinsen



Geschrieben von Lars am 25.01.2016 um 18:02:

 

Daumen hoch
Ok, dann bin ich ja beruhigt.


Forensoftware: Burning Board, entwickelt von WoltLab GmbH