1. 程式人生 > >線性表再談之稀疏矩陣+

線性表再談之稀疏矩陣+

稀疏多項式

本來不打算對線性表進行多次闡述了。但是在這兩天的做題過程中發現了好多有關順序表的有趣的事兒。感覺突然還是很有必要再對其進行贅述一下的啦。以後的記錄都是自己的思考,而不是簡單的實現步驟的搬運工。

首先,對順序表相關的知識,做以總結,再對其談談有意思的事情。最後聊聊有關題目,我做了些思考,有一些新的看法。

線性表

有關演算法的事情在此簡述。

經過多次的練習發現,順序表在以後的資料結構中佔有著舉足輕重的作用。什麼叫線性表,簡單點就是一個數據集合,然後我們的問題聚集焦點不是資料質量,而是如何很好的儲存,組織資料結構,才是我們這裡需要注意的。

線性表中,有三大資料結構,其一就是順序表,接著就是單鏈表,最後是迴圈連結串列。

更詳細點來說,順序表可以擴充套件,加點限制就是棧和佇列,對吧,就是把順序表的一邊堵住,只能從一邊來對其進行進出的就是棧了,如果是儲存和取出都是沿著某個軸線進行的,就是佇列。你們講,是不是這個道理。

我們接著嘮嗑,對於單鏈表,人家也是存在可擴充套件空間的,就是沒有順序表那麼騷氣。單鏈表是可以有表頭結點,這樣的話,人家隨時就可以找到自己的flag來對自己的相對位置進行確定了,心裡當然就會有點B數了。然而,單鏈表還不服,覺得自己還能再牛B點,就…..首尾相連了,向貪吃蛇,自己把自己給game over的那種,但是,迴圈連結串列的優點不是自殺,可是通過首尾相連的優點找到自己的前驅。

最後呢,雙向連結串列、雙向迴圈連結串列呢,說到底,其本質還是單鏈表,對吧,前者是在單鏈表的基礎上,多了一個自己的大兄弟。這樣的話,訪問資料更加隨意,來回自如,出神入化。後者呢,在此基礎上加持,首尾相連,表中不存在NULL,反向遍歷查詢資料結構,emmm,當然,它太這樣搞,把自己也搞的太肥,多佔用了幾乎一半的指標儲存空間。

平時,實際應用哪個,我們自己心裡有點B數,揚長避短就好。

稀疏多項式的實現

說說理論吧,第一點就是我們即將要做什麼。

求取,求取稀疏多項式Pn(x)=c1x^e1+c2x^e2+…+cmx^em,其中em呈遞增狀態。

  • 標頭檔案定義
#define Status int //返回狀態限制
#define OK 1 //成功返回專案
#define Error 0 // 錯誤返回專案

/*定義多項式的匿名結構體*/
typedef struct{
    int coef;//係數
    int exp;//指數
}PolyTerm;

typedef struct{
    PolyTerm *data;
    int last;
}SqPoly;



Status PolyInit(SqPoly *);//初始化多項式

double PolySum(SqPoly *,double);//求多項式的值
  • .c檔案對其實現
#include <stdio.h>
#include <stdlib.h>
#include "PolyTerm.h"

//函式實現

Status PolyInit(SqPoly *l)
{
    int count;
    PolyTerm *p;
    printf("輸入多項式的項數:\n");
    scanf("%d",&(l->last));
    l->data=(PolyTerm *)malloc((l->last)*sizeof(PolyTerm));
    if(!l->data)return Error;
    p=l->data;
    for(count=0;count<l->last;count++)
    {
        printf("請輸入係數:\n");
        scanf("%d",&(p->coef));
        printf("請輸入指數:\n");
        scanf("%d",&(p->exp));
        p++;
    }
    return OK;
}

double PolySum(SqPoly *l,double x0)
{
    double Pn,x;
    int i,j;//建立雙層迴圈,外層控制n個項數,內層控制每一項的係數和未知數x指數的乘積。
    PolyTerm *p;
    p=l->data;
    for(i=0,Pn=0;i<l->last;i++,p++)
    {
        for(j=0,x=1;j<p->exp;j++)
        {
            Pn=Pn+p->coef*x;
            printf("當前值為%f.\n",Pn);
        }
        putchar('\n');
    }
    return Pn;
}

