day 18:零基礎學嵌入式之數據結構——

一、基礎內容

1.數據結構:相互之間存在一種或多種特定關系的數據元素的集合。

2.邏輯結構
(1)集合,所有數據在同一個集合中,關系平等。
(2)線性,數據和數據之間是一對一的關系
(3)樹,?一對多
(4)圖,多對多

3.物理結構(在內存當中的存儲關系)
(1)順序存儲,數據存放在連續的存儲單位中。邏輯關系和物理關系一致
(2)鏈式,數據存放的存儲單位是隨機或任意的,可以連續也可以不連續。

4.算法:是解決特定問題求解步驟的描述,計算機中表現為指令的有限序列,每條指令表示一個或多個操作。
5.算法的特征
1,輸入,輸出特性,輸入時可選的,輸出時必須的。
2,有窮性,執行的步驟會自動結束,不能是死循環,并且每一步是在可以接受的時間內完成。
3,確定性,同一個輸入,會得到唯一的輸出。
4,可行性,每一個步驟都是可以實現的。

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

7.算法時間復雜度:也就是執行這個算法所花時間的度量

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

二、線性表

1.定義:零個或者多個數據元素的有限序列;
2.特征

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

3.線性表的常規操作??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);

4.手撕上述代碼

(1)seqlist.h

#ifndef _SEQLIST_H_
#define _SEQLIST_H_typedef struct	person {char name[32];char sex;int age;int score;
}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 *newdata);
int DeleteSeqList(SeqList *list, char *name);
int ClearSeqList(SeqList *list);
int GetSizeSeqList(SeqList *list);
DATATYPE * GetItemSeqList(SeqList*list,int ind);
#endif // !1

(2)seqlist.c

#include "seqlist.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.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 erro\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;//list->head[list -> clen]= *data;
}
int ShowSeqList(SeqList *list)
{int len = GetSizeSeqList(list);int i;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);}
}
int GetSizeSeqList(SeqList *list)
{return list->clen; 
}
int IsEmptySeqList(SeqList *list)
{return 0 == 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;
}
DATATYPE *GetItemSeqList(SeqList *List,int ind)
{if(NULL ==List){return NULL;}int len = GetSizeSeqList(List);if(ind < 0||ind >=len){return NULL;}return &List->head[ind];
}
int InsertPosSeqList(SeqList *list, DATATYPE *data, int pos)
{if(IsFullSeqList(list)){return 1;}int len = GetSizeSeqList(list);if(pos<0||pos>len){return 1;;}int i=0;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 DeleteSeqList(SeqList *list, char *name)
{if (IsEmptySeqList(list)){return 1;}  int vel=FindSeqList(list,name);int vel=FindSeqList(list,name);if(-1 == vel){return 1;}int i;int len = GetSizeSeqList(list);for(i=vel;i<=list->clen;++i){memcpy(&list->head[i], &list->head[i+1],sizeof(DATATYPE));}list->clen -=1;// list->clen++;return 0;
}
int ClearSeqList(SeqList *list)
{return list->clen = 0;
}
int ModifySeqList(SeqList *list, char *old, DATATYPE *newdeta)
{if (IsEmptySeqList(list)){return 1;}    int vel=FindSeqList(list,old);if(-1 == vel){return 1;}memcpy(&list->head[vel], newdeta, sizeof(DATATYPE));return 0;
}
int DestroySeqList(SeqList *list)
{if(NULL == list){return 1;}free(list->head);free(list);return 0;
}

(3)main.c

#include "seqlist.h"
#include<stdio.h>
int main(int argc,char **argv)
{SeqList *s1 = CreateSeqList(5);DATATYPE data[]={{"zhangsan",'F',20,80},{"san",'M',21,81},{"zhan",'F',41,85},{"gsan",'M',35,82},{"an",'M',22,90},};InsertTailSeqList(s1,&data[0]);InsertTailSeqList(s1,&data[1]);InsertTailSeqList(s1,&data[2]);ShowSeqList(s1);printf("***************shan***\n");DeleteSeqList(s1, "zhangsan");// InsertPosSeqList(s1, &data[2],3);ShowSeqList(s1);// int ret = FindSeqList(s1,"zhangsan");// if(-1 ==ret)// {//     printf("not found");// }// else// {//     DATATYPE *tmp = GetItemSeqList(s1,ret);//     printf("%s %d\n",tmp->name,tmp->score);// }return 0;
}

5.線性表順序存儲的優點,缺點
(1)優點
????????1)無需為表中的邏輯關系增加額外的存儲空間
????????2)可以快速隨機訪問元素O(1)
(2)缺點
????????1)插入,刪除元素需要移動元素o(n)
????????2)無法動態存儲。

