Waqas Ali Ответов: 2

Строка с двойным списком ссылок удалить алфавитный порядок


Это мое задание в универе, я пытался его выполнить,но застрял здесь.
Во-вторых, его работа похожа на алфавитную, но мне нужен список от головы до хвоста.
Все остальные пункты все еще там, пожалуйста, кто-нибудь дайте мне решение.я буду очень благодарен вам,навсегда в моей жизни.
Это окончательное назначение, если я потерплю неудачу в этом, я потеряю свой 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

Почему вы написали функцию сортировки?

2 Ответов

Рейтинг:
2

KarstenK

Вы должны разобраться в этом сами, поэтому лучше изучите связанный список.

Когда вам нужен алфавитный порядок, вы реализуете его таким образом, что на вставка порядок соблюдается или сортировать заполненный связанный список.

Научитесь пользоваться отладчиком!!!


Рейтинг:
0

Rick York

Это ваше домашнее задание и мы его выполним нет предлагаем вам решение. Однако мы ответим на конкретные вопросы.

Одна важная вещь : нигде в определении проблемы не указано, что список должен быть сохранен в алфавитном порядке. Так зачем же беспокоиться? Это означает, что вам не нужна функция сортировки. Предполагается, что вы добавляете элементы в конец списка, а не в начало, поэтому вам нужна функция добавления, а не функция добавления.


Waqas Ali

Спасибо за ваш совет, как я уже говорил вам ранее, я пытался.

Rick York

Это, вероятно, прозвучит сурово, но если вы хотите быть программистом, то вам нужно найти время. Вы ничему не научитесь, если за вас будет работать кто-то другой.

Я рекомендую сделать поиск по "двусвязному списку" или аналогичной фразе, и вы увидите множество руководств о том, как они работают и как их реализовать. На самом деле, я думаю, что есть несколько на этом сайте. Начинайте читать, как только ваше время истекает. Вот несколько статей на этом сайте по этой теме : связанный список