【问题标题】:Matrices with Linked List Implementation具有链表实现的矩阵
【发布时间】:2014-11-22 02:23:36
【问题描述】:

我想从文本文件中读取矩阵,例如:

2 3
52 7 100
90 36 90
22 35 62
56 51 23
58 98 74
86 32 45

第一行表示行和列的大小。然后我应该读取矩阵中的数据并用它们创建一个链表。我还应该找到求和矩阵(这不是问题)。我写了一些东西,但我认为它不是链表实现;它只是结构的二维数组。我做错/想错了吗?你能给我一些建议吗?

【问题讨论】:

  • 你的预感是对的!只是谷歌它,K&R应该有一个例子。
  • 谢谢。我已经搜索过,但找不到对我有用的东西。我应该重新写一遍吗?
  • 谢谢,但这与我的问题无关。

标签: c arrays matrix multidimensional-array


【解决方案1】:

希望以下内容能帮助您入门

首先,查看singly_linked_list 的代码。它有你需要的一切,布局和解释都很好——结构节点、创建、前置和 foreach/traversal。实际上,该页面提供了更多内容。

一些伪代码:

  1. get row, col // 你已经得到了

  2. 编写一个辅助函数NODE* process_line(line, col),它解析从文件中读取的行,对其进行标记,执行 atoi,并返回包含该行的链表。它可能返回 null 以指示错误,例如值不足、非整数等。如果返回 null,则必须释放内存。

  3. 您需要 1 个主链表来存储您的行。这个链表中的每个节点本身都是一个表示行的链表。 (另一种可能的解决方案是,每一行都简单地由一个已知​​长度的整数数组表示)。

  4. 逐行读取文件。处理该行以以合适的表示形式获取该行(我假设为链表)。将其作为另一个节点推送到您的主行链接列表中

  5. 要计算总和,您需要遍历外部链表。要处理其中的每一行/节点,您需要遍历该行链表。

迭代链表很容易

// modeling after
int list_foreach(NODE *node, int(*func)(void*))
{
   while(node) {
     if(func(node->data)!=0) return -1;
     node=node->next;
   }
   return 0;
}
// a more general purpose traversal which tracks state (a reduce-like op)
int list_traverse(NODE *node, void* state, int(*func)(void* state, void*data))
{
  while(node) {
    if (func(state, node->data)!=0) return -1; // something broke
    node=node->next;
  }
  return 0;
}

// 你的实际求和函数

int sum_a_row(void* prev_state, void* data){
   int* psum = (int*)prev_state;
   *psum += (int)data;
   return 0; // a successful summing
}

int sum_matrix(void* prev_state, void* data) {
    NODE* row = (NODE*)data;
    int* psum = (int*)prev_state;
    int row_sum = 0;
    int error = list_traverse(row, &row_sum, sum_a_row);
    *psum += row_sum;
    return 0; // success in summing
}

int matrix_sum = 0;
int error = list_traverse(matrix_head_node, &matrix_sum, sum_matrix);

HTH。原谅我的编码风格和任何错误。如果在求和时假设一个有效矩阵,则可以进一步简化。

【讨论】:

    猜你喜欢
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-06
    相关资源
    最近更新 更多