Bom galera,tenho que criar uma fila dinâmica dentro de outra fila dinâmica em C,porém a primeira fila é composta por índices de acordo com o número digitado pelo usuário.Por exemplo 5: a fila terá valores 0-1-2-3-4.Isso eu consegui.
O exercício pede que depois disso o usuário ao inserir o valor de um índice possa inserir qualquer valor.Por exemplo índice 2 valores 7 e 4.A fila ficaria assim:
0-1-2-3-4
-----7-----
-----4-----
Como posso fazer isso?? Pensei em criar outro struct mas estou em duvida
#include <stdio.h>
#include <malloc.h>
typedef struct dados{
int val;
struct dados *prox;
}fila;
fila *novo,*inicio,*fim;
main(){
inicio=NULL;
int i,n;
printf("\nDigite quantos indices quer armazenar:");
scanf("%d",&n);
for(i=0;i<n;i++){
novo=(fila*)malloc(sizeof(fila));
novo->val=i;
novo->prox=NULL;
if(inicio==NULL){
inicio=fim=novo;
}else{
fim->prox=novo;
fim=novo;
}
}
printf("\n\tFila preenchida");
}
É só criar um ponteiro para ponteiros do tipo fila
que você criou. Fiz um esboço aqui para te ajudar. O programa está funcionando estaticamente, você precisa entender como funcionam as funções e torna-lo dinâmico para que o usuário possa interagir.
#include <stdio.h>
#include <stdlib.h>
struct node {
int value;
struct node* next;
};
struct node* create_node(int value) {
struct node* new_node = malloc(sizeof(struct node*));
new_node->value = value;
new_node->next = 0x0;
return new_node;
}
void print_lists(struct node** lists, size_t size) {
for (int i = 0; i < size; i++) {
fprintf(stdout, "%d -> ", i);
struct node* head = lists[i];
while (head) {
fprintf(stdout, "%d ", head->value);
head = head->next;
}
fprintf(stdout, "\n");
}
}
void insert_value(struct node** lists, size_t index, int value) {
struct node* head = lists[index];
struct node* new_node = create_node(value);
if (!head) {
lists[index] = new_node;
} else {
while (head->next) {
head = head->next;
}
head->next = new_node;
}
}
int main(int argc, char** argv) {
size_t index_size;
index_size = 5;
struct node** lists = calloc(index_size, sizeof(struct node*));
insert_value(lists, 2, 7);
insert_value(lists, 2, 4);
print_lists(lists, index_size);
}
1 curtida