myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Zurück   myGully.com > Computer & Technik > Programmierung
Seite neu laden

Verkettete Liste in C (DRINGEND!)

Willkommen

myGully

Links

Forum

 
Antwort
Themen-Optionen Ansicht
Ungelesen 07.11.10, 19:04   #1
indoh
Anfänger
 
Registriert seit: Mar 2010
Beiträge: 9
Bedankt: 5
indoh ist noch neu hier! | 0 Respekt Punkte
Standard Verkettete Liste in C (DRINGEND!)

Hi, ich muss für die Uni was abgeben und hab nicht mehr viel Zeit... mal wieder viel zu spät angefangen. Mein Code sieht wie folgt aus und soll eine Verkettete Liste darstellen, die Elemente einfügt wenn sie noch nicht vorhanden sind und dann deren Wert ausgibt oda wenn sie vorhanden sind -1.

Und eine Funktion die nach dem FIFO removed.

struct glied {
int value;
struct glied *next;
}

struct glied head;
head->value = -1;
head->next = &head;

int insertElement(int value) {
struct glied *zeiger = &head;
while(zeiger->next->value != -1) {
if(zeiger->value == value) {
return -1;
}
zeiger = zeiger->next;
}
zeiger->next->value = value;
return value;
}

int removeElement() {
head->next = head->next->next;
int hilfsvariable = head->next->value;
free(head->next);
return hilfsvariable;
}

void main() {
printf(”insert 47: %d\n”, insertElement(47));
printf(”insert 11: %d\n”, insertElement(11));
printf(”insert 23: %d\n”, insertElement(23));
printf(”insert 11: %d\n”, insertElement(11));

printf(”remove: %d\n”, removeElement());
printf(”remove: %d\n”, removeElement());
}


iwie haut garnix hin und ich hab noch kaum Plan von C-.- ... bin am verzweifeln
indoh ist offline   Mit Zitat antworten
Ungelesen 07.11.10, 20:42   #2
PornoPenner
Banned
 
Registriert seit: Aug 2010
Beiträge: 209
Bedankt: 70
PornoPenner ist noch neu hier! | 0 Respekt Punkte
Standard

"Dringend" im Betreff = Sonntagabend... morgen früh müssen also wieder die Hausaufgaben abgegeben werden
PornoPenner ist offline   Mit Zitat antworten
Ungelesen 07.11.10, 20:56   #3
gosha16
Banned
 
Registriert seit: Sep 2009
Ort: /root/
Beiträge: 824
Bedankt: 640
gosha16 ist noch neu hier! | 0 Respekt Punkte
Standard

Oh das wird eine lange Nacht mein Freund.
Code:
int removeElement() {
head->next = head->next->next;
int hilfsvariable = head->next->value;
free(head->next);
return hilfsvariable;
}
Also das z.B. sollteste dir nochmal anschauen. Überleg mal was auf was head->next zeigt wenn du dein free() aufrufst.
gosha16 ist offline   Mit Zitat antworten
Ungelesen 07.11.10, 21:02   #4
spartan-b292
Echter Freak
 
Benutzerbild von spartan-b292
 
Registriert seit: Mar 2010
Ort: /home/spartan-b292
Beiträge: 2.856
Bedankt: 1.701
spartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punkte
Standard

Vermutlich nicht genau das was du machen musst, aber ich musste sowas ähnliches auch mal für die FH machen vllt kannst du damit ja was anfangen:

Code:

#include <stdio.h>           

#include <stdlib.h>

struct eintrag    // Deklaration eines Listenelements 

{

	char wort[20]; 

	struct eintrag *next; 

}; 

typedef struct eintrag element; 

struct eintrag *liste; //Zeiger auf den Anfang der Liste



element *erstellen (element* ptr);

element *hinzufuegen (element* ptr);

element *loeschen (element* ptr);

void anzeigen (element* ptr);

int main (void)

