自學嵌入式 day 18 - 數據結構 1

數據結構

相互之間存在一種或多種特定關系的數據元素的集合

1.特定關系:

(1)邏輯結構:

①集合:所有在同一個集合中,關系平等。

②線性關系:數據和數據之間是一對一的關系。(數組是線性表的形式之一)

③樹狀關系:一對多

④圖狀解構:多對多

(2)物理結構(在內存當中的存儲關系,即將上述關系存入內存):

①順序存儲:數據存放在連續的存儲單位中。邏輯關系和物理關系一致

②鏈式結構(鏈表):數據存放的單位是隨機或任意的

Struct Per 數據元素

{

? ? ? ? char name;

? ? ? ? int age;

? ? ? ? char phone;

}

程序?=??數據?+?算法

2.算法:

①定義:是解決特定問題求解步驟的描述,計算機中表現為指令的有限序列,每條指令表示一個或多個操作。

②特征(函數):

1),輸入,輸出特性,輸入時可選的,輸出時必須的。
2),有窮性,執行的步驟會自動結束,不能是死循環,并且每一步是在可以接受的時間內完成。
3),確定性,同一個輸入,會得到唯一的輸出。
4),可行性,每一個步驟都是可以實現的。

③設計:

1),正確性:語法正確
????????????????????合法的輸入能得到合理的結果。
? ? ? ? ? ? ? ? ? ? 對非法的輸入,給出滿足要求的規格說明
? ? ? ? ? ? ? ? ? ? 對精心選擇,甚至刁難的測試都能正常運行,結果正確
2),可讀性,便于交流,閱讀,理解
3),健壯性,輸入非法數據,能進行相應的處理,而不是產生異常
4),高效,存儲低,效率高?

④算法時間復雜度:執行算法所時間的度量,o(n)-粗略的估計

1)推算:???用常數1?取代運行時間中的所有加法常數
????????????????在修改后的運行函數中,只保留最高階項。
????????????????如果最高階存在且不是1,則取除這個項相乘的常數。

3.線代表

①定義:零個或多個數據元素的有限序列
②特征:元素之間是有順序了。如果存在多個元素,第一個元素無前驅,最有一個沒有后繼,其他的元素只有一個前驅和一個后繼。
?????????????? 當線性表元素的個數n(n>=0)定義為線性表的長度,當n=0時,為空表。在非空的表中每個元素都有一個確定的位置,如果a1是第一個元素,那么an就是第n個元素。

③線代表的常規操作:

線性表的常規操作??ADT
typedef?struct person?{
char?name[32];
char?sex;
int?age;
int?score;
}DATATYPE;
typedef?int?Datatype;
typedef?struct?list?{
DATATYPE?*head;
int?tlen;
int?clen;
}SeqList;

SeqList?*CreateSeqList(int?len);//創建順序鏈表
int?DestroySeqList(SeqList?*list);//銷毀鏈表
int?ShowSeqList(SeqList?*list);//遍歷輸出鏈表
int?InsertTailSeqList(SeqList?*list,?DATATYPE?data);//尾部元素賦值
int?IsFullSeqList(SeqList?*list);//判斷鏈表是否已滿
int?IsEmptySeqList(SeqList?*list);//判斷鏈表是否為空
int?InsertPosSeqList(SeqList?*list,?DATATYPE?data,?int?pos);//指定位置插入元素
int?FindSeqList(SeqList?*list,?char?*name);//查找元素
int?ModifySeqList(SeqList?*list,?char?*old,?DATATYPE?new);//修改成員值
int?DeleteSeqList(SeqList?*list,?char?*name);//刪除成員
int?ClearSeqList(SeqList?*list);//清空元素

④上述操作代碼表示:


