C語言進階之路-數據結構篇

目錄

??????一、學習目標

二、數據結構

1.基本概念

線性關系:

非線性關系:

存儲形式

2. 算法分析

2.1 時間復雜度

2.2 空間復雜度

2.3 時空復雜度互換

總結


一、學習目標

  • 了解數據結構的基本概念
  • 了解算法的分析方法

? ? ? ??

二、數據結構

1.基本概念

數據結構是一門研究如何有效組織數據,并提高數據處理效率的學科。通過研究各種數據內部邏輯關系,使用某種特定的存儲形式,并在此基礎上對數據實施各種操作(增刪改查),這些工作被稱為稱為廣義上的算法

  • 邏輯結構
    • 指數據之間的內在關系。通常有集合、線性表、樹、圖等常見的邏輯結構
    • 邏輯結構是數據之間本身的屬性,跟我們怎么處理它們無關。

線性關系:

????????各個元素之間是一種一對一的關系,比如圖書館中的書架的書,除了首尾兩本書之外,其余的任意一本書的編號假設是N,都有且僅有一個直接前驅節點N-1,有且僅有一個直接后繼節點N+1。這種關系就是典型的線性邏輯。

非線性關系:

????????與上述線性關系的表述不同,如果各個元素之間不是嚴格一對一的關系,則被稱為非線性關系,比如家族中的各個成員、不同城市間的交通道路等,對于它們中間的某個元素,都可能有不止一個元素與之關聯。這種關系是典型的非線性邏輯

  • 存儲形式

    • 數據的存儲方式。比如順序存儲鏈式存儲等。
    • 不同的存儲形式對最終數據的處理效率通常有很大的影響
    • 邏輯結構與存儲形式無必然聯系

2. 算法分析

算法分析是指算法在正確的情況下,對其優劣的分析。一個好的算法通常是指:

  1. 算法對應的程序所耗時間少
  2. 算法對應的程序所耗存儲空間少
  3. 算法結構性好、易讀、易移植和調試

????????數據結構與算法的本質任務,是提高程序的時間空間效率,簡單講就是讓程序的執行速度越快越好,所需內存空間越少越好。雖然在很多情況下,程序的時空特性是相互制約的,就像魚和熊掌不可兼得,但我們可以根據程序實際解決問題的側重點,去平衡時間和空間的對性能的消耗。

2.1 時間復雜度

????????一般而言,時間復雜度并不考察一段代碼運行所需要的絕對時間,因為不同的計算機的硬件參數不同,考察絕對時間沒有意義。時間復雜度一般指的是代碼的語句執行總次數,稱為語句頻度。比如:

void counting(int n)
{for(int i=0; i<n; i++){printf("本行語句將會出現n次\n");for(int j=0; j<n; j++){printf("本行語句將會出現n*n次\n");}}
}

????????不同算法的時間復雜度相差很大,如下圖所示,隨著所處理的問題規模的增大,不同時間復雜度的程序所需要的時間有天壤之別

2.2 空間復雜度

????????空間復雜度的概念更簡單一點,就是一段程序運行時所需的內存字節量

2.3 時空復雜度互換

????????一段程序的性能指標,既要運行快速,又要節省內存,而通常這兩者又是相互制約的,很難兼得。因此在實際解決問題時,會根據需要側重一方,犧牲另一方

總結

????????本文簡述了數據結構的基本概念和算法分析,算是新副本的介紹,后續會寫數據結構的順序表、鏈表、隊列等關卡,并且附上實戰代碼。請大家拭目以待~

????????最后祝各位都可爬上C語巔峰,斬盡攔路小妖。

????????本文參考 粵嵌文哥 的部分課件,經過整理和修改后發布在C站。如有轉載,請聯系本人

? ?
?

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

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

相關文章

測試bug分析

