Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Сдвиг списка в право


Автор: nimferus 13.12.2010, 21:31
Добрый день. Работаю со списками. Возникла такая проблема, никак не могу сделать сдвиг в право.
Вот так реализую сам список:
Код

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <ctype.h>
#include <malloc.h>

#define QUE struct que            
QUE {
    int info;
    QUE *next;
};

void insert(QUE **q, int item);
void display(QUE * q);
QUE * create_list();
QUE *q = NULL;

void display(QUE * q) {
    QUE * current = q;
    printf("\nLIST=");
    if (current) {
        while(current) {
            printf("%d-->", current->info);
            current = current ->next;
        }
        printf("NULL");
    }
    else
        printf("pustoy");
    printf("\n");
}
QUE * create_list() {
    QUE * list=NULL;
    int done=1,
    info, c;
    printf("Creation of list:\n");
    while(done)
    {
        printf("Add new element? (Y/N)");
        c = getch();
        c = toupper(c);
        switch(c) {
            case 'Y':    printf("\n Element=");
                        scanf("%d", &info);
                        insert(&q, info);
                        break;
            case 'N':    done = 0;
                        break;
        }
    }
    return (list);
}
void insert (QUE **q, int item) {
    QUE *current=*q;
    QUE *previous=0;
    QUE *new_node;
    while(current) {
        previous=current;
        current=current->next;
    }
    new_node=(QUE*) malloc (sizeof (QUE));
    new_node->info=item;
    if (previous) {
        new_node->next=previous->next;
        previous->next=new_node;
    }
    else {
        *q=new_node;
        (*q)->next=0;
    }
}
int main() {
    create_list();
    display(q);

    getch();
    return 0;
}



Помогите пожалуйста сделать сдвиг вправо с формированием нового списка, то есть если тут я формирую список q, то мне нужен другой список, который будет списком q сдвинутым на 1 элемент вправо.
Заранее большое спасибо!.

Автор: Чoо 13.12.2010, 22:34
а при "сдвиге" элемент списка терять или циклически переносить?

Добавлено через 2 минуты и 19 секунд
вообще что нужно: из списка 
Код

абвгдежзи

получить
Код

бвгдежзиа

?

Добавлено через 4 минуты и 3 секунды
точнее
Код

иабвгдежз

Автор: nimferus 13.12.2010, 22:39
не, значения просто числа, например список: 1, 2, 3, 4, 5
нужно получить: 5, 1, 2, 3, 4

Автор: Чoо 13.12.2010, 22:54
бегло глянул код. Я так понимаю, список не закольцован. Если сделать список кольцевым, то особо ни чего писать не понадобится, для сдвига. Если понадобятся сдвиги в обе стороны, то сформировать кольцевой двусвязный список.
Если же решение нужно именно для такого списка, последний элемент которого имеет next=0, то для сдвига придется обходить список.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)