Hallo, ich möchte in diesem Thread Fragen bezüglich dem Onlinetest am Montag klären und Probleme mit dem 3. Übungsblatt diskutieren.
Hier meine bisherige Lösung zur ersten Aufgabe. Bis auf copy und custom snd alle Funktionen implementiert und eine kleine main testet diese. Was mir noch nichtklar ist, ist die custom Funktion. Was macht diese und soll sie inkludiert werden oder muss man sie implementieren?
Des Weiteren frage ich mich, wie man mit dem "void-Inhalt" umgehen soll, sobald er ausgegeben wird, da man ja gar nicht weiß, welche Inhalte in der Liste gespeichert sind.
Hier erst mal der code, soweit ich ihn habe:
Alles anzeigen
Hier meine bisherige Lösung zur ersten Aufgabe. Bis auf copy und custom snd alle Funktionen implementiert und eine kleine main testet diese. Was mir noch nichtklar ist, ist die custom Funktion. Was macht diese und soll sie inkludiert werden oder muss man sie implementieren?
Des Weiteren frage ich mich, wie man mit dem "void-Inhalt" umgehen soll, sobald er ausgegeben wird, da man ja gar nicht weiß, welche Inhalte in der Liste gespeichert sind.
Hier erst mal der code, soweit ich ihn habe:
Quellcode
- #include<stdlib.h>
- #include<stdio.h>
- typedef struct _node{
- int *content;
- struct _node *prev;
- struct _node *next;
- } node;
- const int nsize = sizeof(node);
- node* add( node *firstnode, void *cont ) {
- node *newnode = malloc( nsize );
- newnode->content = cont;
- if( firstnode == NULL ) { /*Wenn Liste leer*/
- newnode->prev = NULL;
- newnode->next = NULL;
- return newnode;
- }
- else{ /*fuege in bestehende Liste ein*/
- newnode->next = firstnode;
- newnode->prev = NULL;
- firstnode->prev= newnode;
- return newnode;
- }
- }
- node* add_ith( node *firstnode, void *cont, int pos ) {
- int i;
- node *newnode = malloc( nsize );
- newnode->content = cont;
- node *itnode = firstnode; /*suche i-1te Position*/
- for( i=1 ; i< pos-1 ; i++ ) {
- itnode = itnode->next;
- }
- if( itnode == NULL) /*Position ausserhalb, nicht einfuegen*/
- return firstnode;
- else{
- newnode->next = itnode->next; /*fuege neuen Knoten ein*/
- newnode->prev = itnode;
- newnode->next->prev = newnode;
- itnode->next = newnode;
- return firstnode;
- }
- }
- node* add_last( node *firstnode, void *cont ){
- node *newnode = malloc( nsize );
- newnode->content = cont;
- node *itnode = firstnode; /*suche letzten Knoten*/
- while( itnode->next != NULL ) {
- itnode = itnode->next;
- }
- itnode->next = newnode;
- newnode->prev = itnode;
- newnode->next = NULL;
- return firstnode;
- }
- node* del( node *firstnode){
- if( firstnode == NULL || firstnode->next == NULL) /*Wenn kein oder nur ein Konten vorhanden*/
- return NULL;
- else{
- node *newfirstnode = firstnode->next;
- newfirstnode->prev = NULL;
- free(firstnode);
- return newfirstnode;
- }
- }
- node* del_ith( node *firstnode, int pos ){
- int i;
- node *itnode = firstnode;
- for( i=1 ; i< pos-1 ; i++ ){ /*suche i-1te Position*/
- itnode = itnode->next;
- }
- if( itnode == NULL || itnode->next == NULL) /*wenn knoten nicht vorhanden*/
- return firstnode;
- else{
- node *delnode = itnode->next; /*merke zu loeschenden Knoten*/
- itnode->next = delnode->next;
- delnode->next->prev = itnode;
- free(delnode);
- return firstnode;
- }
- }
- node* del_last( node *firstnode){
- node *itnode = firstnode;
- while( itnode->next->next != NULL ) /*suche vorletzten Knoten*/
- itnode = itnode->next;
- free(itnode->next);
- itnode->next = NULL;
- return firstnode;
- }
- void del_all( node *firstnode ) {
- node *delnode = firstnode;
- while( firstnode->next != NULL ){
- firstnode = firstnode->next;
- free( delnode );
- delnode = firstnode;
- }
- free( delnode );
- }
- int main(void){
- int i1 = 0;
- int i2 = 1;
- int i3 = 2;
- void *eins = &i1;
- void *zwei = &i2;
- void *drei = &i3;
- node *dvlist = NULL;
- dvlist = add(dvlist,eins);
- dvlist = add(dvlist,zwei);
- dvlist = add_ith(dvlist,drei,2);
- printf("%d,%d,%d\n", *(dvlist->content), *(dvlist->next->content), *(dvlist->next->next->content));
- del_all(dvlist);
- return 1;
- }
>: 4 8 15 16 23 42