#include "seqlist.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
SeqList *CreateSeqList (int len)//創建順序鏈表
{
? SeqList *sl = malloc (sizeof (SeqList));
? if (NULL == sl) {
? ? fprintf (stderr, "CreateSeqList malloc error\n");
? ? return NULL;
? }

? sl->head = malloc (sizeof (DATATYPE) * len);
? if (NULL == sl->head) {
? ? fprintf (stderr, "CreateSeqList malloc2 error\n");
? ? return NULL;
? }
? sl->tlen = len;
? sl->clen = 0;

? return sl;
}

int IsFullSeqList (SeqList *list)//判斷鏈表是否已滿
{
? if (NULL == list) {
? ? fprintf (stderr, "IsFullSeqList paramter error\n");
? ? return 1;
? }
? return list->clen == list->tlen;
}

int InsertTailSeqList (SeqList *list, DATATYPE *data)//尾部元素賦值
{
? if (IsFullSeqList (list)) {
? ? fprintf (stderr, "seqlist full\n");
? ? return 1;
? }

? memcpy (&list->head[list->clen], data, sizeof (DATATYPE));
? list->clen++;
? return 0;
}

int ShowSeqList (SeqList *list)//遍歷輸出鏈表
{
? int len = GetSizeSeqList (list);
? int i = 0;
? for (i = 0; i < len; ++i)
? {
? ? printf ("%s %c %d %d\n", list->head[i].name, list->head[i].sex,
? ? ? ? ? ? list->head[i].age, list->head[i].score);
? }
? return 0;
}

int GetSizeSeqList (SeqList *list)?
{?
? ? return list->clen;?
? ??
}

int FindSeqlist(SeqList *list,char *name)//查找元素
{
? int i = 0;
? int len = GetSizeSeqList(list);
? for(i = 0;i < len;++i)
? {
? ? if(0 == strcmp(list -> head[i].name,name))
? ? {
? ? ? return i;
? ? }

? }
? return -1;
}
int InsertPosSeqList(SeqList *list, DATATYPE *data, int pos)//指定位插入元素
{
? if(IsFullSeqList(list))
? {
? ? return 1;
? }
? int len = GetSizeSeqList(list);
? if(pos < 0 || len < pos)
? {
?? ?return 1;
? }
? int i ;
? for(i = list -> clen;i > pos;--i)
? {
?? ?memcpy(&list -> head[i],&list -> head[i - 1],sizeof(DATATYPE));
? }
? memcpy(&list -> head[pos],data,sizeof(DATATYPE));
? list -> clen++;
? return 0;
}

int IsEmpList(SeqList *list)//判斷鏈表是否為空
{
?? ?return 0 == list -> clen;
}

int DeleteSeqList(SeqList *list,char *name)//刪除鏈表
{
?? ?if(IsEmpList(list))
?? ?{
?? ??? ?return 1;
?? ?}
?? ?int ret = FindSeqlist(list,name);
?? ?if(-1 == ret)
?? ?{
?? ??? ?return 1;
?? ?}
?? ?int len = GetSizeSeqList(list);
?? ?int i ;
?? ?for(i = ret;i < len - 1;++i)
?? ?{
?? ??? ?memcpy(&list -> head[i],&list -> head[i + 1],sizeof(DATATYPE));
?? ?}
?? ?list -> clen--;
?? ?return 0
? }

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

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

相關文章

《Java 大視界——Java 大數據在智能電網分布式能源協同調度中的應用與挑戰》

隨著風電、光伏等分布式能源大規模接入電網&#xff0c;傳統調度系統面臨數據規模激增、響應延遲顯著、多源異構數據融合困難等核心問題。本文聚焦Java生態下的大數據技術體系&#xff0c;深入探討其在智能電網實時監測、負荷預測、資源優化配置等場景中的落地實踐。通過分析Sp…

解密企業級大模型智能體Agentic AI 關鍵技術:MCP、A2A、Reasoning LLMs-MCP大模型上下文解析

解密企業級大模型智能體Agentic AI 關鍵技術&#xff1a;MCP、A2A、Reasoning LLMs-MCP大模型上下文解析 我們首先來看一下 整個MCP的一個基本的一個流程&#xff0c;他解決的一個問題。我們回到這里&#xff0c;他解決的一個問題是什么呢&#xff1f;他解決這個問題就是你的大…

