Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2012, 23:22   #1
acmilanfan
 
Регистрация: 14.11.2011
Сообщений: 3
Радость [C] Односвязные списки

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

Вообщем пробовал сформировать список с конца из элементов другого списка, без элемента номер которого получен, но в итоге окончательно запутался.

Вообщем вот вся программа(функция из задания new_list)


Код:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>


typedef struct line
    {
        char d[30];
        struct line*next;
    }LIST;



LIST input_kb(LIST *head_1, int n)
{
    char name[30];
    int i;
    LIST *new_1;
    //puts("Введите количество элементов");
    //scanf("%d", &n);
    fflush(stdin);
    head_1=NULL;
    getchar();
    for(i=0;i<n;i++)
    {
        puts("Введите строку");
        gets(name);
        new_1=(LIST*)malloc(sizeof(LIST));
        strcpy(new_1->d,name);
        new_1->next=head_1;
        head_1=new_1;
    }
    printf("\n");
    puts("Введенный список");
    for(i=0;i<n;i++)
    {
        printf("%s \n", new_1->d);
        new_1=new_1->next;
    }
return *head_1;
}

LIST new_list(int n, LIST *head_1)
{
    LIST *res,*cur,*cur1;
    int i,x=1,y=1;
    if(head_1!=NULL||head_1->next!=NULL)
    {
            for(i=0,cur=head_1;cur->next!=NULL;cur=cur->next)
            {
                i++;
            }
            res=cur;
            i=i-n;
            y=i;
            for(;cur->next!=head_1;cur=cur->next)
            {
                for(cur1=head_1;cur1->next!=cur;cur1=cur1->next)
                {
                    x++;
                }
                if(i==y-x)
                {
                    cur->next=cur1;
                }
            }





    return *res;
    }
    //else
    //{
    //    return NULL;
    //}
}




int main()
{
    int n, i, k;
    LIST *head_1, *new_1;
    puts("Введите количество элементов");
    scanf("%d", &n);
    //head_1=
    input_kb(*&head_1, n);
    puts("Введите номер элемента");
    scanf("%d", &k);
    new_list(n, *&head_1);
    puts("Результат");
    for(i=0;i<n;i++)
    {
        printf("%s \n", new_1->d);
        new_1=new_1->next;
    }
}
Функция не работает. Для ясности: res в функции это указатель на начало второго списка.
acmilanfan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Односвязные списки. Killspamers Помощь студентам 7 19.03.2012 18:59
Односвязные списки Nike0 Общие вопросы C/C++ 0 26.12.2010 12:07
Односвязные списки Anna T Паскаль, Turbo Pascal, PascalABC.NET 2 19.12.2010 18:58
Односвязные списки art_stalker Общие вопросы C/C++ 5 21.04.2010 22:49