Ich bin neu in C, also suche ich Hilfe, weil ich feststecke. Nach dem Erstellen einer Linked-List-Bibliothek, aus der ich alle Knoten, die der Benutzer möchte, hinzufügen, löschen und drucken kann, sollte ich dem Programm eine zusätzliche Funktion des Integer-Typs hinzufügen und eine -1 zurückgeben, wenn der Wert nicht existiert der verknüpften Liste. Wenn der Wert in der verknüpften Liste vorhanden ist, sollte die Position des Elements zurückgegeben werden.Datenstrukturen - Bibliothek mit verknüpften Listen in C
Zum Beispiel in dieser verketteten Liste (a -> b -> c -> d -> NULL
), wenn ich die Position von c
wissen will, sollte es mir ein 3 zurückkehren, wenn ich die Position von G
es soll mich wissen will -1 zurück
Diese ist das Programm, das ich bis jetzt machen konnte:
#include <stdio.h>
#include <stdlib.h>
struct ListNode
{
char data;
struct ListNode *nextNode;
};
typedef struct ListNode node;
int main()
{
node *startNodePtr= NULL;
int choice;
char value;
printf("\t\t\tLIST OF CHARACTERS\n");
do
{
printf("\n1.Add New Node \t2.Delete Node \t3.Print Current List \t4.QUIT\n\n");//user friendly interface
scanf("%d",&choice);
switch(choice)
{
case 1: printf("Enter Character: ");
scanf("\n%c",&value);
insertNode(&startNodePtr,value);//calling the function to add a node
break;
case 2: printf("Delete Character: ");
scanf("\n%c",&value);
deleteNode(&startNodePtr,value);//calling the function to remove a node
break;
case 3: printList(startNodePtr);//calling the function to list the nodes
break;
case 4: continue;//if we type 4 it won't show the default answer
default:printf("\t\tINVALID ANSWER! Please type 1. 2. 3. or 4.\n");// in case we type any other character that is not 1, 2, 3 or 4. In this way the program will not crash
break;
}
} while(choice!=4);//keep adding or deleting nodes until we enter 4 which refers to "QUIT"
return 0;
}
void insertNode(node **sPtr, char add)//function to add a node
{
node *newPtr;
node *curPtr;
node *prevPtr;
newPtr=malloc(sizeof(node));
newPtr->data=add;
newPtr->nextNode=NULL;
prevPtr=NULL;
curPtr=*sPtr;
while(curPtr!=NULL)
{
prevPtr=curPtr;
curPtr=curPtr->nextNode;
}
if (prevPtr==NULL)
{
*sPtr=newPtr;
}
else
{
prevPtr->nextNode=newPtr;
}
}
void deleteNode(node **sPtr, char remove)//function to remove a node
{
node *curPtr;
node *prevPtr;
curPtr=*sPtr;
prevPtr=NULL;
if(curPtr->data==remove)
{
*sPtr=curPtr->nextNode;
free(curPtr);
return;
}
while (curPtr!=NULL)
{
if (curPtr->data==remove)
{prevPtr->nextNode=curPtr->nextNode;
free(curPtr);
return;}
else
{prevPtr=curPtr;
curPtr=curPtr->nextNode;}
}
}
void printList(node *sPtr)//function to list the nodes
{
if (sPtr==NULL)
{
printf("The list is empty!\n");
}
else
{
while (sPtr!=NULL)
{
printf("\n%c-->", sPtr->data);
sPtr=sPtr->nextNode;
}
} printf("NULL\n\n");
}
OK, was ist das Problem? Sie haben bereits Funktionen, die die Liste iterieren, also ... Ich kann das Problem überhaupt nicht sehen :( –
@MartinJames Ja, es klingt dumm, aber ich weiß nicht, wie ich die Funktion erstellen kann. Ich kann hinzufügen ein Fall 5. Aufruf der Funktion findFunction (& startNoiderPtr, integer) und Hinzufügen einer ganzzahligen Variable in der Struktur, und dann ?. Ich bin ein wenig verwirrt – Leandro
Versuchen Sie vielleicht "Traverse verknüpfte Liste in C get Wert". Ich denke Sie Ich sollte mehr Mühe darauf verwenden, das Problem zu lösen, als nur zu sagen, dass er mein Problem ist. Kannst du es für mich tun? – sebenalern