資料結構:線性表的定義和操作

一、線性表定義:線性表是一個線性結構,它是一個含有n≥0個結點的有限序列,其中的結點,有且僅有一個開始結點(第一元素)沒有前驅但有一個後繼結點,有且僅有一個終端結點(最後節點)沒有後繼但有一個前驅結點,其它的結點都有且僅有一個前驅和一個後繼結點。一般地,一個線性表可以表示成一個線性序列:k1,k2,…,kn,其中k1是開始結點,kn是終端結點。上述定義可以用下列映像記憶如一對有序序列(A,B,C,............Z)圖表示為(^,A(第一節點,沒有前驅但有一個後繼結點

演算法:一種可擴充的運算式解析及計算方法

概述在應用軟體開發領域,對錶達式計算的應用有非常廣泛的應用。例如,在報表開發中,經常為 使用者提供公式輸入功能,從而實現更靈活的報表匯總;工作流程應用軟體中,經常利用邏輯條件進行動態配置, 從而提供更加靈活的流程配置;另外,在某些 UI 開發中,需要通過某個屬性的運算式計算結果來動態控制 UI 組件的顯示。所有這些應用都可以歸結為一個通用模型,即運算式的解析以及計算。本文旨在提供一種可 擴充的運算式解析及其計算方法。運算式解析的一般條件及因素本文所講的運算式是一種以一

演算法題:中位元計算

中位元(Median)1、定義:一組資料按從小到大(或從大到小)的順序依次排列,處在中間位置的一個數(或最中間兩個資料的平均數,注意:和眾數不同,中位元不一定在這組資料中)。註:當個數為基數時,取最中間位置的數;當個數為偶數時,取最中間兩個數的平均數。2、從小到大排序,可以先用冒泡排序,然後取中位元,那麼先看下冒泡排序演算法,代碼如下:public static void BubbleSort(this IList<double> array){ if (array ==

演算法整合後的圖形繪製

某天下班回來後,習慣性的開啟部落格園,看看首頁有沒有感興趣的文章。在 不重複隨機數列產生演算法 這 篇博文中,發現作者的思路不錯。莫名其妙的突然想到如何擷取隨機顏色的演算法以及以圖形的方式顯示出來, 那時候剛好12點了,想睡又睡不著,連著猛寫了2個小時代碼,大概模型出來了。隨後的幾天,將近期想到的 演算法綜合起來,因此就有了這麼一篇文章。這篇文章主要有如下3個簡單的算

演算法題:樣本方差、樣本標準差、方差、標準方差與加權平均

樣本方差與樣本標準差1、定義:樣本中各資料與樣本平均數的差的平方和的平均數叫做樣本方差 ;樣本方差的算術平方根叫做樣本標準差。註:樣本方差和樣本標準差都是衡量一個樣本波動大小的 量,樣本方差或樣本標準差越大,樣本資料的波動就越大。標準差與標準方差1、定義:方差 是各個資料與平均數之差的平方和的平均數。在機率論和數理統計中,方差用來度量隨機變數和其數學期望( 即均值)之間的偏離程度。標準差在機率統計中最常使用作為統計分布程度上的測量。標準差定義為方差的算

演算法:UVA 473

題意有n首歌,每首時間長度Ti,要把這n首歌裝進m個光碟片裡面,每個光碟片最多能存的時間長度為t要求這些歌在光碟片裡面要按照所給歌的先後順序存入,不能改變前後順序。例如有4首歌,按順序給出他們的時間長度:1,2,3,4.裝入一個容量時間長度為10的光碟片裡, 可以是1,2,3或者1,3,4等,但是不能2,1,3問最多能存幾首歌?思路:用f[i][j][k]表示前i首歌,用j個光碟片,且第j個光碟片用了k的時間,可存的最多首歌當枚舉到第i首歌,用到第j個光碟片時,有決策以及狀態轉移:1.

演算法:uva-10304 Optimal Binary Search Tree(區間dp)

題意給一個序列即可 S = (e1,e2,...,en),且e1<e2<..<en.要把這些序列構成一個二叉搜尋 樹。二叉搜尋樹是具有遞迴性質的,且若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的 值; 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值。因為在實際應用中,被訪 問頻率越高的元素,就應該越接近根節點,這樣才能更加節省尋找時間。每個元素有一個訪問頻率f(ei) ,當元素位於深度為k的地方,那麼花費cost(ei) =

演算法:uva-1427 Parade (單調隊列最佳化dp)

題意F城由n+1個橫向路和m+1個豎向路組成。你的任務是從最南邊的路走到最北邊的路,使得走過 的路上的高興值和最大(注意,一段路上的高興值可以是負數)。同一段路不能經過兩次,且不能從北往南 走。另外,在每條橫向路上所花的時間不能超過k。思路這題在uva和LA上又是不能評測, 於 是在hdu和poj上評測了這題這題狀態比較容易想到, f(i, j)表示走到第i行第j點的最大價值對於 每一點,可以從下一行的走上來,也可以從左邊走過來,也可以從右邊走過來設L(i, j)表示第i行從左邊

經典演算法(15) “一步千裡”之數組找數

首先看看題目要求(題目來源:http://weibo.com/lirenchen,特此鳴謝):有這樣一個數組A, 大小為n,相鄰元素差的絕對值都是1。如:A={4,5,6,5,6,7,8,9,10,9}。現在,給定A和目標整數t,請找到t 在A中的位置。除了依次遍曆,還有更好的方法嗎?這道題目的解法非常有趣。數組第一個數 為array[0], 要找的數為y,設t = abs(y - array[0])。由於每個相鄰的數字之差的絕對值為1。故第t個位

經典演算法(12) 數組中只出現1次的兩個數字(百度面試題)

首先來看題目要求:在一個數組中除兩個數字只出現1次外,其它數字都出現了2次, 要求儘快找 出這兩個數字。考慮下這個題目的簡化版——數組中除一個數字只出現1次外,其它數字都成對出現 ,要求儘快找出這個數字。這個題目在之前的《位操作基礎篇之位操作全面總結》中的“位操作趣味應用” 中就已經給出解答了。根據異或運算的特點,直接異或一次就可以找出這個數字。現在數組中有兩個

經典演算法(9) 從歸併排序到數列的逆序數對(微軟筆試題)

首先來看看原題微軟2010年筆試題在一個排列中,如果一對數的前後位置與大小順序相反 ,即前面的數大於後面的數,那麼它們就稱為一個逆序數對。一個排列中逆序的總數就稱為這個排列的逆序 數。如{2,4,3,1}中,2和1,4和3,4和1,3和1是逆序數對,因此整個數組的逆序數對個數為4,現在給定 一數組,要求統計出該數組的逆序數對個數。計算數列的逆序數對個數最簡單的方便就最從前向後依 次統計每個數字與它後面的數字是否能組成逆序數對。代碼如下:#include <stdio.h> int

經典演算法(8) MoreWindows白話經典演算法之七大排序總結篇

在我的部落格對冒泡排序,直接插入排序,直接選擇排序,希爾排序,歸併排序,快速排序和堆排序這七種 常用的排序方法進行了詳細的講解,並做成了電子書以供大家下載。下載地址為: http://download.csdn.net/detail/morewindows/4443208。有網友提議到 這本《MoreWindows白話經典演算法之七大排序》電子書講解細緻用來平時學習是非常好的,但是頁數有22頁, 不太合適做面試前的複習資料。因此在這裡將這七種常用的排序方法進行下總結,以便大家更好的複習這些

經典演算法(4) 直接選擇排序及交換二個資料的正確實現

直接選擇排序和直接插入排序類似,都將資料分為有序區和無序區,所不同的是直接播放排序是將無序區 的第一個元素直接插入到有序區以形成一個更大的有序區,而直接選擇排序是從無序區選一個最小的元素直 接放到有序區的最後。設數組為a[0…n-1]。1. 初始時,數組全為無序區為a[0..n-1]。令 i=02. 在無序區a[i…n-1]中選取一個最小的元素,將其與a[i]交換。交換之後a[0…i]就形成了一個 有序區。3.

演算法:ural 1018 Binary Apple Tree(樹形dp | 經典)

題意給一棵邊有權值的二叉樹,節點編號為1~n,1是根節點。求砍掉一些邊,只保留q條邊,這q條邊 構成的子樹的根節點要求是1,問這顆子樹的最大權值是多少?思路非常經典的一道樹形dp題 ,根據我目前做過的題來看,有多道都是由這題衍生出來的。f(i, j) 表示子樹i,保留j個節點(注意是 節點)的最大權值。每條邊的權值,把它看作是串連的兩個節點中的兒子節點的權值。那麼,就可以對所 有i的子樹做分組背包,即每個子樹可以選擇1,2,...j-1條邊分配給它。狀態轉移為:f(i, j) = max{

演算法:poj 4045 Power Station (樹形dp)

題意n個城市節點構成的一棵樹,節點i到節點j的電量損耗為 I*I*R*(i到j的路徑所含邊數),現 在要在某個結點上修建一個供電站,使得這個結點到所有其它節點的總損耗量最小。思路典型的樹形dp可以先用一次dfs求出每一點的子樹結點個數num[u],以及每一點到它子樹所有結點的總 距離f[u][0];然後再用一次dfs,推出每個結點到除去它子樹部分的結點總距離f[u][1]。f[v][1] = (f[u][0]-f[v][0]-num[v]) + f[u][1] + n - num[v];代碼/*

演算法:poj 3345 Bribing FIPA (樹形背包dp | 輸入坑)

題意有n個國家,你要擷取m個國家的支援,擷取第i個國家的支援就要給cost[i]的價錢其中有 一些國家是老大和小弟的關係,也就是說,如果你獲得了某個老大國家的支援,那麼這個國家的所有小弟 (包括小弟的小弟...遞迴下去)都會無償免費支援你。問最少的花費可以得到m個國家的支援思路這題還是比較好想的樹形dp, 不過輸入有些麻煩, 一開始以為每組範例結束都是'#',結果一直RE,後來發現最後一組才是 '#'...國家由於是直接給名字的,所以我用map<string,

演算法:poj 3140 Contestants Division(樹形dp? dfs計數+枚舉)

題目給n個節點的帶權樹,刪掉其中一邊,就會變成兩顆子樹,求刪去某條邊使得這這兩顆子樹的 權值之差的絕對值最小。思路直接dfs一次,計算所有子樹的權值總和tot[i]如果刪掉一條邊 (v, fa),fa是v的父親節點,那麼v子樹權值總和為tot[v],顯然另一棵子樹的權值總和就是sum-tot[v] ,最總取最小絕對值即可。這題要注意用long long其實就是dfs+枚舉,想不通為什麼有人會 把這題列為樹形dp?代碼/**=====================================

演算法:poj 2486 Apple Tree (樹形背包dp)

題意給一個n個節點的樹,節點編號為1~n, 根節點為1, 每個節點有一個權值。從根節點出發,走不超過k步,問最多可以擷取多少權值?思路因為和uva-1407 caves有點相似,所以沒想很久就AC了,但因為初始化問題WA了兩次f(i, j, 0): 表示子樹i,走j次,最終不用回到i點擷取的最大總權值f(i, j, 1): 表示子樹i,走j次,最終一定要回到i點擷取的最大總權值 f(i, j, 1) = min{ min{ f(i, j-k, 1) + f(v, k-2, 1) | 2<=

演算法:poj 2378 Tree Cutting(樹形dp)

題意給一顆n個結點的樹,節點編號為1~n,把刪除一個節點之後,剩下的分支中節點數量最多的數 量不大於總數量一半的編號全部按順序輸出思路和poj-3107 GodFather完全一樣,只是輸出不一樣。 改為<=n/2的就輸出即可。代碼/**=====================================================* This is a solution for ACM/ICPC problem** @source : poj-2378 Tree

演算法:poj 1947 Rebuilding Roads (樹形背包dp)

題意給一棵樹,問最少刪掉幾條邊.使得剩下的子樹中有節點個數為p個的思路幾天前就看了 這題, 但是沒什麼想法,之後每天都有去想一下, 直到今天, 在我對自己方法還有懷疑的情況下,竟然AC了 ..f(i, j) 表示子樹i,保留j個節點的最少刪邊次數, 注意,這裡保留的j個節點的子樹,是指根節點為i的且有j個節點的子樹.這樣理解的話, 狀態轉移就容易想多了.對於子樹i, 如果只保留1個節 點,那麼串連它所有兒子節點的邊都要刪掉,所以可以初始化 f(i, 1) = 節點i的兒子個數f(i, j),

總頁數: 61357 1 .... 25585 25586 25587 25588 25589 .... 61357 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.