gpt4 book ai didi

c - 具有链表实现的矩阵

转载 作者:行者123 更新时间:2023-11-30 15:27:18 25 4
gpt4 key购买 nike

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

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

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

最佳答案

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

首先,查看singly_linked_list处的代码。它拥有您需要的一切,精心布局和解释 - struct NODE、创建、前置和 foreach/遍历。实际上,该页面可以提供更多内容。

一些伪代码:

  1. 获取行,列//你已经得到了

  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。请原谅我的编码风格和任何错误。如果在求和时假设一个有效的矩阵,则可以进一步简化。

关于c - 具有链表实现的矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27073369/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com