擴充套件的話,肯定可以對其進行擴充套件,怎麼擴充套件呢。你將會發現新的大陸。當然實現方法也是不難的,給粗一些思路,怎麼做,小小思考一波就好。

一、多項式可以合併吧?

二、多項式可以求導吧?

三、多項式可以相乘吧?

好啦,剩下的我不多說,繼續get吧。

相關推薦

線性稀疏矩陣+

稀疏多項式 本來不打算對線性表進行多次闡述了。但是在這兩天的做題過程中發現了好多有關順序表的有趣的事兒。感覺突然還是很有必要再對其進行贅述一下的啦。以後的記錄都是自己的思考,而不是簡單的實現步驟

數據結構線性思考

() exit 足夠 dem over 存儲空間 next stdio.h 就是 數據結構學起來妙不可言,賊有意思。 很久沒寫博客了,今天來一篇長的。前面寫的關於線性表的代碼和思路,經過我多次反復思考,又有了新的收獲,與大家一起分享。 1、線性表的定義 首先要明白什麽

資料結構(二)稀疏矩陣

稀疏矩陣是指矩陣中大多數元素為零的矩陣。從直觀上講,當非零元素個數低於總元素的30%,這樣的矩陣被稱為稀疏矩陣。 稀疏矩陣的表示方法 ex1 A={0,12,9,0,0,0,0 0,0,0,0,0,0,0 -3,0,0,0,0,14,0 0,0,24,0,0,0,0 0,18,0,0,0,0

C語言資料結構稀疏矩陣(一)

最近開始學習C語言的稀疏矩陣的一些知識,現在簡單的整理梳理一下知識脈絡,僅供自己總結學習,歡迎技術指正,拒絕盲噴。 1.首先先介紹一下關於稀疏矩陣的一些基礎知識,關於稀疏矩陣,一直都沒有過很清楚詳細的定義。簡單的說,在M*N的一個矩陣中,假設有t個元素不為0,那麼有計算公

矩陣的壓縮儲存(稀疏矩陣的十字連結串列儲存、稀疏矩陣的三元組行邏輯連結的順序儲存表示、稀疏矩陣的三元組順序儲存表示)

// c5-2.h 稀疏矩陣的三元組順序表儲存表示(見圖5.4) #define MAX_SIZE 100 // 非零元個數的最大值 struct Triple { int i,j; // 行下標,列下標 ElemType e; // 非零元素值 }; struct T

Navicat for MySQL無奈之下還是去安裝Navicat Premium

  不多說,直接上乾貨!   首先,Navicat for MySQL沒有檢視資料庫屬性。   其次,沒有這個功能多和強大,在走過一段彎路之後,果斷放棄Navicat for MySQL,而使用Navicat Premium 。 歡

雅克比矩陣---在feature learning中的作用

     上次談了雅克比矩陣以及雅克比行列式,這次我們繼續討論。既然是機器學習下面來談論,於是就要結合著機器學習的背景來談論了。      這裡涉及到的是無監督學習下的特徵學習的問題,主要是參考了文章:Contractive Auto-Encoders: Explicit

數據結構(二):線性的使用原則以及鏈的應用-稀疏矩陣的三元組表示

查找 triple 表的操作 結構 循環鏈表 循環 大於 ria 幫助 上一篇博文中主要總結線性表中的鏈式存儲結構實現,比方單向鏈表、循環鏈表。還通過對照鏈表和順序表的多項式的存儲表示。說明鏈表的長處。能夠參看上篇博文http://blog.csdn.net/lg125

資料結構線性—淺單鏈有頭結點和無頭節點

有頭結點的連結串列統一了演算法的實現,無頭節點減少了節點個數,但是隻有根據實際情況選用真正的有無頭節點連結串列 待續://程式碼實現 待續://程式碼實現 待續://程式碼實現 /*****************************************

資料結構(二):線性的使用原則以及連結串列的應用-稀疏矩陣的三元組表示

下面先對沒有介紹的連結串列中的雙鏈表進行介紹,並通過稀疏矩陣的三元組的鏈式結構來深入理解較為複雜的連結串列儲存結構。最後對三次博文所講述的內容進行梳理,以幫助在實際應用中選擇最合適的儲存結構:順序表

圖的儲存方式(鄰接矩陣,鄰接,前向星)

1.鄰接矩陣 1.存圖思想 使用一個矩陣來描述一個圖,對於矩陣的第i行第j列的值,表示編號為i的頂點到編號為j的頂點的權值。 2.程式碼實現 // 最大頂點數 const int V = 1000

用java實現Smtp發送郵件Socket編程

~~ 成功 剛才 還要 登陸 computer and ont sys 很多其它內容歡迎訪問個人站點 http://icodeyou.com 前幾天利用Socket實現了用java語言搭建webserver,全程下來應該會對Socket這

數據結構線性

鏈表 next size 實現 creat 隨機生成 結構 什麽 結點   線性表是最簡單最常用的一種數據結構,在生活中各個方面都有應用。   線性表的定義:線性表大多數情況下是除了第一個位置的數據元素只存在後繼元素,最後一個位置的數據元素只存在前驅元素外,所有數據元素都存

數據結構與算法----線性

還需要 序號 鏈式 apple 其他 前插 for循環 頭結點 end 01線性表 1.線性表的判斷方式就是元素有且只有一個直接前驅和直接後繼,元素可以為空,此時叫做空表 2.抽象數據類型標準格式   ADT 抽象數據類型名     DATA     數據

稀疏矩陣的加法(用十字鏈實現A=A+B)

稀疏矩陣 track ack _id eat dsm sca post 三元 描寫敘述: 輸入兩個稀疏矩陣A和B,用十字鏈表實現A=A+B,輸出它們相加的結果。 輸入: 第一行輸入四個正整數,各自是兩個矩陣的行m、列n、第一個矩陣的非零元素

數據結構線性代碼實現順序存儲,鏈式存儲,靜態鏈(選自大話數據結構)

新元素 error 失敗 尾插法 後繼 順序存儲 %d 帶表頭 tle 一,線性表順序存儲 #include <stdio.h> #include <string.h> #include <ctype.h> #i

線性的順序存儲結構順序類的實現_Java

私有成員變量 重新 概率 方法 可能 知識庫 ear rem csdn 在上一篇博文——線性表接口的實現_Java中,我們實現了線性表的接口,今天讓我們來實現線性表的順序存儲結構——順序表類。 首先讓我們來看下順序表的定義: 線性表的順序存儲是用一組連續的內存單元依次存放線

數據結構第三篇——線性的鏈式存儲單鏈

創建 int 超出 內容 存儲結構 cat com style 找到   線性表的鏈式存儲結構的特點是用一組任意的存儲單元來存儲線性表的數據元素,這些單元可以分散在內存中的任意位置上,其在物理上可以是連續的,也可以是不連續的。具有鏈式存儲結構的線性表稱為線性鏈表。   為了

數據結構第五篇——線性的鏈式存儲循環鏈

lan 雙向循環鏈表 delet alt 分享 函數 ima truct cli ?註:未經博主同意,不得轉載。   鏈表是另一種形式的鏈式存儲結構,它是線性鏈表的一種變形。在線性鏈表中,每個結點的指針都指向它的下一個結點,最後一個結點的指針域為空,表示鏈表的結束。若使最後

數據結構線性(鏈

位置 鏈表 ont 調用 void 刪除鏈表 個數 urn over 鏈表 1.鏈表的定義:線性表的鏈式存儲結構的特點是用一組任意的存儲單元存儲線性表的數據元素(這組存儲單元可以是 連續的,也可以是不連續的)。因此,為了表示每個數據元素ai與其直接後繼數據元素ai+