25.5.15

沒有比水題更令人開心的事情了 典型的并查集題目&#xff0c;并查集分為并和查&#xff0c;并就是把有關系的父親根結點設為同一個&#xff0c;查就是在成功構造后對其進行查詢 查通過遞歸實現 if (x f[x])return x; return f[x] find(f[x]); 由于并查集的特點&#xff0…

低損耗高效能100G O Band DWDM 10km光模塊 | 支持密集波分復用

目錄 前言 一、產品概述 100G QSFP28 O Band DWDM 10km光模塊核心特點包括&#xff1a; 二、為何選擇O Band DWDM方案&#xff1f; 1.低色散損耗&#xff0c;傳輸更穩定 2.兼容性強 三、典型應用場景 1.數據中心互聯&#xff08;DCI&#xff09; 2.企業園區/智慧城市組網 3.電信…

CentOS 7 內核升級指南:解決兼容性問題并提升性能

點擊上方“程序猿技術大咖”&#xff0c;關注并選擇“設為星標” 回復“加群”獲取入群討論資格&#xff01; CentOS 7 默認搭載的 3.10.x 版本內核雖然穩定&#xff0c;但隨著硬件和軟件技術的快速發展&#xff0c;可能面臨以下問題&#xff1a; 硬件兼容性不足&#xff1a;新…

計算機視覺----基礎概念、卷積

一、概述 1.計算機視覺的定義 計算機視覺(Computer Vision)是一個跨學科的研究領域,主要涉及如何使計算機能夠通過處理和理解數字圖像或視頻來自動進行有意義的分析和決策。其目標是使計算機能夠從視覺數據中獲取高層次的理解,類似于人類的視覺處理能力。 具體來說,計算機…

2025認證杯數學建模第二階段C題:化工廠生產流程的預測和控制,思路+模型+代碼

2025認證杯數學建模第二階段思路模型代碼&#xff0c;詳細內容見文末名片 一、探秘化工世界&#xff1a;問題背景大揭秘 在 2025 年 “認證杯”數學中國數學建模網絡挑戰賽第二階段 C 題中&#xff0c;我們一頭扎進了神秘又復雜的化工廠生產流程預測與控制領域。想象一下&…

關于AI人工智能的知識圖譜簡介

人工智能是計算機科學的一個重要領域&#xff0c;旨在理解和構建智能行為。人工智能可以被劃分為多個子領域或分支&#xff0c;包括機器學習、深度學習、自然語言處理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;、計算機視覺&#xff08;Computer Vis…

巧妙利用redis防爆破

爆破&#xff0c;也就是通過海量的嘗試&#xff0c;最終確定密碼&#xff0c;人們設置密碼具有習慣性&#xff0c;好記、簡單、有象征等&#xff0c;也就有密碼字典一說&#xff0c;但是該字典也是巨量的&#xff0c;但是相對于各種字母符號等組合就顯得輕量非常多 在Java Spr…

Uniapp開發鴻蒙購物項目教程之樣式選擇器

大家好&#xff0c;今天依然為大家帶來鴻蒙跨平臺開發教程的分享&#xff0c;我們本系列的教程最終要做一個購物應用&#xff0c;通過這個項目為大家分享uniapp開發鴻蒙應用從配置開發環境到應用打包上架的完成過程。 昨天的文章實現了應用首頁的輪播圖&#xff0c;其中涉及到…

2、ubantu系統配置OpenSSH | 使用vscode或pycharm遠程連接

1、OpenSSH介紹 OpenSSH&#xff08;Open Secure Shell&#xff09;是一套基于SSH協議的開源工具&#xff0c;用于在計算機網絡中提供安全的加密通信。它被廣泛用于遠程系統管理、文件傳輸和網絡服務的安全隧道搭建&#xff0c;是保護網絡通信免受竊聽和攻擊的重要工具。 1.1…

