數據結構與算法Day3:緒論第三節抽象數據類型、算法及其描述

? ? ? ? 各位親愛的讀者,大家好!今天博主給大家帶來的內容是C語言數據結構與算法當中抽象數據類型、算法及其分析的相關知識。

一.抽象數據類型

? ? ? ? 抽象數據類型:指的是用戶進行軟件系統設計時從問題的數據模型中抽象出來的邏輯數據結構和邏輯數據結構上的運算。而不考慮計算機的具體存儲結構和運算的具體實現算法。

? ? ? ? 一個抽象數據類型可以用一個三元組(D,R,P)來表示,其中D是數據對象,R是D上的關系集,P是D中數據運算的基本運算集,基本描述格式如下:

ADT抽象數據類型名

{數據對象:數據對象的聲明;

?數據關系:數據關系的聲明;

?基本運算:基本運算的聲明;

}

?其中,基本運算的聲明格式為:

基本運算名(參數表):運算功能描述;

基本運算有兩種參數:值參數只為運算提供輸入值,引用參數以&打頭,除了可以提供輸入值外,還將返回運算結果。

抽象數據類型有兩個重要特征:數據抽象和數據封裝。

數據抽象:指用ADT描述程序處理的數據的特征、其所能完成的功能以及它和外部用戶的接口(即外界使用它的方法)。

數據封裝:指將程序的外部特征和其內部實現細節分離,并且對外部用戶隱藏其內部實現細節。?

抽象數據類型由數據的邏輯結構和運算定義兩部分組成,需要通過基本數據類型來實現。

二.算法及其描述

1.算法的定義

? ? ? ? 算法是對特定問題求解步驟的一種描述,它是指令的有限序列。應具有以下5個重要的特性

有窮性,確定性,可行性,有輸入,有輸出?

?注意:算法和程序是有區別的,程序是指使用某種計算機語言對一個算法的具體實現,即具體怎么做,而算法側重于對解決問題的方法描述,即要做什么。

2.算法設計的目標

? ? ? ? 算法設計應該滿足以下幾個目標:

正確性,可使用性,可讀性,健壯性,高效率與低存儲量需求

?其中健壯性要求算法具有很好的容錯性,即提供異常處理,能夠對不合理的數據進行檢查,不經常出現中斷或者死機現象。

3.算法的描述

? ? ? ? 在使用C/C++來描述算法的時候,一般格式如下

返回值? 算法對應的函數名(形參列表)

{

? ? ? ? 臨時變量的定義

? ? ? ? 實現由輸入參數到輸出參數的操作

? ? ? ? .......

}

其中花括號內的部分被稱為函數體?

設計算法的一般步驟如下:

(1)分析算法的功能

(2)確定算法有哪些輸入,將這些輸入設計成輸入型參數;確定算法有哪些輸出,將這些輸出設計為輸出型參數

(3)設計函數體,完成從輸入到輸出的操作過程

?而在設計輸出型參數的時候,我們會常常用到一種引用運算符“&”,當引用建立時,程序用另一個已定義的變量(目標變量)的名字對其初始化,此時引用變量作為目標變量的別名使用,對引用變量的改動實際上是對目標變量的改動,我們可以用以下代碼來進行理解

void swap(int &x,int &y)
{int tmp=x;x=y;y=tmp;    
}
int &x=a;
int &y=b;//執行上述語句后,形參與實參的匹配如下
int &x=a;//x為a的引用
int &y=b;//y為b的引用

這樣子,a與x共享存儲空間,b與y共享存儲空間,因此執行函數后a和b的值都發生了交換。

學以致用,我們可以用這種辦法來設計一個算法,求一元二次方程的根

int solution(double a,double b,double c,double &x1,double &x2)
{double d;d=b*b-4*a*c;if(d>0){x1=(-b+sqrt(d))/(2*a);x2=(-b-sqrt(d))/(2*a);return 2;}else if(d==0){x1=(-b)/(2*a);return 1;}elsereturn 0;
}

三.今日總結

? ? ? ? 在今天的學習中,博主給大家帶來了C語言數據結構與算法中的抽象數據類型與算法描述的相關知識,在下一次的學習中,博主將會給大家帶來算法分析的相關知識,在這里感謝大家的關注與支持!歡迎在評論區分享屬于你的看法與見解,博主看到后會第一時間回復!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/82666.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/82666.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/82666.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ABC 350

