国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【數(shù)據(jù)結構與算法】 完成用十字鏈表存儲的稀疏矩陣的加法運算

這篇具有很好參考價值的文章主要介紹了【數(shù)據(jù)結構與算法】 完成用十字鏈表存儲的稀疏矩陣的加法運算。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

題目

??Qestion:?完成用十字鏈表存儲的稀疏矩陣的加法運算。


主要思路

  1. 獲取兩個稀疏矩陣總有多少個非零元素,記作cnt。
  2. cnt 不為零時一直循環(huán),每循環(huán)一次i++,也就是行循環(huán),每循環(huán)一次就轉移至下一行。
  3. 先從第一行開始循環(huán),使得兩個工作指針pq分別指向兩個稀疏矩陣的第一行第一個非零元。對當前行p、q有無元素個數(shù)進行判斷,下面是會遇到的四種情況:
    • p當前行無元素并且q有元素:則將賦值給p,也就是q當前行的元素全部都接在了p之后
    • p、q當前行均無元素:則跳出當前循環(huán),令i+1,進入下一行也就是下一個循環(huán)
    • p當前行有元素、q無元素:則跳出當前循環(huán),轉移至下行
    • p、q當前行均有元素:則進行下述循環(huán)。

思路偽代碼

【數(shù)據(jù)結構與算法】 完成用十字鏈表存儲的稀疏矩陣的加法運算,算法與數(shù)據(jù)結構,C/C++,鏈表,矩陣,數(shù)據(jù)結構


完整代碼

// 完成用十字鏈表存儲的稀疏矩陣的加法運算。
typedef struct OLNode
{
    int i;
    int j;
    int e;
    struct OLNode *right;
    struct OLNode *down;
} OLNode, *OLink;

typedef struct
{
    OLink *rhead;
    OLink *chead;
    int mu; // 行數(shù)
    int nu; // 列數(shù)
    int tu;
} CrossList;

void addArray(CrossList &a, CrossList b)
{
    int cnt = a.tu + b.tu; // 統(tǒng)計一共有多少個非零數(shù)
    int i = 1;
    // int j1, j2;
    while (cnt > 0) // 當還有數(shù)沒加時繼續(xù)循環(huán)
    {
        OLink p = a.rhead[i];
        OLink q = b.rhead[i];

        if (!p && q) // p當前行無元素,q有元素,則將q賦給p
            p = q;
        if (!p && !q) // p、q當前行均無元素,則跳轉下一行
            continue;
        if (p && !q) // p有元素,q無元素,則跳轉下一行
            continue;
        if (p && q) // p、q均有元素,則進行加法
        {
            do
            {
                if (p->j < q->j)
                {
                    cnt--;        // cnt減一
                    if (p->right) // p的右元素不為空
                    {
                        p = p->right; // 工作指針p向右移
                    }
                    else
                    {
                        p->right = q; // q當前行的所有元素接到p的后面
                    }
                }
                else if (p->j == q->j)
                {
                    p->e = p->e + q->e;
                    p = p->right;
                    q = q->right;  // p、q同時向右移動
                    cnt = cnt - 2; // cnt減二
                }
                else
                {
                    OLink tmp1 = p;
                    p = q;                 // a.rhead[i]指向q的節(jié)點
                    OLink tmp2 = q->right; // 將q的右節(jié)點的指針保存
                    q->right = tmp1;       // q的右指針指向p
                    cnt--;
                    if (tmp2) // 若q的右節(jié)點不為空
                    {
                        q = tmp2; // 工作指針q向右移
                    }
                }
            } while (!p->right); // 當工作指針為當前行的最后一個元素時退出循環(huán)
        }

        i++; // 轉移到下一行
    }
}

代碼圖片

【數(shù)據(jù)結構與算法】 完成用十字鏈表存儲的稀疏矩陣的加法運算,算法與數(shù)據(jù)結構,C/C++,鏈表,矩陣,數(shù)據(jù)結構


結束語

??因為是算法小菜,所以提供的方法和思路可能不是很好,請多多包涵~如果有疑問歡迎大家留言討論,你如果覺得這篇文章對你有幫助可以給我一個免費的贊嗎?我們之間的交流是我最大的動力!文章來源地址http://www.zghlxwxcb.cn/news/detail-539219.html

