Так что я сам учащийся, и я застрял здесь. То, что я хочу выполнить, - создать связанный список с некоторыми данными, затем выбрать случайный узел из связанного списка, изменить некоторые данные и затем перенести их в очередь (очередь также реализована с использованием связанного списка)Перемещение данных из связанного списка в очередь [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, так что это снова что-то не так!
Не связано с вашей проблемой, но вы действительно должны отформатировать свой код в соответствии с одним из стандартов, например, как в учебнике C. Ваш код трудно читать. –
Fist реализует функциональность для удаления узла - вам нужно изменить указатель 'next' в * предыдущем элементе в списке указателю' next' удаленного узла. Когда вы это сделали, тогда (с «вставкой») у вас есть компоненты на месте. Сделайте один шаг за раз. – cdarke
@cdarke Я хочу переместить данные в узел очереди, а затем удалить узел из списка. Это то, чего я не понимаю – cDreM