singlepost

Вставка в связный список (си) << На главную или назад  

Нужно: Создать связный список, вывести его на экран. Вставить элемент с заданным словом между элементами с указанными номерами. Вывести полученный список на экран.
Я написал прогу, кроме функции вставки, чет не получается, может у кого она есть?

51 ответов в теме “Вставка в связный список (си)”

  1. 9
    Михаил Ганеев ответил:

    Что значит "link" и "head"?

  2. 8
    Владимир Рудой ответил:

    // Вот небольшой пример

    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>

    #define STRING_SIZE 16

    typedef struct list{
    char data[STRING_SIZE];
    struct list* next;
    } node,*link;

    link l_append(link head, const char* data) // Добавление элемента в конец списка
    {
    link newElement = (link)(malloc(sizeof(node)));
    newElement->next = NULL;
    strcpy(newElement->data, data);

    if (head == NULL) head = newElement;
    else
    {
    link currentElement = head;
    for(;currentElement->next != NULL; currentElement = currentElement->next);
    currentElement->next = newElement;
    }

    return head;

    }

    void l_print(link head) // Вывод элементов списка
    {
    if (head == NULL) return;

    link currentEl = head;
    int currentNum = 0;
    for(;currentEl != NULL; currentEl = currentEl->next,currentNum++)
    printf("Элемент #%i : %s\n", currentNum, currentEl->data);
    }

    link l_insert(link head, int index, char data[STRING_SIZE]) // Вставка после указанного индекса
    {
    if (head == NULL) return NULL;

    link newElement = (link)(malloc(sizeof(node)));
    newElement->next = NULL;
    strcpy(newElement->data, data);

    int currentIndex = 0;
    link currentElement = head;
    for(;currentIndex < index ; currentElement = currentElement->next,currentIndex++);

    newElement->next = currentElement->next;
    currentElement->next = newElement;

    return head;
    }

    int main()
    {
    link head = NULL;

    int nWords = 0;
    printf("Введите количество слов \n");
    scanf("%i", &nWords);
    char tmpStr[STRING_SIZE];

    for (;nWords != 0; nWords–)
    {
    scanf("%s",&tmpStr);
    head = l_append(head,tmpStr);
    }

    printf("До вставки: ");
    l_print(head);

    char newWord[STRING_SIZE];
    int index;
    printf("Введите индекс и слово для вставки:\n");
    scanf("%i %s",&index, newWord);

    head = l_insert(head, index, newWord);

    printf("После вставки: \n");
    l_print(head);
    return 0;
    }

  3. 7
    Алексей Вишняков ответил:

    связанный список(однонаправленный) это структура состоящая из двух элементов. Один содержит данные, а другой ссылку(указатель) на следующий элемент.
    То есть для того что бы вставить элемент нужно у предыдущей структуры в указатель записать адрес новой структуры, а в новой структуре в указатель записать адрес следующей структуры.

    Было: A -> B
    Стало: A -> C -> B

  4. 6
    Владимир Рудой ответил:

    //algolist.manual.ru/ds/basic/simple_list.php Здесь есть статья про алгоритмы работы со списками.

  5. 5
    Марина Брюханова ответил:

    Помогите, пожалуйста…..
    У меня Виста…. Поставила пароль и забыла…
    Как его взломать и не потерять данные?

  6. 4
    Михаил Ганеев ответил:

    язык С

  7. 3
    Михаил Ганеев ответил:

    элементы в список вводятся с клавы

  8. 2
    Михаил Ганеев ответил:

    /*Создать связный список, вывести его на экран.
    Вставить элемент с заданным словом между элементами с указанными номерами.
    Вывести полученный список на экран.*/
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define MAX 3
    #define MAXL 10
    typedef struct node
    {
    char data[MAXL];
    struct node *next;
    }NODE, *PNODE;
    void createlist(PNODE *top);
    void printlist(PNODE top);
    void insertnode(PNODE *top);
    void main (void)
    {
    char item[MAXL];
    PNODE top=NULL;
    createlist(&top);
    printf("List:\n");
    printlist(top);
    }
    void createlist(PNODE *curr)
    {
    char item[MAXL];
    int i;
    PNODE ptr;
    for (i=0;i<MAX; i++)
    {
    printf("Word->");
    gets(item);
    ptr=PNODE(malloc(sizeof(NODE)));
    ptr->next=*curr;
    strcpy(ptr->data, item);
    *curr=ptr;
    }
    }
    void printlist(PNODE top)
    {
    if(top==NULL)
    printf("List is empty!\n");
    else
    {
    while (top)
    {
    puts(top->data);
    top=top->next;
    }
    }
    }

  9. 1
    Владимир Рудой ответил:

    А какой язык хоть?

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.