{

	char c;

	do

	{

		printf ("\tHAUPTMENUE:\n\n\t1 - Liste erstellen\

				\n\t2 - Element hinzufuegen\n\t3 - Element loeschen\

 				\n\t4 - Programm beenden\n");

		c=getchar();

		

		switch (c)

		{

		case '1': liste = (element*)malloc(sizeof(element));

			getchar();			

			erstellen (liste);

			anzeigen (liste);

			break;

		case '2': getchar(); 

			anzeigen (liste);			

			hinzufuegen (liste);

			anzeigen (liste);

			break;

		case '3': getchar(); 

			anzeigen (liste);			

			loeschen (liste);

			anzeigen (liste);

			break; 

		}

	}

	while (c!='4'); 

}



element *erstellen (element* ptr)

{

	printf ("Wort eingeben ('ENDE' fuer Ende der Liste): ");

	scanf("%s", ptr->wort); //Wort einlesen	
	if (strcmp(ptr->wort,"ENDE")==0) ptr->next=NULL;

							

	else

	{

		ptr->next = (element*) malloc(sizeof(element));

		erstellen (ptr->next); 

	}

	return;

}







void anzeigen (element* ptr)

{

	if (liste==NULL)return;

	if (ptr->next != NULL)

	{

		printf ("%s\n",ptr->wort);

		anzeigen (ptr->next);

	} 

	return; 

}









element *hinzufuegen (element* ptr)

{

struct eintrag* ptrn;

struct eintrag* ptrv;

char d [20];

if (liste==NULL)

{

	printf ("Es wurde noch keine Liste angelegt, sie muessen zuerst eine Liste anlegen\n");

	return;

}

	printf ("Vor welchem Element soll das Wort eingefuegt werden?:");

	fflush (stdin);

	gets (d);

	do

	{

		if (strcmp(ptr->wort,d)==0)

		{

			ptrn=ptr;

			ptr=(element*)malloc(sizeof(element));

			printf ("Wort eingeben: "); 

			scanf("%s", ptr->wort);

			ptr->next=ptrn;

			if (ptrn!=liste)ptrv->next=ptr;

			if (ptrn==liste)liste=ptr;

			return;

		}

		ptrv=ptr;

		ptr=ptr->next;

	}

	while (ptr->next!=NULL);

	

	printf("Element nicht gefunden\n");

	return;

}

element *loeschen (element* ptr)

{

struct eintrag* ptrn;

struct eintrag* ptrv;

char d [20];

if (liste==NULL)

{

	printf ("Sie muessen zuerst eine Liste anlegen\n");

	return;

}

	printf ("Welches Element soll geloescht werden?:");

	fflush (stdin);

	gets (d);

	ptrv=ptr;//ersten Zeiger in pointerv laden

	do

	{

		if (strcmp(ptr->wort,d)==0)

		{

			ptrn=ptr->next;

			if ((ptrv!=liste)||(strcmp(ptrv->wort,d)))ptrv->next=ptrn;

			else liste=ptrn;

			free (ptr);

			ptr=liste;

			if (strcmp(ptr->wort,"ENDE")==0)

			{

				liste=NULL;

				free (ptrn);
				fflush (stdin);

			}

			return;

		}

		ptrv=ptr;

		ptr=ptr->next;

	}

	while (ptr->next!=NULL);

}
Anmerkung: Ich habe das a) unter Linux zusammengehackt und b) jetzt nicht noch mal geteste ob es sich fehlerfrei kompilieren lässt. Außerdem meine ich mich zu erinnern da das ein oder andere Problem mit ungewünschten ausgaben u.ä gehabt zu haben aber na ja

@PornoPenner war bei mir aber auch nicht anderst das ist in der Nacht vor der Abgabe entstanden
__________________
"They who can give up essential liberty to obtain a little temporary safety, deserve neither liberty nor safety"
spartan-b292 ist offline   Mit Zitat antworten
Ungelesen 07.11.10, 21:18   #5
indoh
Anfänger
 
Registriert seit: Mar 2010
Beiträge: 9
Bedankt: 5
indoh ist noch neu hier! | 0 Respekt Punkte
Standard

@Gosha

das müsste dann so besser sein?

int removeElement() {
struct glied *zeiger = &head;
zeiger->next = head->next;
head->next = head->next->next;
int hilfsvariable = head->next->value;
free(zeiger->next);
return hilfsvariable;
indoh ist offline   Mit Zitat antworten
Ungelesen 07.11.10, 21:29   #6
germgerm
bla
 
Registriert seit: Mar 2010
Beiträge: 312
Bedankt: 302
germgerm ist noch neu hier! | 0 Respekt Punkte
Standard

Habe ich jetzt zwar nicht ausprobiert, sollte aber so funktionieren:


Code:
int removeElement() {
	int hilfsvariable;
	struct glied *zeiger = head.next;
	
	if (zeiger == NULL)
		return -1;

	head.next = head.next->next;
	hilfsvariable = zeiger->value;
	free(zeiger);
	return hilfsvariable;
}

void main() {
	head.value = -1;
	head.next = NULL;

   ......
Dann schau dir noch den Link an:

[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
germgerm ist offline   Mit Zitat antworten
Ungelesen 07.11.10, 21:33   #7
indoh
Anfänger
 
Registriert seit: Mar 2010
Beiträge: 9
Bedankt: 5
indoh ist noch neu hier! | 0 Respekt Punkte
Standard

@germgerm

kann ich leider noch nicht sagen, da es beim compilen schon hier kracht :

struct glied {
int value;
struct glied *next;
}

struct glied head;
head->value = -1;
head->next = &head;

versteh ich zwar mal garnicht.


lilo.c:6: error: two or more data types in declaration specifiers
lilo.c:7: error: expected â=â, â,â, â;â, âasmâ or â__attribute__â before â->â token
lilo.c:8: error: expected â=â, â,â, â;â, âasmâ or â__attribute__â before âheadâ


krieg ich da oben.
indoh ist offline   Mit Zitat antworten
Ungelesen 08.11.10, 06:01   #8
germgerm
bla
 
Registriert seit: Mar 2010
Beiträge: 312
Bedankt: 302
germgerm ist noch neu hier! | 0 Respekt Punkte
Standard

Zitat:
Zitat von indoh Beitrag anzeigen
struct glied {
int value;
struct glied *next;
};
Struct muss immer mit Strichpunkt abgeschlossen sein.

Zitat:
Zitat von indoh Beitrag anzeigen
struct glied head;
//head->value = -1;
//head->next = &head;
Das hat hier nichts zu suchen, schau mal bei meinem main.
germgerm ist offline   Mit Zitat antworten
Antwort


Forumregeln
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:40 Uhr.


Sitemap

().