到了這里,關于【數(shù)據(jù)結構與算法】 完成用十字鏈表存儲的稀疏矩陣的加法運算的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【數(shù)據(jù)結構】數(shù)組和字符串(十):稀疏矩陣的鏈接存儲:十字鏈表的矩陣操作(加法、乘法、轉置)

    【數(shù)據(jù)結構】數(shù)組和字符串(十):稀疏矩陣的鏈接存儲:十字鏈表的矩陣操作(加法、乘法、轉置)

    【數(shù)據(jù)結構】數(shù)組和字符串(一):矩陣的數(shù)組表示 ??矩陣是以按行優(yōu)先次序將所有矩陣元素存放在一個一維數(shù)組中。但是對于特殊矩陣,如對稱矩陣、三角矩陣、對角矩陣和稀疏矩陣等, 如果用這種方式存儲,會出現(xiàn)大量存儲空間存放重復信息或零元素的情況,這樣會造

    2024年02月08日
    瀏覽(27)
  • 【數(shù)據(jù)結構】數(shù)組和字符串(八):稀疏矩陣的鏈接存儲:十字鏈表的創(chuàng)建、插入元素、遍歷打印(按行、按列、打印矩陣)、銷毀

    【數(shù)據(jù)結構】數(shù)組和字符串(八):稀疏矩陣的鏈接存儲:十字鏈表的創(chuàng)建、插入元素、遍歷打?。ò葱小戳?、打印矩陣)、銷毀

    【數(shù)據(jù)結構】數(shù)組和字符串(一):矩陣的數(shù)組表示 ??矩陣是以按行優(yōu)先次序將所有矩陣元素存放在一個一維數(shù)組中。但是對于特殊矩陣,如對稱矩陣、三角矩陣、對角矩陣和稀疏矩陣等, 如果用這種方式存儲,會出現(xiàn)大量存儲空間存放重復信息或零元素的情況,這樣會造

    2024年02月06日
    瀏覽(25)
  • 數(shù)據(jù)結構——十字鏈表

    數(shù)據(jù)結構——十字鏈表

    什么是十字鏈表: 十字鏈表(Orthogonal List) 是有向圖的另一種鏈式存儲結構。該結構可以看成是將有向圖的鄰接表和逆鄰接表結合起來得到的。用十字鏈表來存儲有向圖,可以達到高效的存取效果。同時,代碼的可讀性也會得到提升。 了解十字鏈表: ? ? ? ? 我們來看下面這

    2024年02月05日
    瀏覽(26)
  • 【數(shù)據(jù)結構】十字鏈表的畫法

    【數(shù)據(jù)結構】十字鏈表的畫法

    有向邊又稱為弧 假設頂點 v 指向 w,那么 w 稱為弧頭,v 稱為弧尾 頂點節(jié)點采用順序存儲 頂點節(jié)點 data:存放頂點的信息 firstin:指向以該節(jié)點為終點(弧頭)的弧節(jié)點 firstout:指向以該節(jié)點為起點(弧尾)的弧節(jié)點 弧節(jié)點 tailvex:起點(弧尾)在數(shù)組中的索引 headvex:終點(

    2024年02月11日
    瀏覽(22)
  • 圖的存儲結構-十字鏈表

    圖的存儲結構-十字鏈表

    十字鏈表 (Orthogonal List)是有向圖的一種鏈式存儲結構??梢钥闯墒菍⒂邢驁D的鄰接表和逆鄰接表結合起來得到的一種鏈表。在十字鏈表中,對應于有向圖中每一條弧有一個結點,對應于每個頂點也有一個結點。 頂點結點 弧結點 十字鏈表結點: 在弧結點中有5個域:其中尾

    2024年02月05日
    瀏覽(24)
  • 圖的存儲結構——十字鏈表

    圖的存儲結構——十字鏈表

    目錄 引入(為何存在?) 數(shù)據(jù)結構分析 十字鏈表的示意圖: 代碼實現(xiàn)(以有向網為例,創(chuàng)建十字鏈表) ? ? ? ? 數(shù)據(jù)結構部分: ? ? ? ?算法實現(xiàn)部分: ????????測試部分:(以圖8.14為例) 時間與空間復雜度分析分析: ? ? ? ? 回憶鄰接矩陣與鄰接表的存儲結構,它

    2024年02月04日
    瀏覽(21)
  • 數(shù)據(jù)結構(4) 鏈表(鏈式存儲)

    數(shù)據(jù)結構(4) 鏈表(鏈式存儲)

    順序表優(yōu)點:可隨機存取,存儲密度高,缺點:要求大片連續(xù)空間,改變容量不方便。 單鏈表優(yōu)點:不要求大片連續(xù)空間,改變容量方便,缺點:不可隨機存取,要耗費一定空間存放指針。 定義單鏈表的代碼: 定義數(shù)據(jù)領和指針域 定義一個新節(jié)點 定義typedef來縮短函數(shù)書寫

    2024年02月22日
    瀏覽(22)
  • 【數(shù)據(jù)結構與算法】鏈表

    【數(shù)據(jù)結構與算法】鏈表

    對于順序表存在一些缺陷: 中間/頭部的插入刪除,時間復雜度為O(N) 。頭部插入需要挪動后面的元素 增容需要申請新空間,拷貝數(shù)據(jù),釋放舊空間。會有不小的消耗。 增容一般是呈2倍的增長,勢必會有一定的空間浪費。例如當前容量為100,滿了以后增容到200,我們再繼續(xù)插

    2023年04月09日
    瀏覽(26)
  • 【算法與數(shù)據(jù)結構】鏈表

    【算法與數(shù)據(jù)結構】鏈表

    鏈表是由一串節(jié)點串聯(lián)在一起的,鏈表的每個節(jié)點存儲兩個信息:數(shù)據(jù)+下一個節(jié)點的地址 分清楚兩個概念:什么是內存內部,什么是程序內部 內存內部: 信息存儲在內存空間里的 程序內部: 通過什么信息,去操作結構 如果想操作鏈表的話,我們依靠的是程序內部的信息,

    2024年02月03日
    瀏覽(27)
  • 02-鏈表 (數(shù)據(jù)結構和算法)

    3.1 鏈表的基本概念 前面我們在學習順序表時,線性表的順序存儲結構的特點是邏輯關系上相鄰的兩個數(shù)據(jù)元素在物理位置上也是相鄰的。我們會發(fā)現(xiàn)雖然順序表的查詢很快,時間復雜度為O(1),但是增刪的效率是比較低的,因為每一次增刪操作都伴隨著大量的數(shù)據(jù)元素移動。為

    2024年02月16日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包