日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

天勤2022数据结构(四)数组、矩阵与广义表

發布時間:2023/12/31 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 天勤2022数据结构(四)数组、矩阵与广义表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔

文章目錄

  • 前言
  • 一、綜合應用題
  • 總結


前言

提示:這里可以添加本文要記錄的大概內容:


提示:以下是本篇文章正文內容,下面案例可供參考

一、綜合應用題

  • 設數組A[0,…,n-1]的n個元素中有多個零元素,設計一個算法,將A中所有的非零元素依次移動到A數組的前端

    void move(int A[], int n){int i = -1, j, temp;for(j = 0; j<n; j++){if(A[j] != 0){i++;if(i != j){temp = A[i];A[i] = A[j];A[j] = temp;}}} }
  • 關于浮點型數組 A[0,…,n-1],試設計實現下列運算的遞歸算法

    • 求數組A中的最大值。

      float findmax(float A[], int i, int j){if(i == j){return A[i];}return A[i] > findmax(A, i+1, j)? A[i]: findmax(A, i+1, j); }
    • 求數組中n個數之和

      float sum(float A[], int i, int j){if(i == j){return A[i];}return A[i] + sum(A[i], i+1, j); }
    • 求數組中n個數的平均值

      float avg(float A[], int i, int j){if(i == j){return A[i];}return (A[i] +(j-i) * avg(A, i+1, j)) / (j-i+1); }
  • 試設計一個算法,將數組 A[0,…,n-1]中 所有奇數移到偶數之前。要求不另增加存儲空間,且時間復雜度為O(n)

    void divide(int A[], int n){int i = 0, j = n - 1, temp;while(i<j){while(i<j && A[i]%2 == 1){ 找第一個偶數i++;}while(i<j && A[j]%2 == 0){ 找最后一個奇數j--;}if(i<j){temp = A{i];A[i] = A{j];A[j] = temp;i++;j--;}} }
  • 設有一元素為整數的線性表L,存放在一維數組A[0,…,n-1]中,設計一個算法,以A[n-1]為參考量,將該 數組分為左右兩個部分 ,其中左半部分的元素值均小于等于A[n-1],右半部分的元素值均大于A[n-1],A[n-1]則位于這兩部分之間要求結果仍存放在數組A中

    快排劃分

    void divide(int A[], int n){int temp;int i = 0, j = n - 1;temp = A[i];A[i] = A[j];A[j] = temp;temp = A[i]; 相當與把n-1位置元素放到0位置上,仍以0位置元素為參考量while(i!=j){while(i<j && A[j]>temp) 后往前 找第一個比temp小的數j--;if(i<j){A[i] = A[j];i++;}while(i<j && A[i]<temp){ 前往后 找第一個比temp大的數j++if(i<j){A[j] = A[i];j--;}}A[i] = temp; }
  • 設計一個算法,對給定的一個整型m×nm×nm×n矩陣A,統計這個矩陣中具有下列特征的元素個數并輸出它們的坐標及數值:它們既是所在行中的最小值,又是所在列中的最小值;或者它們既是所在行中的最大值,又是所在列中的最大值。假設矩陣中元素各不相同,要求結果在處理過程中用輸出語句輸出

    三重循環
    第一重 第二重:行最小
    第三重:列最小

    void printmin(int A[][maxSize], int m, int n){int i, j, k, min, minIndex;int flag;for(i = 0; i<m; i++){min = A[i][0];minIndex = 0;for(j = 0; j<n; j++){if(A[i][j] < min){min = A[i][j];minIndex = j;}flag = 1;for(k = 0; k<m; k++){if(min>A[k][minIndex]){flag = 0;break;}}if(flag)cout<<min<<",["<<i<<","<<minIndex<<"]"<<" ";}cout<<end;} }void printmax(int A[][maxSize], int m, int n){int i, j, k, max, maxIndex;int flag;for(i = 0; i<m; i++){max = A[i][0];maxIndex = 0;for(j = 0; j<n; j++){if(A[i][j] > max){max = A[i][j];maxIndex = j;}flag = 1;for(k = 0; k<m; k++){if(max<A[k][maxIndex]){flag = 0;break;}}if(flag)cout<<max<<",["<<i<<","<<maxIndex<<"]"<<" ";}cout<<end;} }
  • 簡要介紹稀疏矩陣的三元組存儲結構特點,并實現稀疏矩陣的基本操作。

  • 給定稀疏矩陣A(int型),創建其三元組存儲結構B

    ??三元組存儲結構是一種順序結構,是順序表。表中每個結點對應稀疏矩陣的一個非零元素,其中包括3個字段,分別為該元素的值,行下標和列下標。
    ??用第0行的第1個元素存儲矩陣中非零元素的個數,第0行的第2個元素存儲矩陣的行數,第0行的第3個元素存儲矩陣的列數

    void create(int A[][maxSize], int m, int n, int B[][3]){int i, j;, k = 1;for(i = 0; i<m; i++){for(j = 0; j<n; j++){if(A[i][j] != 0){B[k][0] = A[i][j]; 值B[k][1] = i; 行標B[k][2] = j; 列標}}} }
  • 查找給定元素x是否在矩陣中。

    int search(int B[][3], int x){int i, t;t = B[0][0]; 非零元素個數i = 1;while(i<t && B[i][0]!=x){i++;}if(i<=t){return 1;}else{return 0;} }
  • 假設稀疏矩陣A采用三元組表示,編寫一個函數,計算其轉置矩陣B,要求B也采用三元組表示。

    兩重循環 colSize×elemSizecolSize × elemSizecolSize×elemSize

    void transpose(int A[][3], int B[][3]){B[0][0] = A[0][0];B[0][1] = A[0][2];B[0][2] = A[0][1];int index = 1;if(B[0][0]>0){for(int col = 0; col<B[0][1]; col++){for(int j = 1; j<=B[0][0]; j++){if(A[j][2] == col){B[index][0] = A[j][0];B[index][1] = A[j][2];B[index][2] = A[j][1];}}}} }
  • 假設稀疏矩陣A和B(兩矩陣行列數對應相等)都采用三元組表示,編寫一個函數,計算C=A+B,要求C也采用三元組表示,所有矩陣均為int型。

    注意 相加可能為0

    void add(int A[][3], int B[][3], int C[][3]){int i=1, j=1, k=1, m;while(i<=A[0][0] && j<=B[0][0]){if(A[i][1] == B[j][1]){if(A[i][2] < B[j][2]){C[k][0] = A[i][0];C[k][1] = A[i][1];C[k][2] = A[i][2];k++;i++;}else if(A[i][2] > B[j][2]){C[k][0] = B[j][0];C[k][1] = B[j][1];C[k][2] = B[j][2];k++;j++;}else{m = A[i][0] + B[j][0];if(m!=0){C[k][0] = m;C[k][1] = A[j][1];C[k][2] = A[j][2];k++;}i++;j++;}}else if(A[i][1] < B[j][1]){C[k][0] = A[i][0];C[k][1] = A[i][1];C[k][2] = A[i][2];k++;i++;}else{C[k][0] = B[j][0];C[k][1] = B[j][1];C[k][2] = B[j][2];k++;j++;}}while(i<=A[0][0]){C[k][0] = A[i][0];C[k][1] = A[i][1];C[k][2] = A[i][2];k++;i++;}while(j<=B[0][0]){C[k][0] = B[j][0];C[k][1] = B[j][1];C[k][2] = B[j][2];k++;j++;}C[0][0] = k - 1;C[0][1] = A[0][1];C[0][2] = A[0][2]; }
  • 假設稀疏矩陣A和B(分別為m×nm×nm×nn×kn×kn×k矩陣)采用三元組表示,編寫一個函數,計算C=A×BC=A×BC=A×B,要求CCC也是采用三元組表示的稀疏矩陣。

    int getValue(int D[][maxSize], int i, int j){int k = 1;while(k<=D[0][0] && (D[k][1] != i || D[k][2] != j))k++;if(k<=D[0][0])return D[k][0];elsereturn 0; } void mul(int A[][3], int B[][3], int C[][3], int m, int n, int k){int i, j, l, p=1, s;for(i = 0; i<m; i++){for(j = 0; j<k; j++){s = 0;for(l = 0; l<n; l++){s += getValue(A, i, l) * getValue(B, l, j);if(s != 0){C[p][0] = s;C[p][1] = i;C[p][2] = j;p++;}}}}C[0][0] = p-1;C[0][1] = m;C[0][2] = k; }
  • 總結

    提示:這里對文章進行總結:

    總結

    以上是生活随笔為你收集整理的天勤2022数据结构(四)数组、矩阵与广义表的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。