Я пытаюсь добавить функцию для поиска позиции узла, когда пользователь вводит значение (символ) и возвращает позицию узла.
Я попытался выполнить действия, описанные в функции удаления, так как это выглядит похоже, но я не могу понять это.
#include <stdio.h>
#include <stdlib.h>
// self-referential structure
struct listNode {
char data; // each listNode contains a character
struct listNode *nextPtr; // pointer to next node
};
typedef struct listNode ListNode; // synonym for struct listNode
// prototypes
void insert(ListNode* *sPtr, char value);
char delete(ListNode* *sPtr, char value);
int find(ListNode* *sPtr, char value);
void printList(ListNode* currentPtr);
void menu(void);
int main(void)
{
ListNode* Head = NULL; // initially there are no nodes
char item; // char entered by user
menu(); // display the menu
printf("%s", "? ");
unsigned int choice; // user's choice
scanf("%u", &choice);
// loop while user does not choose 3
while (choice != 4) {
switch (choice) {
case 1:
printf("%s", "Enter a character: ");
scanf("\n%c", &item);
insert(&Head, item); // insert item in list
printList(Head);
break;
case 2: // delete an element
// if list is not empty
if (Head != NULL) {
printf("%s", "Enter character to be deleted: ");
scanf("\n%c", &item);
// if character is found, remove it
if (delete(&Head, item)) { // remove item
printf("%c deleted.\n", item);
printList(Head);
}
else {
printf("%c not found.\n\n", item);
}
}
else {
puts("List is empty.\n");
}
break;
case 3: // find node position
// if list is not empty
if (Head != NULL) {
printf("%s", "Enter character to find position: ");
scanf("\n%c", &item);
printf("Element %c is at index %d", item, find(&Head,item));
}
else {
puts("List is empty.\n");
}
break;
default:
puts("Invalid choice.\n");
menu();
break;
} // end switch
printf("%s", "? ");
scanf("%u", &choice);
}
puts("End of run.");
}
// display program instructions to user
void menu(void)
{
puts("Enter your choice:\n"
" 1 to insert an element into the list.\n"
" 2 to delete an element from the list.\n"
" 3 to find node position\n."
" 4 to end.");
}
int find(ListNode* *sPtr, char value)
{
int count = 0;
while (sPtr != NULL || value != (*sPtr)->data)
{
count++;
*sPtr = (*sPtr)->nextPtr;
}
return count;
}
Сначала я добавляю узел, используя функцию вставки, например: A -> B -> C. Я ожидаю, что он вернет индекс 1, когда пользователь ввел значение B в качестве значения. Я получаю ядро ошибки сегментации сбрасывается всякий раз, когда я запускаю код ниже ..