項目場景&#xff1a; 提示&#xff1a;這里簡述項目相關背景&#xff1a; 例如&#xff1a;項目場景&#xff1a;示例:通過藍牙芯片(HC-05)與手機 APP 通信&#xff0c;每隔 5s 傳輸一批傳感器數據(不是很大) 問題描述 提示&#xff1a;這里描述項目中遇到的問題&#xff1…

Nacos源碼解讀11——客戶端怎么讀取最新的配置信息

項目啟動怎么讀取的配置信息 自動裝配 SpringBoot 自動裝配機制 加載 WEB/INF spring.factories 會將如下幾個Bean加載到ioc 容器中 BeanConditionalOnMissingBeanpublic NacosConfigProperties nacosConfigProperties() {return new NacosConfigProperties();}BeanCondition…

【算法Hot100系列】兩數之和

&#x1f49d;&#x1f49d;&#x1f49d;歡迎來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續學…

【rabbitMQ】模擬work queue,實現單個隊列綁定多個消費者

上一篇&#xff1a; springboot整合rabbitMQ模擬簡單收發消息 https://blog.csdn.net/m0_67930426/article/details/134904766?spm1001.2014.3001.5502 在這篇文章的基礎上進行操作 基本思路&#xff1a; 1.在rabbitMQ控制臺創建一個新的隊列 2.在publisher服務中定義一個…

MySQL中的數據類型

MySQL中的數據類型 大家好&#xff0c;我是微賺淘客系統的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01;今天我們將探討MySQL中的數據類型&#xff0c;這是數據庫設計中至關重要的一部分。數據庫作為程序的底層支持&#xff0c;數據類型的選擇…

[python]利用whl輪子文件python3.12安裝talib

ta-lib目前很多人使用&#xff0c;網上也有很多人下載whl文件直接pip安裝即可&#xff0c;但是最新版本3.12沒有出來&#xff0c;因此本人獨家制作python 3.12版本whl文件&#xff0c;從源碼開始編譯生成。TA-Lib-0.4.28-cp312-cp312-win-amd64.whl &#xff0c;注意這個whl文件…

Java 多線程下的單例模式

單例對象&#xff08;Singleton&#xff09;是一種常用的設計模式。在Java應用中&#xff0c;單例對象能保證在一個JVM中&#xff0c;該對象只有一個實例存在。正是由于這個特 點&#xff0c;單例對象通常作為程序中的存放配置信息的載體&#xff0c;因為它能保證其他對象讀到一…

JWT的原理

在談及jwt原理前,我們其實對jwt并不陌生,對于有經驗的碼農,大都聽過或者實踐過,對于一些初學者,凡是談及安全方面的問題,總是覺得很復雜,感覺不是自己能搞得懂得,但其實無非也是加密解密的過程,不要想的太復雜,我們先說一說JWT在生產上的應用 JWT在生產上的應用 傳遞用戶身份信…

Android系統中使用Cunit測試C/C++接口

Android系統中使用Cunit測試C/C接口 Cunit是C/C語言的單元測試框架&#xff0c;但常用于Windows和Linux開發中。 Android系統中經常有jni、so庫、hal service等都是C/C實現&#xff0c;本文講解如何將Cunit嵌入Android中&#xff0c;用于測試一些C/C api。 Cunit簡介 Cunit是很…

全面解析“由于找不到hid.dll,無法繼續執行代碼”的4個解決方法

在計算機使用過程中&#xff0c;我們經常會遇到一些錯誤提示&#xff0c;其中之一就是“找不到hid.dll”。這個問題通常出現在嘗試運行某個程序或訪問某個設備時。那么&#xff0c;當我們遇到這個問題時&#xff0c;應該如何解決呢&#xff1f;本文將詳細介紹找不到hid.dll的解…

高校需要哪些大數據實訓平臺?