三、vs—code的一些操作

(1)表頭結果:放數組的狀態信息,head:數組名,是指針指向首元素地址;tlen:總長度;clen:當前長度,代表使用的有效長度;

  • sudo:以管理員的
  • ping www.baidu.com:計算機是否聯上網
  • 虛擬機快速上網步驟:虛擬機—》配置-網絡適配器-選地址轉換NAT(windows能上網虛擬機就可以上網)-ifconfig-看ens的名字(一般是33)-sudo vi /etc/network/interfaces-1回車

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

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

相關文章

【SSL證書系列】客戶端如何驗證https網站服務器發的證書是否由受信任的根證書簽發機構簽發

客戶端驗證HTTPS網站證書是否由受信任的根證書頒發機構&#xff08;CA&#xff09;簽發&#xff0c;是一個多步驟的過程&#xff0c;涉及證書鏈驗證、信任錨&#xff08;Trust Anchor&#xff09;檢查、域名匹配和吊銷狀態驗證等。以下是詳細的驗證流程&#xff1a; 1. 證書鏈的…

iOS即時通信的技術要點

iOS即時通信開發的關鍵技術要點總結&#xff1a; 一、通訊協議選擇 Socket通信 基礎實現&#xff1a;使用原生BSD Socket或CFNetwork框架&#xff08;復雜&#xff09;&#xff0c;推薦第三方庫如CocoaAsyncSocket&#xff08;封裝GCDAsyncSocket&#xff09;&#xff0c;簡化T…

智能AI構建工地安全網:跌倒、抽搐、區域入侵多場景覆蓋

智能AI在工地安全中的應用&#xff1a;從監測到救援的全流程實踐 一、背景&#xff1a;高溫作業下的工地安全挑戰 隨著夏季高溫持續&#xff0c;工地戶外作業環境面臨嚴峻考驗。工人因高溫疲勞、脫水或突發疾病引發的行為異常&#xff08;如暈厥、抽搐、跌倒&#xff09;頻發…

Doris

Apache Doris&#xff08;原名&#xff1a;Palo&#xff09;是一個高性能、實時的MPP分析型數據庫&#xff0c;非常適合海量數據的即席查詢、報表分析、指標統計等 OLAP 場景。Doris 的設計目標是&#xff1a;極致查詢性能、簡單易用、支持高并發分析和明細查詢。 一、Doris 核…

# 2-STM32F103-復位和時鐘控制RCC

STM32-復位和時鐘控制RCC 2-STM32-復位和時鐘控制RCC摘要說明本文參考資料如下&#xff1a; 一、STM32最小系統回顧STM32F103C8T6核心板原理圖 二、復位三、時鐘3.1 時鐘樹3.2 STM32啟動過程3.2 SystemInit()函數3.2.1 SystemInit()第1句&#xff1a;3.2.2 SystemInit()第2句&a…

rk3576 gstreamer opencv

安裝gstreamer rk3588使用gstreamer推流_rk3588 gstreamer-CSDN博客 rk3588使用gstreamer推流_rk3588 gstreamer-CSDN博客 Installing on Linux sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-pl…

Quic如何實現udp可靠傳輸

QUIC&#xff08;Quick UDP Internet Connections&#xff09;是由 Google 設計并被 IETF 標準化的傳輸層協議&#xff0c;它基于 UDP 實現&#xff0c;但提供了類似 TCP 的可靠性和更高級的功能&#xff08;如多路復用、0-RTT 握手、TLS 加密等&#xff09;。 盡管 UDP 是不可…

uniapp-商城-59-后臺 新增商品(屬性的選中,進行過濾展示,filter,some,every和map)

前面講了屬性的添加&#xff0c;添加完成后&#xff0c;數據庫中已經存在數據了&#xff0c;這時再繼續商品的添加時&#xff0c;就可以進行屬性的選擇了。 在商品添加過程中&#xff0c;屬性選擇是一個關鍵步驟。首先&#xff0c;界面需要展示嵌套的屬性數據&#xff0c;用戶通…

負載均衡 ELB 在 zkmall開源商城高流量場景下的算法優化

在電商大促、直播帶貨等高頻交易場景下&#xff0c;流量突發增長對系統穩定性提出嚴峻挑戰。ZKmll 開源商城通過對負載均衡 ELB&#xff08;Elastic Load Balancer&#xff09;算法的深度優化&#xff0c;結合業務場景特性設計動態加權輪詢 地域感知 熱點分流的混合策略&…