Leetcode刷題 | Day63_圖論08_拓撲排序

一、學習任務 拓撲排序代碼隨想錄 二、具體題目 1.拓撲排序117. 軟件構建 【題目描述】 某個大型軟件項目的構建系統擁有 N 個文件&#xff0c;文件編號從 0 到 N - 1&#xff0c;在這些文件中&#xff0c;某些文件依賴于其他文件的內容&#xff0c;這意味著如果文件 A 依…

uniapp中vue3和pinia安裝依賴npm install失敗

目錄 一、問題描述 二、問題原因 三、問題解析及解決方案 一、問題描述 用uni-app開發小程序的時候&#xff0c;使用了vue3pinia,安裝依賴的時候發現vue和pinia的版本問題&#xff0c;安裝失敗&#xff0c; npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve np…

2025認證杯第二階段數學建模B題:謠言在社交網絡上的傳播思路+模型+代碼

2025認證杯數學建模第二階段思路模型代碼&#xff0c;詳細內容見文末名片 一、引言 在當今數字化時代&#xff0c;社交網絡已然成為人們生活中不可或缺的一部分。信息在社交網絡上的傳播速度猶如閃電&#xff0c;瞬間就能觸及大量用戶。然而&#xff0c;這也為謠言的滋生和擴…

【C#】Thread.Join()、異步等待和直接join

JogThread.Join() 是 .NET 中 System.Threading.Thread 類的一個方法&#xff0c;用來讓當前調用線程暫停執行&#xff0c;直到目標線程&#xff08;這里是 JogThread&#xff09;終止為止。以下是它的核心語義和你在 UI 代碼里需要注意的幾個相關知識點。 1. Thread.Join() 的…

牛客網NC22012:判斷閏年問題詳解

牛客網NC22012&#xff1a;判斷閏年問題詳解 &#x1f4dd; 題目描述 題號&#xff1a;NC22012&#xff08;牛客網&#xff09; 時間限制&#xff1a;C/C/Rust/Pascal 1秒&#xff0c;其他語言2秒 空間限制&#xff1a;C/C/Rust/Pascal 32 M&#xff0c;其他語言64 M 判斷一個…

鴻蒙開發——1.ArkTS聲明式開發(UI范式基本語法)

鴻蒙開發——1、ArkTS聲明式開發:UI范式基本語法 [TOC](鴻蒙開發——1、ArkTS聲明式開發:UI范式基本語法)一、ArkTS的基本組成&#xff08;1&#xff09;核心概念&#xff08;像貼標簽一樣控制組件&#xff09;&#xff08;2&#xff09;基礎工具包&#xff08;現成的積木塊&am…

【SPIN】PROMELA語言編程入門基礎語法(SPIN學習系列--1)

PROMELA&#xff08;Protocol Meta Language&#xff09;是一種用于描述和驗證并發系統的形式化建模語言&#xff0c;主要與SPIN&#xff08;Simple Promela Interpreter&#xff09;模型檢查器配合使用。本教程將基于JSPIN&#xff08;SPIN的Java圖形化版本&#xff09;&#…

Automatic Recovery of the Atmospheric Light in Hazy Images論文閱讀

Automatic Recovery of the Atmospheric Light in Hazy Images 1. 論文的研究目標與實際意義1.1 研究目標1.2 實際問題與產業意義2. 論文的創新方法、模型與公式2.1 方法框架2.1.1 方向估計(Orientation Estimation)2.1.2 幅值估計(Magnitude Estimation)2.2 與傳統方法的對…

基于微信小程序的在線聊天功能實現:WebSocket通信實戰

基于微信小程序的在線聊天功能實現&#xff1a;WebSocket通信實戰 摘要 本文將詳細介紹如何使用微信小程序結合WebSocket協議開發一個實時在線聊天功能。通過完整的代碼示例和分步解析&#xff0c;涵蓋界面布局、WebSocket連接管理、消息交互邏輯及服務端實現&#xff0c;適合…