Как использовать связанный список для хранения двух вещественных чисел в одном узле


Я создал 20 узлов для хранения 20 элементов, но мне просто нужно 10 узлов, чтобы хранить эти 20 элементов как два элемента в одном узле. Вот мой код

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

struct list_el
{
  float            val;
  struct list_el * next;
};

typedef struct list_el item;

int main()
{
  item *curr, *head;
  head = NULL;

  FILE * pointer = NULL;

  float  array[20];
  int    j;
  double xsq, ysq, B1, B0, R, rsq, rpart, rdevide, estimate;
  double estimate;
  double total_x   = 0;
  double total_y   = 0;
  double total_xsq = 0;
  double total_ysq = 0;
  double total_xy  = 4303108.0;
  double avg_x     = 0;
  double avg_y     = 0;

  pointer = fopen("dummy.txt", "r");

  //Store the data to a array from the pointer
  for(j = 0; j < 20; j++)
  {
    fscanf(pointer, "%f", &array[j]);
  }

  //make nodes and store data inside the each node head.. in this code segment i want to store two elements in one node
  for(j = 0; j < 20; j++)
  {
    curr       = (item *)malloc(sizeof(item));
    curr->val  = array[j];
    curr->next = head;
    head       = curr;
  }

  curr = head;

  for(j = 0; j < 20; j++)
  {
    if(j < 10)
    {
      printf("%.2fn", curr->val);
      total_y   = total_y + curr->val;
      ysq       = curr->val;
      total_ysq = total_ysq + (ysq * ysq);
      curr      = curr->next;
    }
    else
    {
      printf("%.2fn", curr->val);
      total_x   = total_x + curr->val;
      xsq       = curr->val;
      total_xsq = total_xsq + (xsq * xsq);
      curr      = curr->next;
    }
  }

  //calculate the average of data
  avg_x = total_x / 10.0;
  avg_y = total_y / 10.0;

  printf("Average n");
  printf("X: %.3fn", avg_x);
  printf("Y : %.3fnn", avg_y);

  fclose(pointer);
  return 0;

} //End of Main

Манекен.txt:

130 650 99 150 128 302 95 945 368 961 186 699 132 272 291 331 199 1890 788 1601

2 2

2 ответа:

Я создал 20 узлов для хранения 20 элементов, но мне просто нужно 10 узлов, чтобы хранить эти 20 элементов как два элемента в одном узле.

Существует два способа добиться этого.

Первый Способ

struct list_el
{
    float val1;
    float val2;
    struct list_el * next;
};

Другой Способ

#define NUM_VALS 2

struct list_el
{
    float val[NUM_VALS];
    struct list_el * next;
};

Просто добавьте поплавок в свою структуру list_el

struct list_el
{
  float val1;
  float val2;
  struct list_el * next;
};