E. Toward 0 從大規模向小規模,用記憶化搜索,只需要分好類,有哪幾種搜法。 期望實際上就是把每一種情況的答案答案都算出來,然后取個平均值 ,并不困難。 f ( i ) [ f ( i / 6 ) f ( i / 5 ) f ( i / 4 ) f ( i / 3…

多相電機驅動控制學習(1)——基于雙dq坐標系的六相/雙三相PMSM驅動控制

1.引言 最近想學習一下多相電機。想從相對簡單的開始吧,先學一個基于雙dq的六相/雙三相PMSM驅動控制(考慮中性點隔離以及不隔離的情況,即考慮是否有零序電流回路),后面有時間再學學基于VSD的六相/雙三相PMSM驅動控制。…

筆記: 在WPF中ContentElement 和 UIElement 的主要區別

一、目的:簡要姐掃在WPF中ContentElement 和 UIElement 的主要區別 ContentElement 和 UIElement 是 WPF 中的兩個基類,它們在功能和用途上有顯著的區別。 二、主要區別 ContentElement 主要特點: ? 沒有視覺表示: ContentElement 本身不直接渲染任…

Android-Glide學習總結

Glide三級緩存? 面試官 我看你簡歷里提到熟悉 Glide,能聊聊它的緩存機制嗎?比如加載圖片的時候,Glide 是怎么決定從內存還是磁盤讀取的? ?你? 哦,Glide 的緩存機制是吧?嗯,這個我之前在做項…

安卓證書的申請(保姆級圖文)

目錄 確認安裝了對應版本的jdk生成證書文件1. -genkey2. -alias test_certalias3. -keyalg RSA4. -keysize 20485. -validity 365006. -keystore test_cert.keystore 查看證書內容總結 歡迎關注 『發現你走遠了』 博客,持續更新中 歡迎關注 『發現你走遠了』 博客&a…

Unity性能優化

SetPass calls表示在當前攝像機的渲染過程中,Unity切換著色器通道(Shader Pass)來渲染游戲對象的次數。一個著色器(Shader)可以包含多個著色器通道,每個著色器通道可以通過不同的方式來渲染游戲對象。但每次…

Python+AI Agent:解鎖MCP Servers的智能潛力

💝💝💝歡迎蒞臨我的博客,很高興能夠在這里和您見面!希望您在這里可以感受到一份輕松愉快的氛圍,不僅可以獲得有趣的內容和知識,也可以暢所欲言、分享您的想法和見解。 推薦:「storms…

uni-app學習筆記十五-vue3頁面生命周期(一)

頁面生命周期概覽 vue3頁面生命周期如下圖所示: onLoad 此時頁面還未顯示,沒有開始進入的轉場動畫,頁面dom還不存在。 所以這里不能直接操作dom(可以修改data,因為vue框架會等待dom準備后再更新界面)&am…

【排序算法】快速排序詳解--附詳細流程代碼

快速排序算法 介紹 快速排序(Quick Sort)是一種高效的分治排序算法,由英國計算機科學家 Tony Hoare 于 1960 年提出。它是實際應用中最常用的排序算法之一。快速排序的基本思想是:選擇一個"基準"(pivot&am…

【監控】Prometheus中的告警機制介紹

prometheus實戰之三:告警規則_驗證prometheus告警規則-CSDN博客 Prometheus是一款開源的系統監控和告警工具,其告警功能是保障系統穩定運行的重要部分。以下將從告警的整體架構、核心概念、規則配置以及具體的通知流程等方面對Prometheus中的告警進行介…

53、用例(Use Case)詳解

1. 定義與核心概念 用例(Use Case) 是軟件工程中用于描述系統功能需求的核心工具,它通過結構化的方式定義系統與外部參與者(用戶、其他系統)之間的交互行為,以實現具體的業務目標。用例強調從用戶視角出發…

對比Redis與向量數據庫(如Milvus)在AI中的應用

對比Redis與向量數據庫(如Milvus)在AI中的應用 在AI架構中,緩存系統的設計直接影響響應速度、資源成本以及推理路徑是否高效。而面對不同的AI業務訴求,選用什么類型的緩存系統、如何搭配,往往是系統架構設計中必須深入…

Oracle 的 MOVE 操作是否重建表?

Oracle 的 MOVE 操作是否重建表? Oracle 的 ALTER TABLE ... MOVE 操作實質上是重建表的物理存儲結構,但保留表的邏輯定義不變。 MOVE 操作的本質 物理重建: 創建新的數據段(物理存儲結構)將原表數據按順序重新插入到…

數據庫中表的設計規范

表的結構 列:由多個字段構成,每個字段存儲單一數據項,列的先后順序對表沒有影響 行:記錄,一個表中不能存在完全相同的兩行,行的順序對表沒有影響 主鍵:primary key 表中的一列或多列組合起來…

[學習]C語言指針函數與函數指針詳解(代碼示例)

C語言指針函數與函數指針詳解 文章目錄 C語言指針函數與函數指針詳解一、引言二、指針函數(函數返回指針)定義與語法典型應用場景注意事項 三、函數指針(指向函數的指針)定義與聲明初始化與調用賦值方式調用語法 高級應用回調函數…

Python 實現桶排序詳解

1. 核心原理 桶排序是一種非比較型排序算法,通過將數據分配到多個“桶”中,每個桶單獨排序后再合并。其核心步驟包括: 分桶:根據元素的范圍或分布,將數據分配到有限數量的桶中。桶內排序:對每個非空桶內的…

brep2seq 論文筆記

Brep2Seq: a dataset and hierarchical deep learning network for reconstruction and generation of computer-aided design models | Journal of Computational Design and Engineering | Oxford Academic 這段文本描述了一個多頭自注意力機制(MultiHead Attenti…

在 LangGraph 中集成 Mem0 記憶系統教程

簡介 LangGraph 是一個強大的對話流程編排框架,而 Mem0 則是一個高效的記憶系統。本教程將介紹如何將兩者結合,創建一個具有記憶能力的客服助手系統。 環境準備 首先安裝必要的依賴: pip install langgraph mem0 langchain openai基礎配置…

ceph 報錯 full ratio(s) out of order

full ratio(s) out of order你遇到的錯誤信息: full ratio(s) out of order說明你設置的 OSD 空間使用閾值之間的數值順序不正確,即: nearfull_ratio ≤ backfillfull_ratio ≤ full_ratio ≤ osd_failsafe_full_ratio如果它們的關系不滿足這個順序,Ceph 就會報這個錯誤。…

NB-IoT NPUSCH(三)-資源映射

資源映射單獨做一章節,是因為NPUSCH的資源映射比較復雜。與LTE不同,為了提高數據傳輸的質量,NB-IoT的數據會有重復傳輸。NPUSCH一開始生成的TBS只與子載波個數、RU個數有關,與重復次數沒有關系。初始產生的數據為 個時隙&#xff…