6-3 求链式表的表长(10 point(s))

6-3 求链式表的表长(10 point(s))

本题要求实现一个函数,求链式表的表长。

函数接口定义:

int Length( List L );

其中List结构定义如下:

typedef struct LNode *PtrToLNode;
struct LNode {
    ElementType Data;
    PtrToLNode Next;
};
typedef PtrToLNode List;

L是给定单链表,函数Length要返回链式表的长度。

裁判测试程序样例:

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

typedef int ElementType;
typedef struct LNode *PtrToLNode;
struct LNode {
    ElementType Data;
    PtrToLNode Next;
};
typedef PtrToLNode List;

List Read(); /* 细节在此不表 */

int Length( List L );

int main()
{
    List L = Read();
    printf("%d\n", Length(L));
    return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

1 3 4 5 2 -1

输出样例:

5

code:
int Length( List L ){
  int cnt = 0;
  while(L!=NULL){
    cnt++;
    L = L->Next;
  }
  return cnt;
}

 
### 关于矩阵链式乘法问题的C语言实现 动态规划是一种用于解决复杂优化问题的技术,广泛应用于多个领域,包括矩阵链式乘法[^1]。下面展示了一个使用C语言编写的矩阵链式乘法问题的解决方案。 #### 动态规划解矩阵链式乘法的核心思路 该算法通过构建一个二维数组`m[i][j]`来存储子问题的结果,其中`i`到`j`范围内的最小代价被记录下来。为了追踪最优括号化方案,引入辅助数组`s[i][j]`保存分割位置的信息。 #### C语言代码示例 ```c #include <stdio.h> #include <limits.h> // 计算两个大小分别为p*q 和 q*r 的矩阵相乘所需的标量运算次数 int MatrixMultiplyCost(int p, int q, int r) { return p * q * r; } void PrintOptimalParenthesization(int s[][10], int i, int j) { if (i == j) { printf("A%d", i); } else { printf("("); PrintOptimalParenthesization(s, i, s[i][j]); PrintOptimalParenthesization(s, s[i][j] + 1, j); printf(")"); } } void MatrixChainOrder(int dimensions[], int n) { int m[n][n]; // Cost table int s[n][n]; // Splitting point table for (int i = 1; i < n; ++i) m[i][i] = 0; for (int L = 2; L < n; ++L) { // Chain length for (int i = 1; i < n - L + 1; ++i) { int j = i + L - 1; m[i][j] = INT_MAX; for (int k = i; k <= j - 1; ++k) { int cost = m[i][k] + m[k + 1][j] + MatrixMultiplyCost(dimensions[i - 1], dimensions[k], dimensions[j]); if (cost < m[i][j]) { m[i][j] = cost; s[i][j] = k; } } } } printf("The optimal number of multiplications is %d\n", m[1][n - 1]); printf("Optimal Parenthesization: "); PrintOptimalParenthesization(s, 1, n - 1); } int main() { int arr[] = {30, 35, 15, 5, 10, 20, 25}; int size = sizeof(arr)/sizeof(arr[0]); MatrixChainOrder(arr, size); return 0; } ``` 此段代码实现了寻找给定维度序列下执行最少数量的标量乘法操作的方法,并打印出了最佳加括号方式。这段程序利用了动态规划的思想,在计算过程中避免重复工作,从而提高了效率。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值