Linux干貨(三)

前言 從B站黑馬程序員Linux課程摘選的學習干貨&#xff0c;新手友好&#xff01;若有侵權&#xff0c;會第一時間處理。 目錄 前言 1.which find命令 1.which命令 2.find命令 2.grep wc 管道符 1.grep命令 2.wc命令 3.管道符 3.echo tail 重定向符 1.echo命令 2.反…

Sigmoid與Softmax:從二分類到多分類的深度解析

Sigmoid與Softmax:從二分類到多分類的深度解析 聯系 函數性質:二者都是非線性函數 ,也都是指數歸一化函數,可將輸入值映射為0到1之間的實數 ,都能把輸出轉化成概率分布的形式,在神經網絡中常作為激活函數使用。Softmax是Sigmoid的推廣:從功能角度看,Softmax函數可視為…

文件系統交互實現

關于之前的搭建看QT控件文件系統的實現-CSDN博客&#xff0c;接下來是對本程序的功能完善&#xff0c;我想著是這樣設計的&#xff0c;打開一個目錄以后&#xff0c;鼠標選中一個項可以是目錄&#xff0c;也可以是文件&#xff0c;右鍵可以出現一個菜單選擇操作&#xff0c;比如…

[ctfshow web入門] web75

信息收集 啟用了open_basedir&#xff0c;所以之前的方法又不能用了 解題 cforeach(new DirectoryIterator("glob:///*") as $a){echo($a->__toString(). ); } ob_flush();cif ( $a opendir("glob:///*") ) {while ( ($file readdir($a)) ! false …

Vulfocus靶場-文件上傳-3

WSO2 文件上傳 &#xff08;CVE-2022-29464&#xff09; WSO2是一家成立于 2005 年的開源技術提供商。它提供了一個企業平臺&#xff0c;用于在本地和整個 Internet 上 集成應用程序編程接口(API)、應用程序和 Web 服務。 某些 WSO2 產品允許無限制的文件上傳和遠程代碼執行。…

基于MCP的橋梁設計規范智能解析與校審系統構建實踐

引言 今天本文準備盤一個大活&#xff0c;聊一聊偏特定行業一點的AI技術深入應用思考及實踐。 一、傳統設計行業項目背景與行業痛點 在橋梁設計領域&#xff0c;標準規范是設計的基礎&#xff0c;直接關系到橋梁結構的安全性、耐久性和經濟性。然而&#xff0c;傳統的規范應…

遠程連接電腦的方法?異地遠程桌面連接和三方軟件實現

遠程連接電腦&#xff0c;是指通過網絡技術&#xff0c;在一臺設備上操控另一臺設備的電腦桌面&#xff0c;實現跨地域的操作和管理。在日常工作、技術支持、遠程辦公等場景中&#xff0c;遠程連接電腦都發揮著重要作用。實現遠程連接電腦主要有系統自帶工具和第三方軟件兩種方…

win11 安裝 wsl ubuntu 18.04后換源失敗!

記錄幾個問題是如何解決的。 一 下載wsl后&#xff0c;有報錯&#xff1a; Installing, this may take a few minutes... WslRegisterDistribution failed with error: 0x8007019e Error: 0x8007019e ??????? Linux ? Windows ???? Press any key to continue... …

PY32系列單片機離線燒錄器,可配置選項字節和上機臺批量燒錄

PY32離線燒錄器采用 MINI-USB 接口&#xff0c;提供穩定的物理連接。設備與電腦采用串口方式通訊&#xff0c;波特率固定為 1M。需配合我們的上位機使用。PY32離線燒錄器現支持芯片型號在PY32F002A/002B/002/003/030/071/072/040/403/303各封裝和XL32F001/003。燒錄器僅提供 3.…

深入理解 this 指向與作用域解析

引言 JavaScript 中的 this 關鍵字的靈活性既是強大特性也是常見困惑源。理解 this 的行為對于編寫可維護的代碼至關重要&#xff0c;但其動態特性也會讓我們感到困惑。 與大多數編程語言不同&#xff0c;JavaScript 的 this 不指向函數本身&#xff0c;也不指向函數的詞法作…

# IntelliJ IDEA企業版開發入門:包、類與項目結構詳解

--- ## 一、項目結構與包的概念 ### 1. 標準項目目錄解析 在IntelliJ IDEA中&#xff0c;一個Java項目通常包含以下核心目錄&#xff1a; - **src**&#xff1a;源代碼根目錄。 - **main**&#xff1a;主代碼目錄&#xff0c;存放業務邏輯代碼。 - **java**&#xff1a;Java…