Мне нужна твоя помощь по поводу моей домашней работы. Может ли кто-нибудь, пожалуйста, помогите мне завершить это. На самом деле реальный вопрос заключается в том, что
Создайте элемент структуры, который содержит одну строку с именем name длиной до 20 символов и указатель на другой элемент, который называется prev. Напишите основную функцию, которая создает массив списков, который может хранить до 10 элементов, и заполняет его в произвольном порядке, причем каждый добавленный элемент указывает на ранее добавленный элемент для пред. Затем распечатайте список в порядке ввода элементов
Например, если элементы были введены в порядке 9, 4, 2, 6, 3, 5, 0, 1, 7, 8
, вывод должен быть
listitem[9].name
listitem[4].name
listitem[2].name
...
Необходимо использовать предыдущие данные член каждого элемента для распечатки упорядоченного списка.
И мой код здесь, но он не работает.
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
typedef struct elem Elem;
struct elem
{
char name[20];
struct elem *prev;
struct elem *next;
};
int main()
{
int i,j;
srand(time(0));
int listelem[10];
printf("The elements of the array:\n");
for (i=0; i<10; i++)
{
listelem[i] = ( rand() % 10 )+1;
printf("%d\n",listelem[i]);
}
Elem a = {listelem[0]};
Elem b = {listelem[1],&a};
Elem c = {listelem[2],&b,&d};
Elem d = {listelem[3],&c,&e};
Elem e = {listelem[4],&d,&f};
Elem f = {listelem[5],&e,&g};
Elem g = {listelem[6],&f,&h};
Elem h = {listelem[7],&g,&x};
Elem x = {listelem[8],&h,&y};
Elem y = {listelem[9]};
a.prev = NULL;
b.prev = &a;
c.prev = &b;
d.prev = &c;
e.prev = &d;
f.prev = &e;
g.prev = &f;
h.prev = &g;
x.prev = &h;
y.prev = &x;
Elem *q = &y;
while(q->prev!=NULL) q=q->prev;
do
{
printf("%s\n",q->name);
q=q->next;
}
while(q!=NULL);
}