Строка с двойным списком ссылок удалить алфавитный порядок
Это мое задание в универе, я пытался его выполнить,но застрял здесь.
Во-вторых, его работа похожа на алфавитную, но мне нужен список от головы до хвоста.
Все остальные пункты все еще там, пожалуйста, кто-нибудь дайте мне решение.я буду очень благодарен вам,навсегда в моей жизни.
Это окончательное назначение, если я потерплю неудачу в этом, я потеряю свой cgpa.миллион тысяч Заранее спасибо.
Ваша программа должна реализовывать двусвязный список строк. Каждый узел должен содержать строку (выберите подходящий размер), указатель следующего узла и указатель предыдущего узла. Затем напишите функции для выполнения следующих операций со связанными списками:
• Функция с именем printFor, которая печатает элементы списка, начинающиеся в начале.
• Функция с именем printRev, которая печатает элементы в списке, начиная с хвоста.
• Функция с именем size, которая возвращает размер (количество узлов) в связанном списке.
• Функция поиска, которая проверяет, содержится ли данная строка в связанном списке. Он должен возвращать указатель узла, если строка была найдена, или NULL, если она не найдена.
• Функция add, которая добавляет строку в конец списка, если она еще не содержится в связанном списке. Если строка уже содержится в списке, функция add должна напечатать “дубликат записи” и больше ничего не делать.
• Функция ФОТ, которая удаляет строку из списка. Если строка не найдена в списке, то функция remov должна вывести “Not found”. Примечание: мы называем его remov без ‘e’, чтобы избежать конфликта с функцией remove в stdio.h.
Также напишите основную функцию для тестирования других функций. Ваша основная функция должна выполнять следующие действия в указанном порядке. – Инициализируйте пустой связанный список. – Добавьте в список следующие 5 строк: одна, две, три, четыре, пять – (попытка) удалить следующие 2 строки: четыре, семь – выведите размер списка. – Добавьте в список следующие 5 строк: две, пять, шесть, семь, восемь – Распечатайте список вперед, затем распечатайте список назад.
Что я уже пробовал:
#include <stdio.h> #include <string.h> #include <stdlib.h> typedef struct info { char name[10]; struct info *next; } info; /* List Functions */ /* -------------- */ info *newnode ( void ) { info *new = malloc( sizeof *new ); if ( new ) { new->next = NULL; } return new; } info *list_prepend ( info *head, char *name ) { info *new = newnode( ); if ( new ) { new->next = head; strcpy( new->name, name ); } return new; } void list_print ( info *head ) { while ( head ) { printf( "%s\n", head->name ); head = head->next; } } int list_count ( info *head ) { int result = 0; while ( head ) { result++; head = head->next; } return result; } int compare ( const void *a, const void *b ) { info * const *pa = a; info * const *pb = b; return strcmp( (*pa)->name, (*pb)->name ); } info *list_sort ( info *head ) { int i, n; info **array; /* create array out of a list */ n = list_count( head ); array = malloc( n * sizeof *array ); for ( i = 0 ; i < n ; i++ ) { array[i] = head; head = head->next; } /* sort it */ // qsort( array, n, sizeof(array[0]) ); /* create list out of array */ qsort( array, n, sizeof(array[0]), compare ); for ( i = 0 ; i < n-1 ; i++ ) { array[i]->next = array[i+1]; } array[n-1]->next = NULL; head = array[0]; free( array ); return head; } int main ( ) { info *list = NULL; char *names[] = { "one", "two", "three", "four", "five","six", "sev", "eight" }; int i; int xxx= sizeof(names); /* create a list */ for ( i = 0 ; i < sizeof(names)/sizeof(names[0]) ; i++ ) { list = list_prepend( list, names[i] ); } printf( "\nStarting at the tttail\n" ); list_print( list ); printf( "\nStarting at the head\n" ); list = list_sort( list ); list_print( list ); return 0; }
CPallini
Почему вы написали функцию сортировки?