2016-12-05 3 views
1

Так что я сам учащийся, и я застрял здесь. То, что я хочу выполнить, - создать связанный список с некоторыми данными, затем выбрать случайный узел из связанного списка, изменить некоторые данные и затем перенести их в очередь (очередь также реализована с использованием связанного списка)Перемещение данных из связанного списка в очередь [c]

I я не уверен, как писать свои структуры тоже. Вот мои структуры.

struct Apps{ 
    int id; 
    int size; 
    char name; 
    float xronos_eiswdou; 
    char condition; 
    int xronos_ekteleshs; 
    struct Apps *next, *next1; 
}*rear, *front; 

Я уверен, что это неправильно, и у меня нет подсказки о том, как его исправить.

Это моя функция на данный момент.

void push(struct Apps *head) 
{ 
    struct Apps *temp; 
    struct Apps *temp1; 
    temp1=(struct Apps *)malloc(sizeof(struct Apps)); 
    temp1->id = temp->id; 
    temp1->size = temp->size; 
    temp1->name = temp->name; 
    temp1->xronos_eiswdou = temp->xronos_eiswdou; 
    temp1->condition = temp->condition; 
    temp1->xronos_ekteleshs = temp->xronos_ekteleshs; 
    temp1->next = head; 
    if (front == NULL) 
    { 
      front=temp1; 
      front->next1=NULL; 
      rear=front; 
    } 
    else 
    { 
      front->next1=temp1; 
      front=temp1; 
      front->next1=NULL; 
    } 
} 

Вот мой основной код для добавления данных к моему связанному списку:

for(step = 0; step < 100; step++) 
     { 
     int r = rand() % 100+1; 
     if(r < 31){ 
      int r1 = rand() % 100+1; 
      aa = r1; 
      int r2 = rand() % 100+1; 
      bb = r2; 
      int r3 = rand() % 3; 
      if(r3 == 0){ 
       cc = 'l'; 
      } 
      else if(r3 == 1){ 
       cc = 'b'; 
      } 
      else if(r3 == 2){ 
       cc = 'c'; 
      } 
      dd = (double)seconds/CLOCKS_PER_SEC; 
      ee = 'a'; 
      ff = -1; 
      insert_new(aa, bb, cc, dd, ee, ff); 
     } 
     else if(r > 30 && r < 51){ 
      pickRandom(head); /*picking a random node and changing some data*/ 
      /*Here I need a function which moves the data of the above node to a queue*/ 
     } 
    } 

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

EDIT

Я пытался что-то, кажется, работает, ну вроде от ... Вот мои структуры:

struct Apps{ 
    int id; 
    int size; 
    char name; 
    float xronos_eiswdou; 
    char condition; 
    int xronos_ekteleshs; 
    struct Apps *next; 
}; 

struct Queue 
{ 
    int id1; 
    int size1; 
    char name1; 
    float xronos_eiswdou1; 
    char condition1; 
    int xronos_ekteleshs1; 
    struct Queue *next; 
    struct Queue *front; 
    struct Queue *rear; 
}; 

и вот моя функция:

struct Queue *start = NULL; 
struct Queue *front = NULL; 
struct Queue *rear = NULL; 

    void push() 
    { 
     struct Apps *temp; 
     struct Queue *temp1; 
     temp1=(struct Queue *)malloc(sizeof(struct Queue)); 
     temp1->id1 = temp->id; 
     temp1->size1 = temp->size; 
     temp1->name1 = temp->name; 
     temp1->xronos_eiswdou1 = temp->xronos_eiswdou; 
     temp1->condition1 = temp->condition; 
     temp1->xronos_ekteleshs1 = temp->xronos_ekteleshs; 
     temp1->next = start; 
     if (front == NULL) 
     { 
       front=temp1; 
       front->next=NULL; 
       rear=front; 
     } 
     else 
     { 
       front->next=temp1; 
       front=temp1; 
       front->next=NULL; 
     } 
} 

программа работает без ошибок, но его падение es, так что это снова что-то не так!

+0

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

+0

Fist реализует функциональность для удаления узла - вам нужно изменить указатель 'next' в * предыдущем элементе в списке указателю' next' удаленного узла. Когда вы это сделали, тогда (с «вставкой») у вас есть компоненты на месте. Сделайте один шаг за раз. – cdarke

+0

@cdarke Я хочу переместить данные в узел очереди, а затем удалить узел из списка. Это то, чего я не понимаю – cDreM

ответ

0

Так ваша проблема

1.А список содержит некоторые случайное число узлов

2.Have собрать элементы измененных в списке в очереди (что другой список)

Чтобы решить эту проблему, пожалуйста, измените структуру, как,

struct Apps{ 
    int id; 
    int size; 
    char name; 
    float xronos_eiswdou; 
    char condition; 
    int xronos_ekteleshs; 
    struct Apps *next; 
}; 

struct Queue 
{ 
    Struct Apps *node; 
    struct Queue * next; 
}; 

Итак, теперь вы будете иметь первоначальный список элементов в списке (Apps) и модифицированный узле s (список приложений), собранный в очереди (Queue_struct), который реализован с помощью LinkedList.

+1

ok, сделайте это ... моя другая проблема в том, что я не могу понять, как написать функцию, которая перемещает измененные узлы в очереди – cDreM

+0

super .. тогда, пожалуйста, попробуйте с этим и сообщите мне, если у вас возникнут какие-либо проблемы в то время как реализация .. – lsof

+0

Я пробовал что-то, но он падает, когда я запускаю его. Однако ошибок компиляции нет. Можете ли вы проверить мои изменения в моих вопросах? – cDreM

Смежные вопросы