當前&#xff0c;數據已成為重要的生產要素&#xff0c;大數據產業作為以數據生成、采集、存儲、加工、分析、服務為主的戰略性新興產業&#xff0c;是激活數據要素潛能的關鍵支撐&#xff0c;是加快經濟社會發展質量變革、效率變革、動力變革的重要引擎。 泰迪大數據實驗…

Angular 14帶來了類型化表單和獨立組件

獨立組件通過減少對ngmodule的需求&#xff0c;有望簡化Angular應用的開發。 介紹 Angular 14是谷歌開發的、基于typescript的web應用框架的最新版本&#xff0c;它以輸入表單和獨立組件的開發者預覽版為特色。 其特性包括&#xff1a; 一個基于組件的框架&#xff0c;用于構…

Fortran讀取netcdf文件/WRF中的文件讀取

一直很好奇WRF到底如何通過netcdf庫讀取netcdf文件&#xff0c;正巧有個機會&#xff0c;試了下fortran讀取nc文件&#xff0c;總結一下。 netcdf庫 Fortran讀取nc文件需要依賴netcdf外部庫。安裝該庫以后&#xff0c;會有專門寫給ffortran函數聲明的頭文件&#xff1a;netcd…

數據類型·

定義 數據類型是指在編程語言中&#xff0c;能夠表示不同種類的數據值并對其進行操作的集合。在不同的編程語言中&#xff0c;數據類型可能有所不同&#xff0c;但通常包括基本數據類型和復合數據類型兩種。 基本數據類型通常包括整數、浮點數、布爾值、字符等。這些類型的數…

231210 刷題日報

單調棧&#xff1a; 為啥需要單調棧&#xff1f;因為棧的后入先出特性方便從棧頂刪除剛入棧的元素 496. 下一個更大元素 I 739. 每日溫度 單調對列&#xff1a; 為啥要用單調對列&#xff1f;因為像滑動窗口這種題目&#xff0c;窗口兩端都需要插入和刪除&#xff0c;所以需…

Python滿屏飄字表白代碼

? 目錄 系列文章 寫在前面 Turtle入門 滿屏飄字 寫在后面 系列文章 序號文章目錄直達鏈接表白系列1浪漫520表白代碼https://want595.blog.csdn.net/article/details/1306668812滿屏表白代碼https://want595.blog.csdn.net/article/details/1297945183跳動的愛心https://…

CF1898B Milena and Admirer(貪心)

題目鏈接 題目大意 有一個長度為 n 的數組 做操作使這個數組不遞減&#xff1a; 把一個數分成兩個數&#xff0c;例如&#xff1a;x 分為 a 和 b&#xff0c; x a b 求最小操作次數 思路 見注釋 代碼 #include<bits/stdc.h> #define int long long using names…

Shutter的安裝及使用

概要&#xff1a;本篇主要講述截圖軟件Shutter的安裝和使用&#xff0c;操作系統是Ubuntu22.04 一、安裝 sudo apt install shutter 二、區域截圖 1、打開Shutter&#xff0c;點擊Selection 2、提示信息 3、框選矩形區域 按住鼠標左鍵&#xff0c;拖動鼠標&#xff0c;松…

IT行業最被低估的六項技術,再加上一項尚未消亡的技術

2023年&#xff0c;生成式人工智能——更具體地說是ChatGPT——吸引了業界的廣泛關注&#xff0c;深得董事會、首席執行官和其他高管的一致贊賞&#xff08;也不乏害怕情緒&#xff09;。當然&#xff0c;他們的熱情是有道理的&#xff0c;多項研究發現&#xff0c;人工智能正在…

Electron[4] Electron最簡單的打包實踐

1 背景 前面三篇已經完成通過Electron搭建的最簡單的HelloWorld應用了&#xff0c;雖然這個應用還沒添加任何實質的功能&#xff0c;但是用來作為打包的案例&#xff0c;足矣。下面再分享下通過Electron-forge來將應用打包成安裝包。 2 依賴 在Electron[2] Electron使用準備…